世界で最も美しいソートアルゴリズム!

世界で最も美しいソートアルゴリズム!

[[248668]]

早速、世界で最も「美しい」ソートアルゴリズムについてお話ししましょう。

  1. void stooge_sort(int arr[], int i, int j){
  2. arr[i] > arr[j] の場合、arr[i] と arr[j] を入れ替えます。
  3. (i+1 > =j) の場合、戻ります。
  4.   
  5. 整数k = (j-i+1)/3;
  6. stooge_sort(arr, i, jk);
  7. stooge_sort(arr, i+k, j);
  8. stooge_sort(arr, i, jk);
  9. }

「アルゴリズム入門」の演習にある「完全ソート」は、ハワード教授やファイン教授を含む数人の教授によって提案されました。コードの実装がエレガントで、すっきりしていて、美しいことから「完全ソート」と呼ばれています。

コードは分かりにくいので、アイデアを段階的に説明します。

まず、ソートのために渡されるパラメータは、ソートする配列arr[i, j]です。

ステップ 1: 位置 i と j の要素を比較し、ソート規則に従ってそれらを置き換えるかどうかを決定します。

ナレーション: Ben Lizi、ソートのルールは小さいものから大きいものへの順だと仮定します。

順列が完了したら、ソートが完了したかどうかを判断します。i と j が隣接している場合、ソートは完了しています。

ステップ2: arr[i, j]を3つの等しい部分に分割します。

ナレーション: 要素の総数は j-i+1 です。

ステップ 3: arr の最初の 2/3 に再帰的に戻ります。

ステップ 4: arr の 2 番目の 2/3 に再帰的に戻ります。

ステップ 5: arr の最初の 2/3 に再帰的に戻ります。

並べ替えが完了しました。

すごいじゃないですか!!!

もう一度見てください、感動しましたか?

  1. void stooge_sort(int arr[], int i, int j){
  2. if (arr[i] > arr[j]) swap(arr[i], arr[j]); // 比较
  3. if (i+1 > =j) return; // 終了しましたか?
  4.   
  5. int k =(j-i+1)/3; // 3つの等しい部分に分割する
  6. stooge_sort(arr, i, jk); // 最初の 2/3 の半分の領域
  7. stooge_sort(arr, i+k, j); // 最後の2/3
  8. stooge_sort(arr, i, jk); // 最初の 2/3 の半分の領域
  9. }

コードの見た目は良いですが、完全なソートは非常に遅いアルゴリズムなので役に立ちません。

コードから簡単にわかります:

  • 要素が 1 つしかない場合、完全なソートにかかる時間も 1 です。
  • n 個の要素がある場合、完全なソートは定数と 3 回の再帰によって計算され、各再帰のデータ量は (2/3)*n になります。

つまり、その時間計算量再帰式は次のようになります。

  • T(1) = 1;
  • T(n) = 3T(2/3n) + 1;

「すべての時間計算量の計算を解く」の再帰計算方法を使用すると、最終的に、完全ソートの時間計算量は O(n^2.7) であり、これは O(n^2) ソートよりも遅いことがわかります。

完全なソートの証明はこの記事では展開されていません。コードからは、スワップと 3 回の再帰を通じて、ソートが完了するまで、小さな要素が先頭に移動し、大きな要素が後ろに移動する傾向があることが直感的にわかります。

ナレーション: クイック ソートのプロセスは、パーティション + 2 回の再帰であり、ソートが完了するまで、小さい要素が先頭に移動し、大きい要素が最後尾に移動します。

皆さんがこの瞬間から何かを得られることを願っています。

[この記事は51CTOコラムニスト「58 Shen Jian」によるオリジナル記事です。転載については原作者までお問い合わせください。]

この著者の他の記事を読むにはここをクリックしてください

<<:  Dynatrace のフルスタック AI モニタリングは、企業が AWS クラウドで飛躍するのを助けます

>>:  4つの主要な機械学習プログラミング言語の比較: R、Python、MATLAB、Octave

ブログ    

推薦する

基本的なアルゴリズムの学習ルートとランダムな考え

勉強計画(いつも顔を叩かれるような気分です)煙台での仕事を辞めて北京に来ました。アルゴリズムが苦手だ...

ディープラーニングの背後にあるさまざまなアイデアや考え方を徹底的に理解する

ディープ ニューラル ネットワークは、ディープラーニング モデルが画像分類や音声認識などの従来の機械...

...

AI テクノロジーはヘルスケアの変革にどのように役立つのでしょうか?

【51CTO.comオリジナル記事】近年、「人工知能」(AI)という言葉が頻繁に登場し、今日ではこ...

自動車業界における人工知能の5つの主要な応用

[51CTO.com からのオリジナル記事] 自動車業界における人工知能の応用を考えるとき、最初に思...

多言語AI分析は、顧客体験の可能性を解き放ち、ビジネスの成長を促す鍵となる

テキスト分析は、顧客が話す言語に関係なく、顧客の意見のあらゆる例を発見して注釈を付けることができる強...

DxRアルゴリズムのアイデアに基づいて設計されたルーティングアイテム配置構造の図

まず、タイトルには、検索構造ではなく、ルーティング項目の配置構造と書かれています。つまり、この構造を...

人工知能はどのような革新と影響をもたらすのでしょうか?

現在、我が国の政策の推進と各方面の支援により、人工知能の発展は急速に進んでいます。人々が最も関心を持...

...

...

なぜ巨人たちはドローンに群がるのか?

近年、我が国のドローン産業は急速な発展を遂げています。飛行制御、ナビゲーション、通信、センシングなど...

研究によると、GPT-4モデルはエラーを自己修正する能力があり、AIコードのさらなる商業化を促進することが期待されています。

7月5日、マサチューセッツ工科大学(MIT)とマイクロソフトの研究者らは、GPT-4モデルには優れ...

現在のディープラーニングが人工知能にとって行き詰まりとなっている理由を20の理由から説明します。

ディープラーニングが初めて登場したとき、ほとんどの AI 研究者はそれを嘲笑しましたが、わずか数年で...

2021 年のトップ 10 機械学習ライブラリ

今は人工知能爆発の時代です。AIと機械学習は広く普及しています。もちろん、機械学習の分野で最も人気の...

年末総括:セキュリティ業界は2020年にCOVID-19パンデミックの課題に対処するのに貢献した

新型コロナウイルス感染症のパンデミックは、セキュリティ業界を含む世界中のあらゆる業界のあらゆる側面に...