我认为这一章的例子不是很恰当

来源:6-2 Quick Find

LeonSun

2018-03-26

由于例子中用的是int型数组表示,且id[i] = i;形参int p,int q,看着看着就不知道p/q指的是数组下标,还是代表数组中的元素,还是代表集合编号。。。。傻傻分不清楚。

个人感觉,这很容易造成confuse,我看着代码理解了半天~

写回答

2回答

liuyubobobo

2018-03-27

我觉得你的理解基本是正确的,但是为了不产生歧义,我再尝试简单解释一下。


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这个数字。


希望解释清楚了:)

5
1
LeonSun
非常谢谢,结合你的回答,在纸上画了画,可以清晰的抽象出来了。多谢哟 : )
2018-03-27
共1条回复

LeonSun

提问者

2018-03-26

视频中,id表示数组名称,然而6-2 2:09处有解释道:每一个被连接在一起的这个组,它们拥有同样的id号。实在不能理解。。。

又看了一遍视频,我认为视频中例子表达的是:

名为id的数组中:数组的索引也用来表示元素,即:i代表索引也代表元素本身; 而数组的值是组(集合)的编号,初始化时,组的编号为元素本身,即id[i]=i;此时,id[i]=i=索引

不知道这样理解对不对

0
1
weixin_慕娘6507204
索引是实际元素,而索引对应的内容则是集合,这么说吧,数组唯一能变的就是数据组中的元素,而我们要变化集合,只能改变元素,所以元素 == 集合,索引是具体的值
2020-02-16
共1条回复

算法与数据结构(C++版) 面试/评级的算法复习技能包

课程专为:短时间内应对面试、升职测评等艰巨任务打造

11187 学习 · 1614 问题

查看课程