经典算法代码实现-union find算法3- weighted quick union方法



经典算法代码实现-union find算法3- weighted quick union方法

介绍了union find要解决的问题,基本的quick find和quick union方法,
其中,quick union方法在实际中已经比较快了, 当然在有些情况下,树可能会很高,所以,极端情况下每次树的高度都会加1。
这里,记录一个改进的方法。

weighted quick union方法

在quick union中,由于find和union的主要复杂度就来自于root操作,而root操作由树的高度决定。
既然quick union的问题在于树可能会一直长高,那么其实可以考虑是否能够避免树一直长高,
比如原来有两个节点连在一起, 高度是2, 这时候和另外一个节点union的时候,取决于union的顺序,树的高度可能是3(就是把2的树的根节点挂到1的根节点上),也可能仍然是2(就是把1的根节点挂到2上)。
那么,如果我们每次操作的时候都把1的根节点挂到2的根节点上,那么就可以减少树长高的概率。
同理推广到其他例子,每次union 的时候,看看那个节点高度比较小,把小的挂到大的节点上,树的高度就会长的比较慢。
但要记录树的高度会略麻烦,union的过程中不容易计算,实际上,只要用这个connected component里面的节点个数来作为判断依据,效果是一样的。

所以, 整体改动只有两个:
1. 记录每个root的节点个数
2. 每次union的时候, 从个数比较小的union到个数比较大的。


Read full article from 经典算法代码实现-union find算法3- weighted quick union方法


No comments:

Post a Comment

Labels

Algorithm (219) Lucene (130) LeetCode (97) Database (36) Data Structure (33) text mining (28) Solr (27) java (27) Mathematical Algorithm (26) Difficult Algorithm (25) Logic Thinking (23) Puzzles (23) Bit Algorithms (22) Math (21) List (20) Dynamic Programming (19) Linux (19) Tree (18) Machine Learning (15) EPI (11) Queue (11) Smart Algorithm (11) Operating System (9) Java Basic (8) Recursive Algorithm (8) Stack (8) Eclipse (7) Scala (7) Tika (7) J2EE (6) Monitoring (6) Trie (6) Concurrency (5) Geometry Algorithm (5) Greedy Algorithm (5) Mahout (5) MySQL (5) xpost (5) C (4) Interview (4) Vi (4) regular expression (4) to-do (4) C++ (3) Chrome (3) Divide and Conquer (3) Graph Algorithm (3) Permutation (3) Powershell (3) Random (3) Segment Tree (3) UIMA (3) Union-Find (3) Video (3) Virtualization (3) Windows (3) XML (3) Advanced Data Structure (2) Android (2) Bash (2) Classic Algorithm (2) Debugging (2) Design Pattern (2) Google (2) Hadoop (2) Java Collections (2) Markov Chains (2) Probabilities (2) Shell (2) Site (2) Web Development (2) Workplace (2) angularjs (2) .Net (1) Amazon Interview (1) Android Studio (1) Array (1) Boilerpipe (1) Book Notes (1) ChromeOS (1) Chromebook (1) Codility (1) Desgin (1) Design (1) Divide and Conqure (1) GAE (1) Google Interview (1) Great Stuff (1) Hash (1) High Tech Companies (1) Improving (1) LifeTips (1) Maven (1) Network (1) Performance (1) Programming (1) Resources (1) Sampling (1) Sed (1) Smart Thinking (1) Sort (1) Spark (1) Stanford NLP (1) System Design (1) Trove (1) VIP (1) tools (1)

Popular Posts