私たちが話しているデータの種類について知っておくとよいでしょう。何人のユーザーが存在しますか?平均して何人がオンラインになりますか?すべてのユーザーと比較した「見たユーザー」の比率はどうですか(疎対密)
アルゴリズムの変更 最初にポップするのではなく、オンラインユーザーのセットからランダムな要素を選択します。これにより、バランスが改善され、これら2つのセットの比率によっては、償却の複雑さが改善される可能性があります。
代替アルゴリズム(より構造化されています。最悪の場合はまだ悪いです。まばらな場合は良いはずです )
- 見続ける バランスの取れたツリーとして(O(log n)挿入)
- オンラインを維持する バランスの取れた木として。
- 十分な数のユーザーを選択していませんが:
- 見たの最初のギャップを検索する (例:[0,1,3,7]-> 2; SOリンクによるO(log n))
- 最初のユーザーを検索>=gap-value(O(log n))
- ユーザー
- ->ピック
- その他
- ->chosen-gap-valueを一時的に追加します (現時点では、モデル-オンラインで更新する頻度を決定します )見た または、検索を何らかの方法で> selected-gap-value(O(log n))
に制限します。
データによっては、データが巨大で見られる場合、これは非常にうまく機能するはずです。 まばらです!