给定一个无序的n个对象的集合(本例中 n = 5
):
{
apple,
orange,
banana,
cherry,
cabbage
}
我想给用户提供几个问题,每个问题都有三个选项,就像这样:
banana vs. cabbage
(no preference)
每个问题后,它会创建一个带有不同选项的新问题(没有偏好保持不变),有效地收集用户偏好数据。
在几个问题后(在这种情况下为6或7个问题),它将按顺序提供最高排名对象的排序列表(数组):
{
cherry,
cabbage,
orange,
apple,
banana
}
然而,我不知道这样的算法如何工作或何时知道停止。如果这是一个糟糕的问题,我很抱歉,因为我对算法设计非常新手。
我想这并不重要,但我正在使用JavaScript。
好的,四个月后我重新审视了这个问题,因为我想到了一种新的排序方法。
也许,更有效的方法是为每个对象建立一个下属列表,这样任何低于某个对象的东西也将是其上级对象的下属。我表述得很差,以下是一个可视化的例子:
cherry > cabbage
cabbage > banana
cabbage > apple
apple > orange
thus, cherry > cabbage & banana & apple & orange
使用旧方法,得分为:
apple vs. orange
apple vs. banana (e.g. apple wins)
apple vs. cherry (e.g. cherry wins)
apple vs. cabbage
orange vs. banana
orange vs. cherry
orange vs. cabbage
banana vs. cherry
banana vs. cabbage
cherry vs. cabbage
10 questions
由于我们已经知道苹果>香蕉
和樱桃>苹果
,所以新方法会使得樱桃 vs. 香蕉
变得多余。我只需要想出如何编写代码。
唯一的问题是人类循环逻辑(例如a > b > c > a
),这可能是一个问题,但幸运的是,在我的特定情况下不会出现这个问题。
a≤b≤a
这样的东西,则≤
不是一个偏序,因为它没有传递性。仍然可以使用O(n²)的成本为每对a、b
定义a≤b
。 - Oriol