[解決済み] ロードされたサイコロをシミュレートするための効率的なデータ構造とアルゴリズムとは?
質問
もし、私が n -のサイコロがあり、それぞれの面が k はある確率で p k をロールアップしたときに出てくる。この情報を静的に (つまり、固定された確率のセットに対して) 格納し、サイコロのランダムな出目を効率的にシミュレートするための良いデータ構造があるかどうか知りたいのです。
現在、私はO(lg) n ) の解決策を持っています。の累積確率の表を保存しておくというものです。 k の辺の累積確率の表を保存することです。 k の範囲内で無作為に実数を生成し、その累積値が選択された値より大きくない最大のインデックスを得るためにテーブル上で二項探索を実行します。
私はこの解決策が好きですが、ランタイムが確率を考慮に入れないのは奇妙に思えます。特に、片側が常に出てくるか、値が一様に分布しているという極端なケースでは、私のソリューションがまだ対数的に多くのステップを要するのに対し、素朴なアプローチを使用して O(1) でロールの結果を生成することが可能です。
誰か、実行時間に何らかの形で「適応的」な方法でこの問題を解決する方法について提案を持っていますか?
更新しました。 この質問に対する回答に基づいて、私は次のように書きました。 この問題に対する多くのアプローチについて説明した記事 という記事で、その解析結果とともに紹介されています。Voseのエイリアス法の実装では、Θ( n ) の前処理時間とダイス1個あたりのO(1)時間を与えるようです。これは実に印象的です。 これが回答に含まれる情報への有用な追加であることを望みます!
どのように解決するのですか?
あなたが探しているのは のエイリアスメソッド を提供する O(1) を提供するもので、一回の O(n) セットアップで一定の離散確率分布 (長さ n の配列のエントリに一定時間でアクセスできると仮定) を生成する方法です。この方法は 第3章 (PDF) の "非一様乱数生成".Non-Uniform Random Variate Generation。 をLuc Devroyeが執筆しました。
このアイデアは、確率の配列p k の3つの新しいn要素配列、q k , a k およびb k . 各q k は 0 から 1 の間の確率であり,各 a k とb k は1以上n以下の整数である。
0から1までの2つの乱数rとsを生成して1からnまでの乱数を生成し、i = floor(r*N)+1 とする。もしqが i < s ならば a を返す。 i else return b <サブ i . aliasメソッドでの作業は、qをどのように生成するかを考えることです。 k , a k およびb k .
関連
-
[解決済み] ビッグ・オー、どうやって計算・概算するんだ?
-
[解決済み] Googleの "Did you mean? "はどうなっているのか?アルゴリズムの仕組みとは?[クローズド]
-
[解決済み】ビットシフト(bit-shift)演算子とは、どのようなもので、どのように機能するのですか?
-
[解決済み】ソートアルゴリズムにおける安定性とは何ですか、なぜそれが重要なのですか?
-
[解決済み】Redisに使用されている基礎的なデータ構造は何ですか?
-
[解決済み] サイクルリンクリストのサイクル開始ノードを見つけるにはどうしたらいいのでしょうか?
-
[解決済み] 与えられた(数値)分布で乱数を発生させる
-
[解決済み] フラットな構造から効率的にツリーを構築する方法とは?
-
[解決済み] ハッシュテーブルとトライ(プレフィックスツリー)のどちらを選べばいいですか?
-
[解決済み] 2つの矩形の交差を検出するアルゴリズム?
最新
-
nginxです。[emerg] 0.0.0.0:80 への bind() に失敗しました (98: アドレスは既に使用中です)
-
htmlページでギリシャ文字を使うには
-
ピュアhtml+cssでの要素読み込み効果
-
純粋なhtml + cssで五輪を実現するサンプルコード
-
ナビゲーションバー・ドロップダウンメニューのHTML+CSSサンプルコード
-
タイピング効果を実現するピュアhtml+css
-
htmlの選択ボックスのプレースホルダー作成に関する質問
-
html css3 伸縮しない 画像表示効果
-
トップナビゲーションバーメニュー作成用HTML+CSS
-
html+css 実装 サイバーパンク風ボタン
おすすめ
-
[解決済み] 末尾再帰とは何ですか?
-
[解決済み] テールコール最適化とは何ですか?
-
[解決済み] 32ビット整数のセットビットの数を数えるには?
-
[解決済み] GenerativeアルゴリズムとDiscriminativeアルゴリズムの違いは何ですか?[クローズド]
-
[解決済み】広さ優先と深さ優先の比較
-
[解決済み] ディズニーのファストパスは有効か、有用か 待ち行列論
-
[解決済み] DijkstraのアルゴリズムとA-Starの比較は?
-
[解決済み] ハッシュテーブルとトライ(プレフィックスツリー)のどちらを選べばいいですか?
-
[解決済み] 2つのキューを使用したスタックの実装
-
[解決済み] ロードされたサイコロをシミュレートするための効率的なデータ構造とアルゴリズムとは?