我认为这一章的例子不是很恰当
来源:6-2 Quick Find
LeonSun
2018-03-26
由于例子中用的是int型数组表示,且id[i] = i;形参int p,int q,看着看着就不知道p/q指的是数组下标,还是代表数组中的元素,还是代表集合编号。。。。傻傻分不清楚。
个人感觉,这很容易造成confuse,我看着代码理解了半天~
2回答
-
我觉得你的理解基本是正确的,但是为了不产生歧义,我再尝试简单解释一下。
id是一个数组,所以我们可以用id[i]取id数组中索引i对应的值。id[i]的定义是:第i个元素所在的集合编号。在初始化的时候,每一个元素都和其他元素不相连,每一个元素都自成一个集合,所以每一个元素的集合编号是不同的。因此我们初始化成id[i]=i,表示,给第i个元素赋值集合编号为i。
具体第i个元素到底表达什么,可以根据你的应用改变。在这里,我们可以抽象的理解:第i个元素就表示i这个数字。
至于p和q,就是在find和union的过程中使用的一个索引的别称。我有查看了一下我的代码,注释部分可能确实会让人confuse,在这里也重新解释一下:)
对于find函数,是这样定义的:
int find(int p)
它表示:查找第p个元素所对应的集合编号。p由用户指定。
对于你unionElements的定义:
void unionElements(int p, int q)
它表示:合并第p个元素所在的集合和第q个元素所在的集合。p和q由用户指定。
换句话说,这里的p和q表示的是索引。
依然是,具体第p个元素和第q个元素真正是什么,是有应用决定的,有可能是再描述学生,汽车,水果,等等等等。但在这里,可以抽象的理解,第p个元素就代表p这个数字;第q个元素就代表q这个数字。
希望解释清楚了:)
512018-03-27 -
LeonSun
提问者
2018-03-26
视频中,id表示数组名称,然而6-2 2:09处有解释道:每一个被连接在一起的这个组,它们拥有同样的id号。实在不能理解。。。
又看了一遍视频,我认为视频中例子表达的是:
名为id的数组中:数组的索引也用来表示元素,即:i代表索引也代表元素本身; 而数组的值是组(集合)的编号,初始化时,组的编号为元素本身,即id[i]=i;此时,id[i]=i=索引
不知道这样理解对不对
012020-02-16
相似问题