2016-11-16 10 views
0

周波数のリストがあるとします(例:[1, 1, 2])。このリストから、その値に比例したオプションを選択する確率で、すばやくサンプリングできるようにしたい。動的に積み重ねられたサイコロのデータ構造ですか?

The Alias methodこのサンプリングは、O(n)の構築時間とO(1)のクエリ時間で行うことができます。私は、このリストの更新や挿入をサポートしているこの問題のバージョンに興味があります。

  • が拡張さBSTは、あなたがn /ログを持っていますが、階層データ構造を使用することができます
  • O取ったすべての操作(n個のログを())、でこれを行うことができます(:ここでは

    はいくつかのアイデアですn)ブロックのサイズlog(n)。各ブロックは拡張BSTとして格納され、最上位のデータ構造はエイリアス・メソッドです。 BSTを選択するとO(1)が必要になり、その中でO(log(log(n)))を選択すると、クエリ時間はO(log(log(n)))になります。そして、更新が起こるたびに、O(n/log(n))時間かかる最上位構造を完全に再構築する必要があります。

さらに高速なソリューションはありますか?

答えて

関連する問題