对于函数定义中的p和q参数的疑问,以及对查找和合并的实际应用场景
来源:6-5 基于rank的优化
慕粉3169703
2019-02-24
看了这章前面的所有内容,老师讲的都理解,就是一直对于find和union这两个函数中的两个形参p和q的定义有疑问。并查集的这些集合元素都可以存储在数组中,对于操作用户而言,数组中的元素一般是没有顺序的,我觉得一般的场景是让用户指定这个数组中的某两个元素,进而对这两个元素进行并查集的操作,而不是让用户指定第几个索引下的元素,我想用户可能会更直接操作某两个元素吧。例子中的构造函数初始化就会生成一个从0到N的顺序数组,这样数组中的索引和元素是恰好相等的。第p个元素对应的就是元素p,这样很自然操作的就是数组中对应的元素。但是如果对于一个杂乱的数组,用户就想把里面的某两个元素合并起来,这样不就产生很大的局限吗?
如果按照我想的那样,构造函数初始化的时候,应该传的是一个数组吧
同样为数组中的某个元素的parent设成自己,同时还需要创建一个记录元素索引的数组吧,以后的操作是针对parent[reverse[p]]进行的,这样做会存在问题吗
写回答
1回答
-
我可能没有特别理解你说的“杂乱的”数组是什么意思。对于一个数组,即使里面存储的元素不是数字,但是他们的索引一定是数字,union(p, q)就是合并p索引下的元素和q索引下的元素:)
当然,你的思路没有问题。可以看做是索引堆的思想在并查集上的使用:)
继续加油!:)
052019-02-24
相似问题