我有一个装满图片的文件夹。有太多不仅仅是'排名'。我做了一个程序,一次显示两个,让用户选择哪一个更好。最后,我希望所有照片都能从最好到最差的顺序排列。
我纯粹是在尝试优化最少量的比较。我不在乎程序是否在n个时间内运行。我已经在这里阅读了其他类似问题,但我正在寻找更高级的东西。
我想也许某种算法基于你已经做过的比较,程序选择两个图像来比较,它将提供最多的信息。甚至可能是一种复杂连接的算法,以帮助确定订单和潜在订单。
就像我说的那样,我不在乎它是否仅仅是为了尽量减少比较而放慢速度
答案 0 :(得分:2)
如果存在总订单,则至少需要n log2(n)比较。它可以很容易地用数学证明。没办法。因此,n log(n)中的常规排序算法将完成这项工作。
您要做的事情称为“拓扑排序”。谷歌,并在wikipedia中阅读。您可以通过较少的比较来实现部分排序。它是一种毕业生。你得到的比较越多,结果就越好。
但是,如果不存在总订单,您会怎么做?人类无法为主观任务生成总订单。 例如,图片1优于2,2优于3但3优于1。 在这种情况下,没有排序算法可以产生匹配所有决策的排列。在拓扑排序期间,您可以检测那些不一致的决策并将其删除。
答案 1 :(得分:1)
您正在寻找排序算法 - pick one。大多数算法只需要一个比较函数(a < b?
)。这是当你向用户展示两张照片时,他必须选择更好的照片。
您可能不想通过一些算法阅读并为您选择最佳算法。例如。在quicksort上,你会选择一张随机图片,用户必须将这张图片与第一轮中的所有其他图片进行比较 - 从最终用户的角度来看可能太无聊了。