Пользователь представил рейтинг - PullRequest
0 голосов
/ 29 декабря 2010

Я хотел, чтобы участники представили свои топ-10 списков чего-либо или их топ-10 ранжировок, а затем какой-то алгоритм объединил результаты.Есть ли что-то подобное?

Спасибо!

Ответы [ 3 ]

1 голос
/ 29 декабря 2010

Аааа, это открыто, хорошо. Давайте рассмотрим простой случай, когда голосуют только два человека:

1  ALPHA
2  BRAVO
3  CHARLIE

1  ALPHA
2  DELTA
3  BRAVO

Мы не можем идти чисто по счету ... Очевидно, что АЛЬФА должна победить, хотя она имеет те же голоса, что и БРАВО. Тем не менее, мы должны избегать случая, когда всего несколько голосов за первое место доминируют над огромным количеством голосов за 10-е место. Для этого я предлагаю следующее:

$score = log($num_of_answers - $rank + 2)

Первое место тогда стоило бы чуть больше одного очка, а десятое место получило бы .3 очка. Такое логарифмическое масштабирование предотвращает нелепое доминирование, но все же придает вес рейтингу. Из этих примеров голосов (и предполагая, что они были верхними 3 из списка 10), вы получите:

ALPHA: 2.08
BRAVO: 1.95
DELTA: .1
CHARLIE: .95

Почему? Ну, это субъективно. Из очень длинного списка я чувствую, что 4000 голосов за 10-е место стоят больше, чем 1000 голосов за 1-е место. Вы можете изменить его по-разному, изменив базу вашего журнала (натуральный, 2 и т. Д.), Или выбрать другую систему.

0 голосов
/ 29 декабря 2010

Я думаю, что вы могли бы решить эту проблему, используя алгоритм максимального потока , чтобы создать совокупный рейтинг , предполагая следующее:

  1. Каждый уникальный элемент из списка элементов является узлом на графике. Например. если есть 10 вещей для голосования, есть 10 узлов.
  2. Край переходит от узла * a * к узлу * b *, если * a * находится непосредственно перед * b * в рейтинге _single user submit_.
  3. В последнем узле, созданном из рейтинга _single user submit_, ребро будет направлено на * раковину *
  4. Первый узел, созданный на основе рейтинга отправленного пользователем _single, будет иметь входящее преимущество от * source *

Это даст вам агрегированный список топ-10.

0 голосов
/ 29 декабря 2010

Вы можете просто сложить итоги для каждого элемента рейтинга, данного пользователем, и затем отсортировать их.

т.е.:

A = (a,b,c)
B = (a,c,b)
C = (b,a,c)
D = (c,b,a)
E = (a,c,b)
F = (c,a,b)

a = 1 + 1 + 2 + 3 + 1 + 2 = 10
b = 2 + 3 + 1 + 2 + 3 + 3 = 14
c = 3 + 2 + 3 + 1 + 2 + 1 = 12

Таким образом,

  1. a
  2. c
  3. b
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...