【问题标题】:List of Comparators in Sorting Networks排序网络中的比较器列表
【发布时间】:2014-07-11 11:00:31
【问题描述】:

我的作业文档中有一个问题,我很难想象和理解这个问题。问题如下:

我们可以用 c 个比较器表示一个 n 输入比较网络作为 从 1 到 n 范围内的 c 对整数的列表。如果两对 包含一个共同的整数,对应的顺序 网络中的比较器由对中的顺序决定 名单。给定这个表示,描述一个 O(n + c) 时间 (串行)算法,用于确定比较网络的深度。

在比较网络的上下文中,整数对意味着什么?通常我们使用下面的符号来表示一个比较网络,其中每条水平线代表一个数字。

【问题讨论】:

  • (2,3) 表示第 2 行和第 3 行之间有一个比较器。

标签: algorithm list comparator sorting-network


【解决方案1】:

这意味着如果你有一对 (1, 2),那就是那些垂直线之一,即连接水平线 1 和 2 的那条。

所以这张图片的左上部分将表示为 (1, 2) (3, 4) (1, 3) (2, 4)。

仅该部分的深度为 2。

【讨论】:

  • 非常感谢。但还有一件事;我怎么知道 (1,2) 和 (3,4) 仅通过查看数字是平行的?它们也可能在整个网络的其他地方连续出现,对吧?
  • 另外,“如果两个对包含一个共同的整数,则网络中相应比较器的顺序由列表中对的顺序决定。”表示如果您的答案中有 (1,2) 和 (1,3),它们的顺序应该与图片中的相同。我说的对吗?
  • @MertToka 是的。发生的事情是这些约束会导致偏序,因此 (1, 2) 和 (3, 4) 可能 是有序的,例如,如果您放置 (1, 3) in between 这将与他们一起订购。在此处的示例中,(1, 2) 和 (3, 4) 是无序的,因为 1) 它们没有共同点,并且 2) 两者之间没有任何隐含的顺序。
【解决方案2】:
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)

【讨论】:

  • 您没有 10k 代表的帐户吗?这个多出来的怎么回事?
  • @harold - 已回复 here
猜你喜欢
  • 1970-01-01
  • 2017-02-15
  • 2012-07-25
  • 1970-01-01
  • 2015-07-19
  • 2018-09-10
  • 2023-03-22
  • 2012-08-22
  • 2013-08-21
相关资源
最近更新 更多