基于稳健比较的排序算法/仅限顶端[关闭]

问题描述 投票:1回答:2

有没有人遇到过近似排序算法,需要尽可能少的比较?我只需要将顶部部分真正排序。该算法还可以包含启发式元素。

具体应用是:我必须具有用户等级不同方面的主观重要性。但我明确地希望他们一次只选择两个方面中更重要的方面。我也不想一遍又一遍地显示相同的术语(例如,quicksort会通过一次又一次地与pivot元素进行比较来做到这一点)。最后,我将仅从~200的列表中使用这些方面的有序前10或前20(编辑:按顺序)。

我正在考虑mergesort扔掉所有已经保证不在顶部的东西。但是,我不确定这是否完全有效。你可以扔掉那么多的比较......

有没有人有另一个更有希望的想法?

“奖金”问题:由于比较是主观的,它可能不是必然传递的。有没有办法衡量用户输入的一致性? (我猜也许不会,至少只要订购不是完整的)。

提前抱歉有点朦胧的问题。

algorithm sorting language-agnostic bubble-sort approximation
2个回答
0
投票

在处理人类思想时,数学(以及统计学)是非常不精确的。

例如,假设您要求排序三种颜色与给定的第四种颜色相结合;你可能得到'A-B-C'。现在用其他三种颜色重复这个问题(保留第四种颜色);你得到'D-E-F'。现在把六种颜色放在同一个问题上;你可能得到'A-B-D'。你继续游戏的时间和时间。 最后,你重复第一个问题......用户现在选择'A-C-B'为什么?因为他累了而且没有注意,或者他重新考虑了他的意见,或者他只是想完成这个愚蠢的调查问卷......谁知道呢。

如果您需要在200中选择10个最受欢迎的主观选择,则无法要求用户进行数百次二进制比较并期望得到“精确”结果。无论你使用什么快速排序算法。需要进行大量比较。

我会走另一条路。向他展示大块的选择(例如,20)并要求他按顺序选择4.对于200个项目,用户“玩”10次。也许太多了,但让我们继续吧。 在最后一遍中向他展示了他的20个最佳选择并要求他对它们进行排序,或者至少选择并订购前10名。


0
投票

nth_element为您提供最佳答案,使用中位数中位数在O(N)中。给予相当高的K值。

使用排序网络可为最重要的元素提供确定数量的比较。对于20选项,您可能需要使用nth_element再次拆分它以获得合理的答案。

top = 10
topElem = nth_element(top)  O(N)
Sort(start, topElem) 
© www.soinside.com 2019 - 2024. All rights reserved.