Module: Ryac::UnionFind
- Included in:
- KeywordRenameMapping, MethodRenameMapping
- Defined in:
- sig/ryac/union_find.rbs,
lib/ryac/union_find.rb
Overview
Union-Find over arbitrary hashable keys; each includer picks its key type (both current includers use method_key).
Instance Method Summary collapse
- #merge_groups(key1, key2) ⇒ void
- #uf_add(key) ⇒ Integer
- #uf_init ⇒ void
- #uf_remove(key) ⇒ void
- #uf_root(key) ⇒ K
Instance Method Details
#merge_groups(key1, key2) ⇒ void
This method returns an undefined value.
15 16 17 18 19 20 21 22 23 24 25 26 27 28 |
# File 'lib/ryac/union_find.rb', line 15 def merge_groups(key1, key2) root1 = uf_root(key1) root2 = uf_root(key2) return if root1 == root2 if @rank[root1] < @rank[root2] @parent[root1] = root2 elsif @rank[root1] > @rank[root2] @parent[root2] = root1 else @parent[root2] = root1 @rank[root1] += 1 end end |
#uf_add(key) ⇒ Integer
32 33 34 35 |
# File 'lib/ryac/union_find.rb', line 32 def uf_add(key) @parent[key] ||= key @rank[key] ||= 0 end |
#uf_init ⇒ void
This method returns an undefined value.
5 6 7 8 |
# File 'lib/ryac/union_find.rb', line 5 def uf_init @parent = {} @rank = {} end |
#uf_remove(key) ⇒ void
This method returns an undefined value.
37 38 39 40 |
# File 'lib/ryac/union_find.rb', line 37 def uf_remove(key) @parent.delete(key) @rank.delete(key) end |
#uf_root(key) ⇒ K
10 11 12 13 |
# File 'lib/ryac/union_find.rb', line 10 def uf_root(key) @parent[key] = uf_root(@parent[key]) if @parent[key] != key @parent[key] end |