2013-03-11 20 views
6

私はリーダーボードを実装したいと思いますが、これは単純なタスクであるように見えますが、これは非常に複雑になることがあります。私は単に適切なインデックスを持つデータベースを使用することができますが、以下の操作をサポートできる効率的なデータ構造があるかどうかを知りたいと思います。与えられたプレイヤー リーダーボードの効率的なデータ構造

  • 現在のプレイヤーランク
  • サポートの上方および下方のスコアを持つ選手を取得与えられたプレイヤー
  • のためのランクを取得与えられたプレイヤー
  • のための最高のスコアを取得するための

    • 追加スコア異なる時間枠:今日のスコア、今週、今年など
    • 〜100,000人までのスケール
    • メモリフットプリントは可能な限り小さいe(すなわち安い機械で走る)

    ありがとう!

  • +0

    あなたはプレーヤー/プレーヤーの最大数を持っていますか?そうでない場合は、100Kのプレーヤーを持っていれば多くのスコアを取ることができます。一気にメモリ全体を処理する必要がありますか?スコアはどのように見えるのですか(0-255?0-65525?Strings?)。あなたが「安いマシン」と言うとき、あなたは古いPCを意味します。そうではなく、電話やArduinoは意味しません。 – angelatlarge

    答えて

    0

    合計スコアに基づいてプレーヤ情報を格納するために、バイナリ検索ツリー(AVLまたは赤黒のような平衡型のもの)を使用できます。プレーヤー構造内では、トータルスコアとベストスコアの別々の変数を使用して、異なる時間枠で異なる配列を持つことができます。特定のプレイヤーの下または上のプレーヤーまたはランクを見つけるには、順番にトラバーサルが必要です。

    関連する問題