0

プレイフェア コードを shotgnhillclimbing メソッドで解決する必要があります。最初にランダム キーを生成し、次に英語の本のアルファベット ペア freq でスコアを計算することで簡単に実行したいと考えています。

しかし、繰り返しのないランダムキーを生成する方法がわかりません.25です! 可能性。したがって、いつまでも while を使用すると、正しいキーを見つける可能性は非常に低くなります。

どうすればキーを生成し、それを二度と使用しないようにコンパイラーに依頼できますか? list:add または remove を使用しますか? それとも他に何かありますか?またはおそらく文字列[25!]?

4

1 に答える 1

1

通常のアプローチは、ランダムなキーから始めて、各ステップで変更することです。実行できる変更には、次のようなものがあります: 2 つの主要な文字を交換する、2 つの行全体を交換する、2 つの列全体を交換する、中央の列の周りで反射する、中央の行の周りで反射する、または 2 つの主要な対角線のいずれかで反射する。各ステップで、変更の種類と変更の場所の両方をランダムに選択します。

ランダムな選択がキー マトリックスに影響を与えない可能性があります。たとえば、2 つの行をスワップすることを選択し、スワップの両方のオペランドに同じ 2 つの行を選択した場合、キー マトリックスは変更されません。それはいいです。また、2 つの連続する操作が互いに反転し、キー マトリックスが以前の状態に戻る可能性もあります。それもいいです。各決定はランダムに行われるため、キー マトリックスを改善するものもあれば、悪化させるものもありますが、山登りアルゴリズムは完全にうまく機能します (ただし、必要以上の手順が必要になる場合があります)。

ポイントは、ランダム キーが繰り返される可能性はかなり低く、それが発生してもあまり問題にならないということです。

于 2012-04-07T15:31:25.603 に答える