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

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