union-find
- implement quick find - implement quick union - implement quick union with optimization
This commit is contained in:
parent
2abd5aaa1d
commit
96185eed8e
@ -0,0 +1,46 @@
|
|||||||
|
/*
|
||||||
|
* MIT License
|
||||||
|
*
|
||||||
|
* Copyright (c) 2019 norangebit
|
||||||
|
*
|
||||||
|
* Permission is hereby granted, free of charge, to any person obtaining a copy
|
||||||
|
* of this software and associated documentation files (the "Software"), to deal
|
||||||
|
* in the Software without restriction, including without limitation the rights
|
||||||
|
* to use, copy, modify, tryMerge, publish, distribute, sublicense, and/or sell
|
||||||
|
* copies of the Software, and to permit persons to whom the Software is
|
||||||
|
* furnished to do so, subject to the following conditions:
|
||||||
|
*
|
||||||
|
* The above copyright notice and this permission notice shall be included in all
|
||||||
|
* copies or substantial portions of the Software.
|
||||||
|
*
|
||||||
|
* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
||||||
|
* IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
||||||
|
* FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
|
||||||
|
* AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
|
||||||
|
* LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
|
||||||
|
* OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
|
||||||
|
* SOFTWARE.
|
||||||
|
*
|
||||||
|
*/
|
||||||
|
|
||||||
|
package it.norangeb.algorithms.datastructures.unionfind
|
||||||
|
|
||||||
|
class QuickFind(private val capacity: Int) : UnionFind {
|
||||||
|
private val ids = IntArray(capacity) { it }
|
||||||
|
|
||||||
|
override fun find(element: Int): Int {
|
||||||
|
return ids[element]
|
||||||
|
}
|
||||||
|
|
||||||
|
override fun union(first: Int, second: Int) {
|
||||||
|
val firstId = find(first)
|
||||||
|
val secondId = find(second)
|
||||||
|
|
||||||
|
if (firstId == secondId)
|
||||||
|
return
|
||||||
|
|
||||||
|
for (i in 0 until capacity)
|
||||||
|
if (ids[i] == firstId)
|
||||||
|
ids[i] = secondId
|
||||||
|
}
|
||||||
|
}
|
@ -0,0 +1,48 @@
|
|||||||
|
/*
|
||||||
|
* MIT License
|
||||||
|
*
|
||||||
|
* Copyright (c) 2019 norangebit
|
||||||
|
*
|
||||||
|
* Permission is hereby granted, free of charge, to any person obtaining a copy
|
||||||
|
* of this software and associated documentation files (the "Software"), to deal
|
||||||
|
* in the Software without restriction, including without limitation the rights
|
||||||
|
* to use, copy, modify, tryMerge, publish, distribute, sublicense, and/or sell
|
||||||
|
* copies of the Software, and to permit persons to whom the Software is
|
||||||
|
* furnished to do so, subject to the following conditions:
|
||||||
|
*
|
||||||
|
* The above copyright notice and this permission notice shall be included in all
|
||||||
|
* copies or substantial portions of the Software.
|
||||||
|
*
|
||||||
|
* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
||||||
|
* IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
||||||
|
* FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
|
||||||
|
* AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
|
||||||
|
* LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
|
||||||
|
* OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
|
||||||
|
* SOFTWARE.
|
||||||
|
*
|
||||||
|
*/
|
||||||
|
|
||||||
|
package it.norangeb.algorithms.datastructures.unionfind
|
||||||
|
|
||||||
|
class QuickUnion(capacity: Int) : UnionFind {
|
||||||
|
private val ids = IntArray(capacity) { it }
|
||||||
|
|
||||||
|
override fun find(element: Int): Int {
|
||||||
|
var i = element
|
||||||
|
while (i != ids[i])
|
||||||
|
i = ids[i]
|
||||||
|
|
||||||
|
return i
|
||||||
|
}
|
||||||
|
|
||||||
|
override fun union(first: Int, second: Int) {
|
||||||
|
val firstId = find(first)
|
||||||
|
val secondId = find(second)
|
||||||
|
|
||||||
|
if (firstId == secondId)
|
||||||
|
return
|
||||||
|
|
||||||
|
ids[firstId] = secondId
|
||||||
|
}
|
||||||
|
}
|
@ -0,0 +1,50 @@
|
|||||||
|
/*
|
||||||
|
* MIT License
|
||||||
|
*
|
||||||
|
* Copyright (c) 2019 norangebit
|
||||||
|
*
|
||||||
|
* Permission is hereby granted, free of charge, to any person obtaining a copy
|
||||||
|
* of this software and associated documentation files (the "Software"), to deal
|
||||||
|
* in the Software without restriction, including without limitation the rights
|
||||||
|
* to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
|
||||||
|
* copies of the Software, and to permit persons to whom the Software is
|
||||||
|
* furnished to do so, subject to the following conditions:
|
||||||
|
*
|
||||||
|
* The above copyright notice and this permission notice shall be included in all
|
||||||
|
* copies or substantial portions of the Software.
|
||||||
|
*
|
||||||
|
* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
||||||
|
* IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
||||||
|
* FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
|
||||||
|
* AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
|
||||||
|
* LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
|
||||||
|
* OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
|
||||||
|
* SOFTWARE.
|
||||||
|
*
|
||||||
|
*/
|
||||||
|
|
||||||
|
package it.norangeb.algorithms.datastructures.unionfind
|
||||||
|
|
||||||
|
class QuickUnionCompressionPath(capacity: Int) : UnionFind {
|
||||||
|
private val ids = IntArray(capacity) { it }
|
||||||
|
|
||||||
|
override fun find(element: Int): Int {
|
||||||
|
var i = element
|
||||||
|
while (i != ids[i]) {
|
||||||
|
ids[i] = ids[ids[i]]
|
||||||
|
i = ids[i]
|
||||||
|
}
|
||||||
|
|
||||||
|
return i
|
||||||
|
}
|
||||||
|
|
||||||
|
override fun union(first: Int, second: Int) {
|
||||||
|
val firstId = find(first)
|
||||||
|
val secondId = find(second)
|
||||||
|
|
||||||
|
if (firstId == secondId)
|
||||||
|
return
|
||||||
|
|
||||||
|
ids[firstId] = secondId
|
||||||
|
}
|
||||||
|
}
|
@ -0,0 +1,58 @@
|
|||||||
|
/*
|
||||||
|
* MIT License
|
||||||
|
*
|
||||||
|
* Copyright (c) 2019 norangebit
|
||||||
|
*
|
||||||
|
* Permission is hereby granted, free of charge, to any person obtaining a copy
|
||||||
|
* of this software and associated documentation files (the "Software"), to deal
|
||||||
|
* in the Software without restriction, including without limitation the rights
|
||||||
|
* to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
|
||||||
|
* copies of the Software, and to permit persons to whom the Software is
|
||||||
|
* furnished to do so, subject to the following conditions:
|
||||||
|
*
|
||||||
|
* The above copyright notice and this permission notice shall be included in all
|
||||||
|
* copies or substantial portions of the Software.
|
||||||
|
*
|
||||||
|
* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
||||||
|
* IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
||||||
|
* FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
|
||||||
|
* AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
|
||||||
|
* LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
|
||||||
|
* OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
|
||||||
|
* SOFTWARE.
|
||||||
|
*
|
||||||
|
*/
|
||||||
|
|
||||||
|
package it.norangeb.algorithms.datastructures.unionfind
|
||||||
|
|
||||||
|
class QuickUnionWithSize(capacity: Int) : UnionFind {
|
||||||
|
private val ids = IntArray(capacity) { it }
|
||||||
|
private val size = IntArray(capacity) { 0 }
|
||||||
|
|
||||||
|
override fun find(element: Int): Int {
|
||||||
|
var i = element
|
||||||
|
while (i != ids[i])
|
||||||
|
i = ids[i]
|
||||||
|
|
||||||
|
return i
|
||||||
|
}
|
||||||
|
|
||||||
|
override fun union(first: Int, second: Int) {
|
||||||
|
val firstId = find(first)
|
||||||
|
val secondId = find(second)
|
||||||
|
|
||||||
|
if (firstId == secondId)
|
||||||
|
return
|
||||||
|
|
||||||
|
when {
|
||||||
|
size[first] < size[second] -> {
|
||||||
|
ids[firstId] = secondId
|
||||||
|
size[secondId] += size[firstId]
|
||||||
|
}
|
||||||
|
else -> {
|
||||||
|
ids[secondId] = firstId
|
||||||
|
size[firstId] += size[secondId]
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
@ -0,0 +1,32 @@
|
|||||||
|
/*
|
||||||
|
* MIT License
|
||||||
|
*
|
||||||
|
* Copyright (c) 2019 norangebit
|
||||||
|
*
|
||||||
|
* Permission is hereby granted, free of charge, to any person obtaining a copy
|
||||||
|
* of this software and associated documentation files (the "Software"), to deal
|
||||||
|
* in the Software without restriction, including without limitation the rights
|
||||||
|
* to use, copy, modify, tryMerge, publish, distribute, sublicense, and/or sell
|
||||||
|
* copies of the Software, and to permit persons to whom the Software is
|
||||||
|
* furnished to do so, subject to the following conditions:
|
||||||
|
*
|
||||||
|
* The above copyright notice and this permission notice shall be included in all
|
||||||
|
* copies or substantial portions of the Software.
|
||||||
|
*
|
||||||
|
* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
||||||
|
* IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
||||||
|
* FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
|
||||||
|
* AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
|
||||||
|
* LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
|
||||||
|
* OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
|
||||||
|
* SOFTWARE.
|
||||||
|
*
|
||||||
|
*/
|
||||||
|
|
||||||
|
package it.norangeb.algorithms.datastructures.unionfind
|
||||||
|
|
||||||
|
interface UnionFind {
|
||||||
|
fun find(element: Int): Int
|
||||||
|
fun union(first: Int, second: Int)
|
||||||
|
fun connected(first: Int, second: Int): Boolean = find(first) == find(second)
|
||||||
|
}
|
@ -0,0 +1,54 @@
|
|||||||
|
/*
|
||||||
|
* MIT License
|
||||||
|
*
|
||||||
|
* Copyright (c) 2019 norangebit
|
||||||
|
*
|
||||||
|
* Permission is hereby granted, free of charge, to any person obtaining a copy
|
||||||
|
* of this software and associated documentation files (the "Software"), to deal
|
||||||
|
* in the Software without restriction, including without limitation the rights
|
||||||
|
* to use, copy, modify, tryMerge, publish, distribute, sublicense, and/or sell
|
||||||
|
* copies of the Software, and to permit persons to whom the Software is
|
||||||
|
* furnished to do so, subject to the following conditions:
|
||||||
|
*
|
||||||
|
* The above copyright notice and this permission notice shall be included in all
|
||||||
|
* copies or substantial portions of the Software.
|
||||||
|
*
|
||||||
|
* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
||||||
|
* IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
||||||
|
* FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
|
||||||
|
* AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
|
||||||
|
* LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
|
||||||
|
* OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
|
||||||
|
* SOFTWARE.
|
||||||
|
*
|
||||||
|
*/
|
||||||
|
|
||||||
|
package it.norangeb.algorithms.datastructures.unionfind
|
||||||
|
|
||||||
|
import org.amshove.kluent.`should be equal to`
|
||||||
|
import org.junit.Before
|
||||||
|
import org.junit.jupiter.api.Test
|
||||||
|
|
||||||
|
class QuickFindTest {
|
||||||
|
private var unionFind = QuickFind(10)
|
||||||
|
|
||||||
|
@Before
|
||||||
|
fun init() {
|
||||||
|
unionFind = QuickFind(10)
|
||||||
|
}
|
||||||
|
|
||||||
|
@Test
|
||||||
|
fun testUnion() {
|
||||||
|
unionFind.connected(1, 2) `should be equal to` false
|
||||||
|
unionFind.union(1, 2)
|
||||||
|
unionFind.connected(1, 2) `should be equal to` true
|
||||||
|
}
|
||||||
|
|
||||||
|
@Test
|
||||||
|
fun testTransitiveUnion() {
|
||||||
|
unionFind.connected(1, 3) `should be equal to` false
|
||||||
|
unionFind.union(1, 2)
|
||||||
|
unionFind.union(2, 3)
|
||||||
|
unionFind.connected(1, 3) `should be equal to` true
|
||||||
|
}
|
||||||
|
}
|
@ -0,0 +1,54 @@
|
|||||||
|
/*
|
||||||
|
* MIT License
|
||||||
|
*
|
||||||
|
* Copyright (c) 2019 norangebit
|
||||||
|
*
|
||||||
|
* Permission is hereby granted, free of charge, to any person obtaining a copy
|
||||||
|
* of this software and associated documentation files (the "Software"), to deal
|
||||||
|
* in the Software without restriction, including without limitation the rights
|
||||||
|
* to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
|
||||||
|
* copies of the Software, and to permit persons to whom the Software is
|
||||||
|
* furnished to do so, subject to the following conditions:
|
||||||
|
*
|
||||||
|
* The above copyright notice and this permission notice shall be included in all
|
||||||
|
* copies or substantial portions of the Software.
|
||||||
|
*
|
||||||
|
* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
||||||
|
* IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
||||||
|
* FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
|
||||||
|
* AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
|
||||||
|
* LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
|
||||||
|
* OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
|
||||||
|
* SOFTWARE.
|
||||||
|
*
|
||||||
|
*/
|
||||||
|
|
||||||
|
package it.norangeb.algorithms.datastructures.unionfind
|
||||||
|
|
||||||
|
import org.amshove.kluent.`should be equal to`
|
||||||
|
import org.junit.Before
|
||||||
|
import org.junit.jupiter.api.Test
|
||||||
|
|
||||||
|
class QuickUnionCompressionPathTest {
|
||||||
|
private var unionFind = QuickUnion(10)
|
||||||
|
|
||||||
|
@Before
|
||||||
|
fun init() {
|
||||||
|
unionFind = QuickUnion(10)
|
||||||
|
}
|
||||||
|
|
||||||
|
@Test
|
||||||
|
fun testUnion() {
|
||||||
|
unionFind.connected(1, 2) `should be equal to` false
|
||||||
|
unionFind.union(1, 2)
|
||||||
|
unionFind.connected(1, 2) `should be equal to` true
|
||||||
|
}
|
||||||
|
|
||||||
|
@Test
|
||||||
|
fun testTransitiveUnion() {
|
||||||
|
unionFind.connected(1, 3) `should be equal to` false
|
||||||
|
unionFind.union(1, 2)
|
||||||
|
unionFind.union(2, 3)
|
||||||
|
unionFind.connected(1, 3) `should be equal to` true
|
||||||
|
}
|
||||||
|
}
|
@ -0,0 +1,54 @@
|
|||||||
|
/*
|
||||||
|
* MIT License
|
||||||
|
*
|
||||||
|
* Copyright (c) 2019 norangebit
|
||||||
|
*
|
||||||
|
* Permission is hereby granted, free of charge, to any person obtaining a copy
|
||||||
|
* of this software and associated documentation files (the "Software"), to deal
|
||||||
|
* in the Software without restriction, including without limitation the rights
|
||||||
|
* to use, copy, modify, tryMerge, publish, distribute, sublicense, and/or sell
|
||||||
|
* copies of the Software, and to permit persons to whom the Software is
|
||||||
|
* furnished to do so, subject to the following conditions:
|
||||||
|
*
|
||||||
|
* The above copyright notice and this permission notice shall be included in all
|
||||||
|
* copies or substantial portions of the Software.
|
||||||
|
*
|
||||||
|
* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
||||||
|
* IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
||||||
|
* FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
|
||||||
|
* AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
|
||||||
|
* LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
|
||||||
|
* OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
|
||||||
|
* SOFTWARE.
|
||||||
|
*
|
||||||
|
*/
|
||||||
|
|
||||||
|
package it.norangeb.algorithms.datastructures.unionfind
|
||||||
|
|
||||||
|
import org.amshove.kluent.`should be equal to`
|
||||||
|
import org.junit.Before
|
||||||
|
import org.junit.jupiter.api.Test
|
||||||
|
|
||||||
|
class QuickUnionTest {
|
||||||
|
private var unionFind = QuickUnion(10)
|
||||||
|
|
||||||
|
@Before
|
||||||
|
fun init() {
|
||||||
|
unionFind = QuickUnion(10)
|
||||||
|
}
|
||||||
|
|
||||||
|
@Test
|
||||||
|
fun testUnion() {
|
||||||
|
unionFind.connected(1, 2) `should be equal to` false
|
||||||
|
unionFind.union(1, 2)
|
||||||
|
unionFind.connected(1, 2) `should be equal to` true
|
||||||
|
}
|
||||||
|
|
||||||
|
@Test
|
||||||
|
fun testTransitiveUnion() {
|
||||||
|
unionFind.connected(1, 3) `should be equal to` false
|
||||||
|
unionFind.union(1, 2)
|
||||||
|
unionFind.union(2, 3)
|
||||||
|
unionFind.connected(1, 3) `should be equal to` true
|
||||||
|
}
|
||||||
|
}
|
@ -0,0 +1,54 @@
|
|||||||
|
/*
|
||||||
|
* MIT License
|
||||||
|
*
|
||||||
|
* Copyright (c) 2019 norangebit
|
||||||
|
*
|
||||||
|
* Permission is hereby granted, free of charge, to any person obtaining a copy
|
||||||
|
* of this software and associated documentation files (the "Software"), to deal
|
||||||
|
* in the Software without restriction, including without limitation the rights
|
||||||
|
* to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
|
||||||
|
* copies of the Software, and to permit persons to whom the Software is
|
||||||
|
* furnished to do so, subject to the following conditions:
|
||||||
|
*
|
||||||
|
* The above copyright notice and this permission notice shall be included in all
|
||||||
|
* copies or substantial portions of the Software.
|
||||||
|
*
|
||||||
|
* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
||||||
|
* IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
||||||
|
* FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
|
||||||
|
* AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
|
||||||
|
* LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
|
||||||
|
* OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
|
||||||
|
* SOFTWARE.
|
||||||
|
*
|
||||||
|
*/
|
||||||
|
|
||||||
|
package it.norangeb.algorithms.datastructures.unionfind
|
||||||
|
|
||||||
|
import org.amshove.kluent.`should be equal to`
|
||||||
|
import org.junit.Before
|
||||||
|
import org.junit.jupiter.api.Test
|
||||||
|
|
||||||
|
class QuickUnionWithSizeTest {
|
||||||
|
private var unionFind = QuickUnionWithSize(10)
|
||||||
|
|
||||||
|
@Before
|
||||||
|
fun init() {
|
||||||
|
unionFind = QuickUnionWithSize(10)
|
||||||
|
}
|
||||||
|
|
||||||
|
@Test
|
||||||
|
fun testUnion() {
|
||||||
|
unionFind.connected(1, 2) `should be equal to` false
|
||||||
|
unionFind.union(1, 2)
|
||||||
|
unionFind.connected(1, 2) `should be equal to` true
|
||||||
|
}
|
||||||
|
|
||||||
|
@Test
|
||||||
|
fun testTransitiveUnion() {
|
||||||
|
unionFind.connected(1, 3) `should be equal to` false
|
||||||
|
unionFind.union(1, 2)
|
||||||
|
unionFind.union(2, 3)
|
||||||
|
unionFind.connected(1, 3) `should be equal to` true
|
||||||
|
}
|
||||||
|
}
|
Loading…
Reference in New Issue
Block a user