aboutsummaryrefslogtreecommitdiffstats
path: root/python/dataStructures.py
diff options
context:
space:
mode:
authorMatt Strapp <strap012@umn.edu>2021-04-26 10:53:43 -0500
committerMatt Strapp <strap012@umn.edu>2021-04-26 15:03:12 -0500
commitd311af01feb32550aaae8638d4cc167948f5464c (patch)
tree3c0b8606a7a5267e3e890a63b8565c5c27f10438 /python/dataStructures.py
parentactually add files (diff)
downloadcsci4511w-d311af01feb32550aaae8638d4cc167948f5464c.tar
csci4511w-d311af01feb32550aaae8638d4cc167948f5464c.tar.gz
csci4511w-d311af01feb32550aaae8638d4cc167948f5464c.tar.bz2
csci4511w-d311af01feb32550aaae8638d4cc167948f5464c.tar.lz
csci4511w-d311af01feb32550aaae8638d4cc167948f5464c.tar.xz
csci4511w-d311af01feb32550aaae8638d4cc167948f5464c.tar.zst
csci4511w-d311af01feb32550aaae8638d4cc167948f5464c.zip
Rebase newer branch
Diffstat (limited to 'python/dataStructures.py')
-rw-r--r--python/dataStructures.py32
1 files changed, 32 insertions, 0 deletions
diff --git a/python/dataStructures.py b/python/dataStructures.py
new file mode 100644
index 0000000..1e972fc
--- /dev/null
+++ b/python/dataStructures.py
@@ -0,0 +1,32 @@
+class DisjointSet:
+ def __init__(self, nbElements):
+ self.parent = []
+ self.rank = []
+ for i in range(0, nbElements):
+ self.parent[i] = i
+ self.rank[i] = 0
+
+ def find(self, x):
+ if self.parent[x] != x:
+ self.parent[x] = self.find(self.parent[x])
+ return self.parent[x]
+
+ def union(self, x, y):
+ xRoot = self.find(x)
+ yRoot = self.find(y)
+
+ # x and y already belong to the same set
+ if xRoot == yRoot:
+ return
+
+ # merge the set of x and y
+ if self.rank[xRoot] < self.rank[yRoot]:
+ self.parent[xRoot] = yRoot
+ elif self.rank[xRoot] > self.rank[yRoot]:
+ self.parent[yRoot] = xRoot
+ else:
+ self.parent[xRoot] = yRoot
+ self.rank[yRoot] += 1
+
+ def inSameSet(self, x, y):
+ return self.find(x) == self.find(y) \ No newline at end of file