2011-12-25 6 views
0

私は単語スクランブラーを作ろうとしています。使用するべきアルゴリズムがあるのか​​、それともゼロから構築するべきなのか疑問に思っています。すべてのポインタが役立つだろう!単語をスクランブルするアルゴリズムはありますか?

+2

アレイのシャッフルとはどのように違いますか? – SLaks

+2

「単語をスクランブルする」ということは、正確にはどういう意味ですか? – Staven

+0

スクランブルされた単語は有意義であるか、まったくランダムであるべきですか? – nikhil

答えて

4

要素のシーケンスのランダム置換を見つけるための標準アルゴリズムは(または、あなたのケースでは、単語の文字)は線形時間での要素の順序を真にランダム順列を生成Fisher-Yates shuffle、です。アルゴリズムは確立されており、多くの標準ライブラリがその実装を提供しています(たとえば、C++ std::random_shuffleアルゴリズムは通常このアルゴリズムを使用して実装されています)ので、事前に実装された実装を見つけることができます。そうでない場合、アルゴリズムは実装が非常に簡単であり、ここではそのためのいくつかの擬似コードです:これを実装する場合

for each index i = 0 to n - 1, inclusive: 
    choose a random index j in the range i to n - 1, inclusive. 
    swap A[i] and A[j] 

はランダムなインデックスを選ぶとき、あなたはないは0とN-間のインデックスを選ぶんので注意してください1を含む。これは不均一な文字の分布を作り出します(それについての詳細はin this earlier questionを読むことができます)。

希望すると便利です。

+0

私は今すぐこれを試します – Aspyn

+0

大変ありがとう、 – Aspyn

1

Knuth Shuffle(AKA Fisher-Yates Shuffle)をご覧ください。それは、セットのあらゆる順列が等しくなることを確実にする望ましい特徴を有する。 Here's a linkを、任意のサイズのオブジェクトに作用するCの実装(他の言語の実装と共に)に変換します。

関連する問題