【问题标题】:Sort elements with the fewest comparisons possible以尽可能少的比较对元素进行排序
【发布时间】:2015-11-03 23:30:15
【问题描述】:

我有一个充满图像的文件夹。有太多的只是“排名”。我制作了一个程序,一次显示两个,让用户选择两者中的哪一个更好。最后,我希望所有照片都按照从好到坏的顺序排列。

我纯粹是想优化尽可能少的比较。我不在乎程序是否在 n 立方时间内运行。我在这里阅读了其他类似问题的问题,但我正在寻找更高级的东西。

我在想可能是某种算法,它基于您已经进行的比较,程序会选择两个图像进行比较,这将提供最多的信息。甚至可能是一种建立复杂连接以帮助确定订单和潜在订单的算法。

就像我说的那样,我不在乎它是否很慢,只是纯粹试图减少比较

【问题讨论】:

  • 是什么让你认为“你更喜欢哪个”是全序关系?特别是,人类的口味偏好往往不遵循传递性规则,即 a a
  • 人类的品味也相当善变。一个人可以说 a b。
  • 看 DanielHsH 的回答,它看起来像“我的问​​题的名称是什么”-类型的问题。

标签: algorithm sorting optimization comparison


【解决方案1】:

如果存在全序,则至少需要 nlog2(n) 次比较。它可以很容易地在数学上证明。没办法。因此,nlog(n) 中的常规排序算法将完成这项工作。

您正在尝试做的事情称为“拓扑排序”。谷歌它并在wikipedia中阅读它。您可以在较少的比较中实现部分排序。它是一种研究生类型。您获得的比较越多,结果就会越好。

但是,如果不存在总订单,您会怎么做?人类无法为主观任务生成总顺序。 例如图片 1 比 2 好,2 比 3 好,但 3 比 1 好。 在这种情况下,没有排序算法可以产生匹配所有决策的排列。在拓扑排序过程中,您可以检测到那些不一致的决策并摆脱它们。

【讨论】:

  • 感谢您的回答,我会检查一下。但我不同意你总是需要 nlog2(n) 比较。如果该算法旨在选择最佳比较,那么您可以实现的目标会少很多。示例:4 个元素:0、1、2、3。用户说 1 > 0 并且 3 > 2。如果算法进行复杂计算,您会发现 2 和 1 将是接下来比较的好对。如果用户说 2 > 1,那么我们在 3 次比较中对 4 个元素进行了排序。
  • @ThatOneGuyInXNA:首先,如果1>0和3>2,那么你要比较1和3。而当你确定3>1时,你仍然要比较1和2来确定这是下一个,然后你必须比较最后两个。您无法在 3 次比较中获得 4 件商品的完整排序。
  • @Jim Mischel 假设传递性是真的(在我的情况下是这样)。那么如果 3>2 和 1>0,那么如果用户说 2>1,那么你可以假设 3>2>1>0。检查 3>1 将是多余的,因为 3>2>1。这就是为什么当只知道 3>2 和 1>0 时,选择 2 和 1 进行比较会比任何其他比较包含更多的信息。
  • 我同意在非常特殊的情况下可能需要较少的比较。例如,如果数组中的所有 N 个元素都相等,则最多需要 N-1 次比较。但在一般情况下(当您假设数组的所有可能排列都是有效的)它是不正确的。假设数组中的所有元素都是唯一的,你有 N!可能的排列。每次比较最多减少 2 个带有新信息(更大/更小)的答案,因此每次比较最多减少 2 个排列量。所需的比较量为 ~log(N!)。
  • 此外:请注意,即使您设法在特定情况下减少一些比较,结果也会不太稳定。人类主体的一个任意决定可能会极大地改变结果。想象一个特定的案例:图像 A 和 B 似乎同样讨人喜欢,所以人们倾向于选择几乎随机的一个。您希望稳定的排序不会受到这些不重要的决定的影响。但是,在您的示例中,这将极大地影响结果。
【解决方案2】:

您正在寻找一种排序算法 - pick one。大多数算法只需要一个比较函数(a < b?)。这是当您向用户展示两张图片时,他必须选择更好的一张。

您可能不想通过某些算法阅读并选择最适合您的算法。例如。在快速排序中,您会选择一张随机图片,并且用户必须在第一轮中将这张图片与 所有 其他图片进行比较 - 从最终用户的角度来看可能太无聊了。

【讨论】:

  • 不,他不是在寻找传统的排序算法。您对快速排序的描述更符合选择排序的工作原理。
  • 当我们谈论相同的快速排序时,用户需要在第一轮将一张图片与所有其他图片进行比较。但理所当然:DanielHsH 的回答为这个问题指明了一个更合理的方向 - 今天学到了一些新东西。
猜你喜欢
  • 2012-01-27
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2020-09-09
  • 2017-11-19
  • 2014-05-30
  • 1970-01-01
相关资源
最近更新 更多