Week1-4Qucik-Union Improvments

Improvement 1: weighting

weighted quick union

  • modify quick-union to avoid tall trees
  • keep track of size of each tree(number of each objects)
  • balance by linking root of smaller tree to the root of larger tree(larger tree on top, small tree goes below)
    这里写图片描述

No item is too far from the root of its component!!!

Implementation

Data Structure

same as quick-union, but maintain extra array sz[i] to count number of objects in the tree rooted at i.

Find( p, q )

Identical to quick-union

    return root( p ) == root( q );
Union( p, q )
  • link root of smaller trees to larger trees
  • update sz[] array
    int i = root( p ),
        j = root( q );

    if( i == j )
    {
        return;
    }

    if( sz[i] < sz[j] )
    {
        id[i] = j;
        sz[j] += sz[i];
    }
    else
    {
        id[j] = i;
        sz[i] += sz[j];
    }

Analysis

Running Time
  • Find: proportional to the depth of p and q
  • Union: constant time given roots
Proposition

Depths of any node x is at most lgN(base 2)

AlgorithmInitializeUnionConnected
quick-find O(N) O(N) O(1)
quick-union O(N) O(N) O(N)
weighted QU O(N) O(logN) O(logN)

Improvement 2: Path Compression

Just after computing the root of p, set the each examined node to point to that root.

Implementation

  • Two-pass implementation: second loop to set the id[] of each examined to the root
  • One-pass variant: make every node in path points to its grandparent(halving path length)
    private int root( int i )
    {
        while( i != id[i] )
        {
            id[i] = id[id[i]];
            i = id[i];
        }
        return i;
    }

Keep the tree almost flat!!

Analysis(weighted QU with path compression)

Proposition

Starting from and empty data structure, any sequence of m union-find ops on N objects makes c(N+MlogN) array access.(near linear)
这里写图片描述

Cost Comparison

这里写图片描述
There is no linear algorithm for Union-Find ops, but WQUPC is linear in most cases.

1、资源项目源码均已通过严格测试验证,保证能够正常运行; 2、项目问题、技术讨论,可以给博主私信或留言,博主看到后会第一时间与您进行沟通; 3、本项目比较适合计算机领域相关的毕业设计课题、课程作业等使用,尤其对于人工智能、计算机科学与技术等相关专业,更为适合;、下 4载使用后,可先查看README.md或论文文件(如有),本项目仅用作交流学习参考,请切勿用于商业用途。 5、资源来自互联网采集,如有侵权,私聊博主删除。 6、可私信博主看论文后选择购买源代码。 1、资源项目源码均已通过严格测试验证,保证能够正常运行; 2、项目问题、技术讨论,可以给博主私信或留言,博主看到后会第一时间与您进行沟通; 3、本项目比较适合计算机领域相关的毕业设计课题、课程作业等使用,尤其对于人工智能、计算机科学与技术等相关专业,更为适合;、下载 4使用后,可先查看README.md或论文文件(如有),本项目仅用作交流学习参考,请切勿用于商业用途。 5、资源来自互联网采集,如有侵权,私聊博主删除。 6、可私信博主看论文后选择购买源代码。 1、资源项目源码均已通过严格测试验证,保证能够正常运行; 2、项目问题、技术讨论,可以给博主私信或留言,博主看到后会第一时间与您进行沟通; 3、本项目比较适合计算机领域相关的毕业设计课题、课程作业等使用,尤其对于人工智能、计算机科学与技术等相关专业,更为适合;、下载 4使用后,可先查看README.md或论文文件(如有),本项目仅用作交流学习参考,请切勿用于商业用途。 5、资源来自互联网采集,如有侵权,私聊博主删除。 6、可私信博主看论文后选择购买源代码。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值