Vergleich-basierte ranking-Algorithmus
Ich würde gerne Rangfolge "oder" Sortieren einer Sammlung von Gegenständen (mit Größe möglicherweise größer als 100.000), wo die Objekte in der Sammlung haben keine innere (vergleichbaren) Wert, statt alle, die ich habe, die Vergleiche zwischen zwei Elementen, die von den Benutzern subjektiv.
Beispiel: Betrachten Sie eine Kollektion, die mit Elementen [a, b, c, d]
und Vergleiche, die von Benutzern b > a
, a > d
, d > c
. Die korrekte Reihenfolge dieser Auflistung wäre [b, a, d, c]
.
Diesem Beispiel ist einfach, aber es könnte komplizierter Fälle:
- Da die Vergleiche sind subjektiv, ein Benutzer könnte auch sagen, dass
c > b
. In dem Fall dazu führen würde, dass ein Konflikt mit dem Besteller vor. - Auch Sie können nicht haben Vergleiche, die "verbindet" alle Elemente, d.h.
b > a
,d > c
. In dem Fall ist die Reihenfolge nicht eindeutig ist. Könnte es sein[b, a, d, c]
oder[d, c, b, a]
. In diesem Fall entweder die Bestellung ist akzeptabel.
Wenn möglich wäre es schön, irgendwie berücksichtigen, mehrere Instanzen des gleichen Vergleich und geben diese mit höheren vorkommen mehr Gewicht. Aber eine Lösung ohne diese Bedingung wäre immer noch akzeptabel.
Eine ähnliche Anwendung dieses Algorithmus wurde von Zuckerberg ist FaceMash Anwendung, wo er rangiert Menschen basierend auf Vergleiche (wenn ich es richtig verstanden habe), aber ich habe nicht in der Lage zu finden, was dieser Algorithmus eigentlich war.
Gibt es einen Algorithmus, der bereits vorhanden ist, die das problem lösen können oben? Ich möchte nicht zu verbringen Bemühung versucht zu kommen mit ein, wenn das der Fall ist. Wenn es keinen bestimmten Algorithmus, ist es vielleicht bestimmte Arten von algorithmen oder Techniken, die Sie können, zeigen Sie mir?
Du musst angemeldet sein, um einen Kommentar abzugeben.
Dies ist ein problem, das bereits stattgefunden hat, in einer anderen arena: wettbewerbsfähige Spiele! Auch hier ist das Ziel, weisen Sie jedem Spieler einen globalen "rank" auf der Grundlage einer Reihe von 1-gegen-1 Vergleiche. Die Schwierigkeit, natürlich, ist, dass die Vergleiche sind nicht transitiv (ich nehme die "subjektive" Bedeutung ", die ein Mensch" in deiner Frage). Kasparow schlägt Fischer-beats (weiß nicht, eine andere Schach-Spieler!) Bob beats Kasparov, möglicherweise.
Macht dieser nutzlose algorithmen, die sich auf Transitivität (d.h.
a > b and b > c => a > c
), wie Sie am Ende mit (wahrscheinlich) eine sehr zyklische Graphen.Mehrere rating-Systeme wurden entwickelt, um dieses problem anzugehen.
Das bekannteste system ist wohl das Elo-Algorithmus/Partitur für wettbewerbsfähige Schachspieler. Ihre Nachkommen (zum Beispiel, die Glicko-rating-system) sind anspruchsvoller und berücksichtigen die statistischen Eigenschaften der Gewinn/Verlust-Rekord---in anderen Worten, wie zuverlässig ist ein rating? Dies ist ähnlich wie die Idee der Gewichtung stärker Datensätze mit mehr "Spiele" gespielt. Glicko bildet auch die Grundlage für die TrueSkill-system verwendet auf Xbox Live für multiplayer-Videospiele.
Können Sie daran interessiert, das minimum feedback arc set problem. Im wesentlichen liegt das problem, die minimale Anzahl von vergleichen, die "gehen den falschen Weg", wenn die Elemente sind Linear angeordnet in einige bestellen. Dies ist der gleiche wie der Suche nach der minimalen Anzahl von Kanten, die entfernt werden müssen, um den graph azyklisch. Leider, lösen das problem genau ist NP-hart.
Ein paar links, die das problem zu besprechen:
http://citeseerx.ist.psu.edu/viewdoc/download?doi=10.1.1.86.8157&rep=rep1&type=pdf
http://en.wikipedia.org/wiki/Feedback_arc_set
Googelte ich diese aus, suchen Sie in Kapitel 12.3, Topologische Sortierung und Tiefe-zuerst-Suche
http://www.cs.cmu.edu/~avrim/451f09/Vorträge/lect1006.pdf
Ihre Beziehungen beschreiben einen gerichteten azyklischen Graphen (hoffentlich azyklisch) und so Graphen topologische Sortierung ist genau das, was Sie brauchen.