6 Stimmen

Benötige Hilfe für ein System zur Abstimmung über Sympathie und Abneigung

Ich bräuchte Hilfe bei der Entwicklung eines Sortieralgorithmus, um die besten Einträge zu finden. Ich habe über eine Möglichkeit nachgedacht, es zu tun, aber es gibt zwei große Mängel bei dieser Methode und ich würde gerne wissen, ob es eine bessere Möglichkeit gibt.

So habe ich mir das vorgestellt:

Die Einträge würden nach dem Verhältnis sortiert, das durch l/d donde l = number of likes y d = number of dislikes Diejenigen mit einer höheren Quote haben also mehr Likes und verdienen einen höheren Platz als diejenigen mit einer niedrigen Quote.

Bei dieser Methode gibt es zwei Probleme:

1: wenn die Anzahl der Ablehnungen 0 ist, wird die l/d nicht möglich sein wird. Selbst wenn ein Beitrag also tausend Likes und 0 Dislikes hat, wird er trotzdem nicht in die Wertung aufgenommen.

2: Einträge mit einer geringen Anzahl von Likes und Dislikes sind im Vergleich zu solchen mit vielen Bewertungen im Vorteil, da nur eine geringe Anzahl von Bewertungen das Verhältnis beeinflussen und dem Eintrag eine gute Punktzahl verleihen kann.

Was meinen Sie dazu?

EDITAR : Hier ist eine mögliche Alternative, die das 1. Problem behebt: (l + 1) / (d + 1) . Gibt es dazu eine Rückmeldung?

14voto

mhum Punkte 2898

2voto

Seth Difley Punkte 1300

Um die Division durch Null zu beseitigen, können Sie 1 zu Zähler und Nenner addieren, um (l+1)/(d+1) zu erhalten. Wenn Sie Einträge mit mehr Likes höher einstufen möchten, können Sie Ihre Bewertungsformel mit log(Anzahl der Likes + 1) multiplizieren. Hier wird die Eins hinzugefügt, um den mathematischen Fehler zu beseitigen, der entsteht, wenn der Eintrag null Likes hat. Für die folgende Diskussion wird davon ausgegangen, dass der Logarithmus eine Basis von 10 hat. Eine Rangfolgeformel, die den Anforderungen entspricht, wäre also (Likes + 1)/(Dislikes + 1) * log(Likes + 1).

Beachten Sie, dass diese Formel einen Rang von 0 ergibt, wenn es keine "Likes" gibt, weil log(1) = 0 ist. Nehmen wir an, dass die Stimmen mit einer "Like"- und einer "Dislike"-Stimme gleich sind. Dann ist der Rang 2/2*log(2) = 0,3, weil log(2) = 0,3. Betrachten wir nun ein weiteres Unentschieden mit 9 Likes und 9 Dislikes. Dann ist der Rang 10/10*log(10) = 1, weil log(10) = 1. Das heißt, der log(likes)-Term stuft Krawatten mit mehr Likes höher ein als Krawatten mit weniger Likes.

0voto

hIpPy Punkte 4040

Das hat bei mir am besten funktioniert.

rank = likes * 100 / (likes + dislikes)

Sie ordnet nach höheren Likes, dann nach Likes und/oder Dislikes und dann nach keiner Aktivität. Beispiele:

likes, dislikes => rank
0, 0 => 0            //avoid /0 error
3, 3 => 50
3, 0 => 100

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X