Think Python: How to Think Like a Computer Scientist の演習 13.7 に取り組んでいます。この演習の目標は、単語のファイル (小説としましょう) からランダムな単語を返す比較的効率的なアルゴリズムを考え出すことです。単語が返される確率は、ファイル内の頻度と相関しています。
著者は次の手順を提案しています (より良い解決策があるかもしれませんが、これが本書でこれまでに説明したことに対する最善の解決策であると考えられます)。
- を示すヒストグラムを作成します
{word: frequency}
。 - メソッドを使用
keys
して、本の単語のリストを取得します。 - 単語の出現頻度の累積合計を含むリストを作成し、このリストの最後の項目が本に含まれる単語の合計数 になるようにし
n
ます。 - 1 から までの乱数を選択し
n
ます。 - 二分探索を使用して、乱数が累積和に挿入されるインデックスを見つけます。
- インデックスを使用して、単語リストで対応する単語を見つけます。
私の質問は次のとおりです。次のソリューションの何が問題になっていますか?
t
繰り返しインスタンスやシャッフルを排除することなく、小説に登場するのとまったく同じように、小説を単語のリストに変換します。- 0 から までのランダムな整数を生成し
n
ますn = len(t) – 1
。 - そのランダムな整数をインデックスとして使用して、 からランダムな単語を取得します
t
。
ありがとう。