順列アルゴリズムのベンチマークテストと迅速な分析

私はこの小さなレビューを英語で書くことにし、新しいトレンドを開始することを望みました。それは相互通信を改善することを期待しています(気にしないでください!それは若いコスモポリトのグローバルなアイデアです)。



画像 この言葉に多少の問題がある場合でも、英語でこの投稿に返信することをお勧めします。 私は今、詩を書いているわけではありません。英語のスキルに対する恥ずかしさを避けることができると思います。 しかし、私はいくつかの詩的な問題について話すつもりです -もちろん、組み合わせ論、特にオブジェクトの生成について。 私は順列を意味します。 おとぎ話のすべてが通常開始されている言葉から始めましょう:Habrahabrで昔々、スーパー順列の生成に関する興味深い原稿が発行されていました(またはされていたかもしれません)。 そのトピックは、いくつかのhabrausersを蹴って、いくつかのコード(コメントを参照)と私も書くようにしました。 そして実際、この出来事は、アルゴリズムの高速化とテストの古代の問題に再び私を導きました。



私は数学言語と数式のスキルが不十分なので、C89でコーディングした3つの異なるアルゴリズムを印刷しています。



  1. Johnson-Trotterアルゴリズム
  2. Naryanaアルゴリズム
  3. Mrrl (A. Astrelin)によって開発された、このhabrpostから取られたアルゴリズム


上記のすべてのアルゴリズムは再帰的ではありません。



私のバージョンのJohnson-Trotterアルゴリズムは最高ではないと思います。 それでも、私は急いでn = 10の場合の結果を示します



コンソール出力付きの時間(printfを意味します)

実1m19.410s

ユーザー0m31.899s

sys 0m36.253s



コンソール出力なしの時間

実際の0m2.241s

ユーザー0m2.236s

sys 0m0.004s



Mrrlコードののバージョン



コンソール出力付き

実1m11.565s

ユーザー0m27.429s

sys 0m32.997s



コンソール出力なし

実数0m0.489s

ユーザー0m0.486s

sys 0m0.002s



最後のNaryanaのようなアルゴリズムはそのような結果を与えます



コンソール出力付き

実際の1分10秒223

ユーザー0m8.617s

sys 0m38.165s



コンソール出力なし

実際の0m0.453s

ユーザー0m0.449s

sys 0m0.004s



読んでくれてありがとう。 このサイトをスペルチェックに使用しました もちろん、あなたは私に尋ねる絶対的な権利を持っています。 現時点では、どのアルゴリズム( パニックにならないでください!この単語は通常のエスペラント語です!)について簡単な答えを出すことはできません。 可能であれば、これら3つのコードスクリプトを調整し、さまざまな状況でテストする必要があるかもしれません。 最初と3番目のアルゴリズムは、疑似コード(説明を主に読んでいます)をざっと見てからコーディングされました。 2番目のアルゴリズムは、私が間違っていない場合、Habrahabrで以前に公開されたアルゴリズムの厳密なバージョンです。



All Articles