2013-03-11 18 views
6

Ich möchte eine Rangliste implementieren und mir wird klar, dass dies, obwohl dies eine einfache Aufgabe zu sein scheint, sehr komplex werden kann. Ich könnte einfach eine Datenbank mit geeigneten Indizes verwenden, aber ich würde gerne wissen, ob es eine effiziente Datenstruktur gibt, die die folgenden Operationen unterstützen kann.Effiziente Datenstruktur für die Bestenliste

  • Add Punktzahl für einen bestimmten Spieler
  • beste Ergebnis für einen bestimmten Spieler
  • Rang abrufen Abrufen von für einen bestimmten Spieler
  • Rufen Sie die Spieler mit der Partitur über und unter aktuellen Spieler Rang
  • Unterstützung anderer Zeitrahmen: der heutige Spielstand, diese Woche, dieses Jahr usw.
  • Skalen zu ~ 100.000 Spielern
  • Speicherbedarf so klein wie möglich e (d.h. läuft auf billige Maschine)

Danke für die Hilfe!

+0

Haben Sie eine maximale Anzahl von Scores/Spieler? Wenn nicht, könntest du viele Partituren haben, wenn du 100K-Spieler hast ... Muss das Ganze auf einmal im Speicher sein oder kann es meistens auf der Festplatte sein (Flash, was auch immer)? Wie sehen Partituren aus (0-255? 0-65525? Strings?). Wenn Sie "billige Maschine" sagen, meinen Sie einen alten PC, richtig, kein Telefon oder ein Arduino. – angelatlarge

Antwort

0

Sie könnten binäre Suchbäume (ausgeglichene wie AVL oder rot-schwarz) verwenden, um die Spielerinformationen basierend auf der Gesamtpunktzahl zu speichern. Innerhalb der Player-Struktur könnten Sie verschiedene Arrays für verschiedene Zeitrahmen haben, mit separaten Variablen für die Gesamtpunktzahl und die beste Punktzahl. Um den Rang oder die Spieler unterhalb oder oberhalb eines bestimmten Spielers zu finden, würde ein Traversal in der Reihenfolge erforderlich sein.

Verwandte Themen