首页
学习
活动
专区
圈层
工具
发布
  • 您找到你想要的搜索结果了吗?
    是的
    没有找到

    动态联通性问题----union-find算法

    (int p,int q)     p和q同在一个分量中则为true          int count()                             连通分量的数量 } 初始状态...1、quick-find算法 quick-find算法保证在同一连通分量中所有触点id[]中的值必须相同,这样connected()方法只需判断id[p]==id[q]即可。...) id[i] = qID; count--; } 算法分析: 在quick-find算法中,每次find()调用访问一次数组,归并两个分量的union()操作访问数组次数在(N+3)到(2N+1)之间...2、quick-union算法 quick-union算法中每个触点所对应的id[]元素都是另一个触点的名称(也可能是自己,如果是自己的画说明是根触点),触点之间循环这种关系直到到达根触点。...算法改进(加权quick-union算法): 保证小的树链接在大树上,即给每一个分量添加权重。 在类中新建一个数组保存各根节点的权重,注意该数组只有只有根结点对象的下标中的数据有效。

    75700

    基础算法篇——快速排序

    快速排序介绍 暴力求解算法 快速排序算法 快速排序代码 快速排序问题 快速查找算法 快速排序介绍 我们首先来简单介绍快速排序问题: 首先我们需要确定一个分界点 这个分界点我们可以任意选择 我们常用的分界点有q[...l],q[(l+r)/2],q[r]这三个点位 关于q[l]和q[r]如果选择递归的参数不合适,可能会导致死循环,我们后面会讲解,所以最好选择q[(l+r)/2] 调整区间数大小 我们希望我们选择的分界点的数作为分界数...(ints,l,j); quick_sort(ints,j+1,r); } } 快速排序问题 我们前面说到我们选择分界点的时候尽量选择(r+l)/2,因为单l或单r可能会导致死循环...下面我们给出示例: import java.util.Scanner; public class quick_sort { public static void main(String[]...i指针停在0处,我们的j指针也停在0处 这时我们进行第二轮递归处理 quick_sort(ints,0,-1)左侧递归直接结束 quick_sort(ints,0,1)右侧递归和第一轮完全相同,所以我们会一直循环下去

    30730
    领券