2016-09-29 8 views
2

私はスコアでソートされたn人の選手を含むスコアボードを維持したいと思っています。 プレイヤーがxポイントを獲得したとき(彼がまだトッププレイヤーでない場合)必要ならば彼の上のプレーヤーを交換してください。そして、私は彼の上のプレーヤーがスコアよりも大きいか、リストの一番上に来るまでこれを繰り返します。 これは、O(n)の最悪の場合の時間を持つ問題です.O(log n)のような形で行うことができますか?有効時間のスコアボード?

+1

実際には、最悪の場合には到達せず、* one-element-bubble-sort *が最善の方法です。スコアボードにデータが入力されて比較的安定していると、エントリの一般的なランキングの動きはほとんどが数か所で変化します。また、ボーナスとして:参照のローカリティはツリーやバイナリ検索よりも優れています。 – joop

答えて

3

balanced search treeを維持し、選手をスコアリングする。場合Z

  1. によってプレイヤNのスコアの変化は、Y

  2. N

  3. のエントリを削除すると言う、Nの現在の値を見つけます

    nからへのマッピングを挿入y + z

複雑さは対数です。

関連する問題