Аааа, это открыто, хорошо. Давайте рассмотрим простой случай, когда голосуют только два человека:
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 и т. Д.), Или выбрать другую систему.