鲁棒的基于比较的排序算法/仅顶端

时间:2018-08-30 12:24:18

标签: algorithm sorting language-agnostic bubble-sort approximation

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

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

我正在考虑mergesort丢弃所有已经保证不在顶部的内容。但是,我不确定这是否完全有效。您只能放弃这么多的比较...

有人有另一个更有前途的想法吗?

“奖金”问题:由于比较主义是主观的,它不一定是可及的。有什么方法可以衡量用户输入的一致性? (我想可能不会,至少只要订购不超过完整订单即可。)

对于这个朦胧的问题,我们深表歉意。

2 个答案:

答案 0 :(得分:0)

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

例如,假设您要询问将三种颜色与给定的第四种颜色组合在一起的问题;您可能会得到“ A-B-C”。现在,用其他三种颜色重复该问题(保留第四种);您会得到“ D-E-F”。现在将这六个颜色放在同一个问题中。您可能会得到“ A-B-D”。您继续游戏时间和时间。
最后,您重复第一个问题...用户现在选择“ A-C-B”为什么?因为他累了,不专心,或者他重新考虑了自己的观点,或者只想完成这份愚蠢的问卷……谁知道呢。

如果您需要在200个中选择10个最喜欢的主观选择,则不能要求用户进行数百次二进制比较并期望得到“准确的”结果。无论您使用哪种快速排序算法。需要进行很多比较。

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

答案 1 :(得分:0)

nth_element使用中位数的中位数在O(N)中给出最佳答案。给出一个相当高的K值。

使用排序网络可为您确定最主要元素的比较数。您可能需要使用nth_element再次将其拆分为20选项,以获得合理的答案。

data-target="menu_modal"