2010-01-22 15 views
6

Próbuję wymyślić sposób, aby obliczyć pozycję. Teraz po prostu bierze stosunek zwycięstw/strat każdego pojedynczego wpisu, np. jeden wygrywa 99 razy na 100, ma 99% zwycięskiej rangi. ALE jeśli pozycja wygra 1 z 1 ogólnej liczby głosów, będzie miała 100% wygrywającą rangę, ale zdecydowanie nie może być wyższa od wygranej 99 razy. Jaki byłby lepszy sposób na zrobienie tego?Algorytm głosowania: jak obliczyć rangę?

+0

PS Jedyne o czym mogę myśleć to poprawienie pozycji na podstawie "dojrzałości" wpisu (ile razy suma ta była w konkursie). Z drugiej strony to podejście zakazywałoby wszystkim nowym hasłom zdobywania najwyższych rang tylko dlatego, że są nowe, ponieważ nie dostają najwyższych głosów (dopóki nie "dojrzewają" i ranga nie jest już skorygowana) –

Odpowiedz

5

zależności od tego, jak skomplikowany chcesz to zrobić, zastosowania systemu Elo szachy (lub coś podobnego) może być to, co chcesz: http://en.wikipedia.org/wiki/Elo_rating_system

Nawet jeśli dana osoba zdobyła 1/1 mecze, jego ocena byłaby daleko poniżej kogoś, kto wygrał/przegrał setki meczów przeciwko trudnym przeciwnikom, na przykład.

+0

Dzięki, doskonały zasób. –

0

jeśli dobrze rozumiem pytanie, wtedy ktokolwiek zdobędzie więcej głosów, ma wyższą rangę.

+0

Nie, zobacz mój komentarz do dball917 powyżej –

+0

możesz również użyć czegoś takiego, aby uzyskać wynik%: score = (wygrana/(wygrana + przegrana)) * 100 – infinitloop

1

Zawsze można użyć systemu punktowego, a nie wskaźnika wygranych/strat. Wygrywanie zawsze dawało punkty, a następnie można było rozegrać z usunięciem punktów za przegraną, nie przyznając punktów za przegraną lub przyznając mniej punktów za przegraną. Wszystko zależy od tego, w jaki sposób chcesz, aby ludzie byli w rankingu. Na przykład możesz dać 2 punkty za wygraną i 1 punkt za przegraną, jeśli chcesz faworyzować osoby, które biorą udział w grze nad tymi, którzy tego nie robią (co brzmi trochę tak, jak mówisz w swoim przykładzie osoby grającej 100 gier vs 1 gra). NHL używa podobnej techniki do rankingów (2 punkty za wygraną, 1 punkt za przegraną, 0 punktów za normalną stratę). To może dać ci trochę więcej elastyczności.

+1

W ten sposób nowe lepsze wpisy NIGDY nie będą w stanie dogonić starszych, jeśli użyjemy punktów. Zawsze będą mieć opóźnienie, nawet jeśli ich współczynnik wygranych/strat będzie wyższy. –

+0

Tak, jak powiedziałem, zależy to od tego, co chcesz zrobić. Post wydawał się wskazywać, że chciał faworyzować ludzi z większą ilością gier. – dball917

0

Czy sensownym rozwiązaniem byłoby dodanie większej pozycji do zwycięskiego wpisu, jeśli utrata pozycji początkowo miała znacznie wyższą rangę, np. o wiele silniejszy konkurent?

6

spróbować czegoś takiego:

votes = wins + losses 
score = votes * (wins/votes) 

ten sposób coś z 50% zwycięstw, ale milion głosów będzie nadal wyprzedza coś z wygrywa 100%, ale tylko jeden głos.

Można dodać na dodatkowym ciężarem ze względu na wiek (w dniach w tym przykładzie), też coś

if age < 5: 
    score = score + ((highest real score on site) * ((5 - age)/5) 

ten wprowadzi zupełnie nowe wpisy prawo na górze pierwszej strony, a następnie będą przesuwać się powoli w dół w ciągu kolejnych 5 dni (zakładam, że wiek jest liczbą ułamkową, a nie tylko liczbą całkowitą). Po upływie 5 dni zostaną one umieszczone na liście wyłącznie na podstawie wyniku z poprzedniego fragmentu pseudokodu.

+1

Myślę, że masz wynik = głosy * (wygrane/przegrane) – assaqqaf