Beitrag
von TheSearcher » 13.02.2007, 23:25
Es geht mir nicht darum hier irgendetwas zu kritisieren. Vielmehr will ich etwas zur öffentlichen Diskussion stellen, was ich da so mit meinem mathematischen Sachverstand beim Votiersystem sehe:
Und zwar können Titel beim hier verwendeten Votiersystem nur nach oben kommen (oder rausgekickt werden), aber niemals abwärts fallen, wenn die Beliebtheit nachlässt (ohne gleich zu fliegen). Insbesondere sehe ich (wobei mir der Song durchaus gefällt, mir geht es nur um die mathematische Gerechtigkeit) das Problem beim 1. Platz: er hält sich sehr lange dort, wobei die Zustimmung immer mehr absinkt. Meines Erachtens sollte sich dies in einem "Heruntersinken" bemerkbar machen. Wie man es halt von den sonstigen "Charts" kennt.
Daher habe ich mir überlegt: wie würde eine Implementierung dessen aussehen, die ich als "saubere" Lösung ansehen kann. Hier mein Lösungsansatz (für Diskussionen bin ich durchaus offen, deshalb veröffentliche ich es ja hier):
Der Platz, den ein Song in der nächsten Woche hat, soll offensichtlich vom Platz, den er in aktuellen Woche hat und von der Anzahl an Rein-, sowie Rausstimmen abhängen. Klar.
Ergo schlage ich folgendes System vor: Songs, die mehr Raus- als Reinstimmen bekommen, sollen wie schon bisher rausfliegen. Dies ist wie gehabt.
Nun kommt der interessante Fall: Reinstimmen >= Rausstimmen.
Hier erst die Erklärung in Umgangssprache: in diesem Fall wird der Prozentsatz derer, die sich für das Drinlassen der Songs A und B ausgesprochen haben, bestimmt. Wer mehr Prozente hat, kommt stets auf einen besseren Platz. Bei Gleichheit entscheidet der Platz der aktuellen Woche. Also eigentlich das, was man von Charts und Bestsellerlisten gewohnt ist.
Nun die mathematische Beschreibung:
Es wird bezüglich der Relation >* geordnet:
>* ist folgendermaßen definiert: Song A >* Song B, wenn
Rein A / (Rein A+Raus A) > Rein B / (Rein B + Raus B)
(also der Anteil der Leute, die sich für Song A aussprechen größer als der Anteil der Leute, die sich für Song B aussprechen).
Bei Rein A / (Rein A+Raus A) = Rein B / (Rein B + Raus B), entscheidet der Platz, den der Song in der aktuellen Woche hat.
Also Song A >* Song B, wenn Rein A / (Rein A+Raus A) = Rein B / (Rein B + Raus B) und Platz A in Woche zuvor <Platz> Rein B / (Rein B + Raus B) lässt sich äquivalent formulieren: Rein A * (Rein B+Raus B) > Rein B * (Rein A + Raus A).
Anschließend noch Distributivgesetz anwenden und Rein A*Raus B auf beiden Seiten abziehen:
Rein A * Raus B > Rein B * Raus A
Damit erspart man sich die lästige Sonderbehandlung einer Division durch 0.
Ansonsten implementiert man diese Relation 1 zu 1 in PHP. Anschließend führt man den bevorzugten Sortieralgorithmus (bei 20 Songs sollte es Bubble Sort tun) unter Verwendung von >* aus. Ist also im Prinzip eine simple Aufgabe.
Der Zyklustyp einer Permutation ist konjugationsinvariant.