【问题标题】:Reducing a Sorting Network减少排序网络
【发布时间】:2017-06-30 19:25:12
【问题描述】:

排序网络是 2 个输入比较器的排列,可以对包含 n 个元素的输入序列进行排序。 例如,这是一个 9 元素输入的排序网络:

每条垂直线是一个2输入比较器,输入序列在左边进入,排序后的序列出现在右边。

我的问题是:如何证明如果我们删除任何有效的 n 输入排序网络的顶线或底线,我们最终将得到一个有效的 (n-1) 输入排序网络?删除任何中间线怎么样?

我觉得这可以使用排序网络的图形表示来显示,但我找不到合适的表示。

【问题讨论】:

  • 有一个简单的推理方法:想象最后一行的元素总是比其他元素大。在这种情况下,与它的比较永远不会移动任何元素,但仍会对输入的其余部分进行排序。由于与最后一行的比较不会改变任何内容,这意味着删除它们确实可以对 n - 1 个元素进行排序。

标签: algorithm sorting graph-algorithm sorting-network


【解决方案1】:

顶线或底线确实可以删除。证明这一点的一种方法是使用 Knuth 的 0-1 原理,该原理指出,当且仅当每个 0 和 1 的序列都正确排序时,排序网络才是正确的。让S 成为一个排序网络,让S' 成为S,去掉顶行。让x 成为S' 的0-1 输入。将0x 传递给S。通过归纳,我们可以证明k 阶段之后的值是一致的(除了删除的顶线),因为涉及顶线的所有门都是无操作的。由此可见S' 是一个正确的排序网络。

一般来说,我们不能删除中间线。例如,考虑网络

1 *   *
  |   |
2 * * *
    |
3   *

【讨论】:

  • 你能解释一下这句话吗:“通过归纳,我们可以证明 k 个阶段之后的值是一致的”?如果您在第一行传递零输入,您可以假设该值将保留在该行上,并成为第一个输出,因此可以安全地删除它。但是,我看不出这种推理如何适用于在顶线上传递 1,如何证明在 k 个阶段之后,来自 1x 和 x 的值会一致?
  • @MichaelSB 我们证明S' 排序正确,因此通用量词覆盖所有输入xS'。我们假设S 排序正确,因此我们可以选择S (0x) 的参考输入。
猜你喜欢
  • 2019-06-15
  • 2015-12-06
  • 2021-01-10
  • 1970-01-01
  • 2017-11-27
  • 2015-08-04
  • 1970-01-01
  • 1970-01-01
  • 2019-11-18
相关资源
最近更新 更多