Algorithm 排序网络中的比较器列表
我的作业文档中有一个问题,我很难想象和理解这个问题。问题如下: 我们可以用c比较器将n输入比较网络表示为 范围从1到n的c对整数列表。如果两对 包含一个公共整数,对应的 网络中的比较器由网络中对的顺序决定 名单。给出这个表示,描述一个O(n+c)-时间 (串行)确定比较网络深度的算法 在比较网络的上下文中,有一对整数意味着什么?通常,我们使用下面的符号表示比较网络,其中每条水平线表示一个数字Algorithm 排序网络中的比较器列表,algorithm,list,comparator,sorting-network,Algorithm,List,Comparator,Sorting Network,我的作业文档中有一个问题,我很难想象和理解这个问题。问题如下: 我们可以用c比较器将n输入比较网络表示为 范围从1到n的c对整数列表。如果两对 包含一个公共整数,对应的 网络中的比较器由网络中对的顺序决定 名单。给出这个表示,描述一个O(n+c)-时间 (串行)确定比较网络深度的算法 在比较网络的上下文中,有一对整数意味着什么?通常,我们使用下面的符号表示比较网络,其中每条水平线表示一个数字 这意味着,如果你有一对(1,2),那就是其中一条垂直线,即连接水平线1和2的线 因此,这张图片的左上部分
这意味着,如果你有一对(1,2),那就是其中一条垂直线,即连接水平线1和2的线 因此,这张图片的左上部分将表示为(1,2)(3,4)(1,3)(2,4)
这部分的深度是2。(2,3)意味着第2行和第3行之间有一个比较器。非常感谢。但还有一件事;我怎么知道(1,2)和(3,4)是平行的?它们也可以在整个网络的其他地方串行,对吗?另外,部分“如果两个对包含一个共同的整数,则网络中相应比较器的顺序由列表中对的顺序决定。”意味着如果答案中有(1,2)和(1,3),它们的顺序应该与图片中的顺序相同。我说的对吗?@MertToka是的。所发生的事情是,这些约束导致了偏序,因此(1,2)和(3,4)可能是有序的,例如,如果你把一个(1,3)放在它们之间,它将与这两个约束一起排序。在这里的例子中,(1,2)和(3,4)是无序的,因为1)它们没有共同点,2)它们之间没有任何东西可以隐式地对它们进行排序。难道你没有一个拥有10k代表的帐户吗?“这个额外的是怎么回事?”哈罗德回答
for i = 1, n
depth[i] = 0
total_depth = 0
for j = 1, c
i1 = comparators[j].entry1
i2 = comparators[j].entry2
new_depth = 1 + max(depth[i1], depth[i2])
depth[i1] = new_depth
depth[i2] = new_depth
total_depth = max(total_depth, new_depth)
print(total_depth)