在WQU基础上,添加一步路径压缩. 前面的优化都是在union,路径压缩是在find上面做文章. 这里的路径压缩我还没完全搞明白,之后不断再来的,不管是理解还是博文编排素材之类的. 说是加一步压缩是确实只在find里增加了一个步骤,而这里ALGS4官方又有两个版本,由于我现在没有把问题规模化,只是简单的实例化增加几个连接, 还不能很好的理解两者优劣,就都贴上来吧. class WeightedQuickUnion(): __count = int() #number of components…
Weighted Quick Union即: 在Quick Union的基础上对结点加权(weighted),在parent[i]基础上增加一个size[i]. 用来存储该结点(site)的所有子结点数目.(size[i] == number of sites in subtree rooted at i) 具体操作步骤: 仅仅在union() operation改变,在改变parent前,增加一个步骤: 比较两个结点的size,谁更轻谁就在下面, 具体看代码: class WeightedQu…
相同是查找一个图是否有环的算法,可是这个算法非常牛逼,构造树的时候能够达到O(lgn)时间效率.n代表顶点数 原因是依据须要缩减了树的高度,也叫压缩路径(Path compression),名字非常高深,只是事实上不难理解,简单来说就是每次查找一个节点的时候,都把这一路径中的全部节点都赋予根节点作为路径. 原文没指出的地方: 也由于须要压缩,所以初始化的时候注意,不能如前面简单有用Union Find的算法那样初始化全部顶点的父母节点为-1,应该是初始化全部节点的父母节点为本身(自己生殖自己?)…
Quick union improvements1: weighting 为了防止生成高的树,将smaller tree放在larger tree的下面(smaller 和larger是指number of objects),而不是将larger tree放在smaller tree的下面(如上图中的第一种情况) Examples: quick-union & weighted quick-union 从上面的这个例子可以看到用quick-union时的树的高度很大,而用weighted qui…
Quick Union quick union就是快速连接 和quick find相同,也是构建一个数组id[],不过存的值换一种理解: 每个数组内的元素看做一个结点,结点内的值即id[i]看做i的前驱结点. 初始化时将每个元素的前驱结点赋值为其下标,即id[]={0,1,2,3...,N-1}. 认为前驱结点和本身相同的结点为根结点,所以以上初始化就是将每个元素的根节点初始化为自己 对于某个结点,迭代的寻找其前驱结点,最终当某一结点找到的前驱结点和自身相同时,该结点即为以根结点, 某对结点,若…
Quick Find:适用于search频繁的情况 每个节点有一个id值,id相同表示两个节点相连通.在union时要将等于某一个id值都改成另一个id值 Quick Union: 适用于union频繁的情况 每个节点有一个id值,id值表示该节点连接的那个节点的下标: 每个节点有一个root值,root(i) = id[id[id...]],直到id[i]==i.root值相同表示这两个节点连通,所以连接两个节点,就是把这两个节点中某一个节点root值改成另一个节点的root值. union…
Quick union算法 Quick union: Java implementation Quick union 性能分析 在最坏的情况下,quick-union的find root操作cost(访问array的次数)会达到N. 所以quick-union的性能也不好.…
解决问题 给一系列对点0~N-1的连接,判断某两个点p与q是否相连. private int[] id; // 判断p和q是否属于同一个连通分量 public boolean connected(int p, int q) // 连接两个点 public void union(int p, int q) Quick-find connected(p, q):判断p 和 q 的id值是否相同 union(p, q): 将与p 的id 相同的所有点都改为q的id 缺点:union太慢,需要遍历id数…
题目: Given a string containing just the characters '(' and ')', find the length of the longest valid (well-formed) parentheses substring. For "(()", the longest valid parentheses substring is "()", which has length = 2. Another example…
@(132 - ACM | 算法) Algorithm | Coursera - by Robert Sedgewick > Tip: Focus on WHAT is really important! > Don't just copy it! > Don't look at the subtitle > Practice is the key. Just Do it! Backup Coursera - Algorithms booksite P.S. iff == if a…