算法第四版曾提过,通过路径压缩实现几乎(注意几乎)完全扁平化的树,为何我要说注意几乎,因为书作者数据给的好,我通过实现发现利用
书中数据
自己将结果画图发现和加权quick-union效果一样,然后我检查代码,又上网查找发现代码没错,原来是我理解有误,错误就在几乎这两个字上
注意这图和我上篇博文中的加权quick-union效果一样(上篇博文入口),按照我的错误理解效果应该是除了6–6其他都在一排的,应为他们是一个连通分量,应该让他们都指向根节点,这样当然可以,通过一个for循环就可以,不过这样一下又回到解放前(甚至还倒退在quick-find算法的基础倒退),那路径·压缩是干嘛的呢??的确是用来将一颗子树节点练到根节点上,不过这种是具有概率性的,因为连通性的点只能指向他的前一个点,则当这个点是中间的点就尴尬了,你从find(p)给定的点只能向上遍历,将前驱连到根节点,可是p的子节点就无缘了,如果后面操作没有针对p的子节点,那恐怕只有认命了
下面给出 路径压缩 + 加权quick-union算法实