この記事は、公開アカウント「Reading the Core」(ID: AI_Discovery)から転載したものです。 並べ替えの用途は何でしょうか? 辞書がアルファベット順に並んでいなかったら、単語を調べるのにどれくらいの時間がかかるでしょうか? 人々が分類の概念を導入したのは、項目をすばやく検索するのに非常に役立つためです。 では、ソートを実現するにはどうすればよいでしょうか? これらのソート アルゴリズムを理解する必要があります。
バブルソート これは最も単純なソートアルゴリズムです。隣接する要素の各ペアを比較し、要素が順序どおりになっているかどうかを確認します。順序どおりになっていない場合は、すべての要素が並べ替えられるまで 2 つの要素を交換します。
画像出典: Google (1)パフォーマンス分析: 時間の計算量:
空間計算量: O(1)。 配列のみが入力され、追加のデータ構造は使用されないため、空間計算量は O(1) になります。 (2)改良バブルソート: コードを見ると、上記のソートアルゴリズムでは、配列がすでにソートされている場合でも、時間の計算量は同じ、つまり O(n²) になることがわかります。 この問題を克服するために、改良されたアルゴリズムが提案されています。配列がソートされているかどうかを判断するフラグを作成し、すべての隣接するペア間でスワップが発生したかどうかを確認します。配列全体を反復処理しているときにスワップがない場合、配列は完全にソートされているため、ループを終了できます。これにより、アルゴリズムの時間計算量が大幅に削減されます。
(3)パフォーマンス分析: 時間の計算量:
空間計算量: O(1)。 選択ソート ソート アルゴリズムでは、最初の要素が最小要素であると想定し、次に配列の残りの部分をチェックして、想定された最小値よりも小さい要素があるかどうかを確認します。存在する場合は、想定される最小値と実際の最小値を入れ替え、存在しない場合は次の要素に進みます。
パフォーマンス分析: 時間の計算量:
空間計算量: O(1)。 前のアルゴリズムと同様に、入力配列以外の追加のデータ構造は使用されない為、空間計算量は O(1) になります。 挿入ソート このソートアルゴリズムでは、各要素について、現在の要素まで正しい順序になっているかどうかがチェックされます。最初の要素は順序が揃っているので、2 番目の要素から開始して順序が正しいかどうかを確認し、そうでない場合は要素を交換します。したがって、任意の要素において、現在の要素が前の要素より大きいかどうかを確認します。そうでない場合は、現在の要素が前の要素より大きくなるまで要素の交換を続けます。
パフォーマンス分析: 時間の計算量:
空間計算量: O(1)。 入力配列以外の追加のデータ構造は使用されないため、空間計算量は O(1) になります。 クイックソート クイックソートはパーティションソートとも呼ばれます。このソートアルゴリズムは、分割統治の概念により、以前のアルゴリズムよりも効率的です。 まずピボットを決定し、次にピボット位置の正しいインデックスを見つけて、配列を 2 つのサブ配列に分割します。 1 つのサブ配列にはピボットよりも小さい要素が含まれ、もう 1 つのサブ配列にはピボットよりも大きい要素が含まれます。次に、配列がそれ以上分割できなくなるまで、これら 2 つのサブ配列を再帰的に呼び出します。
しかし、サブ配列をどのように分割するのでしょうか? 配列の最後の要素がピボットであると仮定して、2 つのポインターを使用して配列全体を走査します。左のポインタが指す要素はピボットより小さく、右のポインタが指す要素はピボットより大きくなければなりません。そうでない場合は、配列内の特定の位置に対応するために、左と右のポインタの要素が入れ替わり、左側の要素が小さくなり、右側の要素が大きくなります。次に、この位置にピボットを挿入します。
パフォーマンス分析: 時間の計算量:
空間計算量: O(n)。 クイックソート関数は再帰的に呼び出されるため、これらの関数呼び出しを格納するために内部スタックが使用されます。スタックには最大で n 回の呼び出しがあるため、空間計算量は O(n) です。 マージソート マージソートは、クイックソートと同様に、分割統治の概念を使用します。マージソートの主な作業はサブ配列をマージすることですが、クイックソートの主な作業は配列をパーティション分割することです。そのため、クイックソートはパーティションソートとも呼ばれます。 次の関数は、各サブ配列に要素が 1 つだけになるまで、配列を 2 つのサブ配列に再帰的に分割します。
これらのサブ配列を 2 つの新しい配列に格納した後、順序に従って結合され、入力配列に格納されます。これらのサブ配列がすべて結合された後、入力配列がソートされます。
パフォーマンス分析: 時間の計算量:
空間計算量: O(n) MergeSort 関数は再帰的に呼び出されるため、これらの関数呼び出しを格納するために内部スタックが使用されます。スタックには最大で n 回の呼び出しがあるため、空間計算量は O(n) です。 画像ソース: unsplash 上記のアルゴリズムは、要素が互いに比較された後にソートされるため、比較ベースのソート アルゴリズムです。ただし、カウントソート、基数ソート、バケットソートなど、比較をベースとしないソートアルゴリズムも存在します。これらは、時間の計算量が O(n) であるため、線形ソートアルゴリズムとも呼ばれます。 各アルゴリズムにはそれぞれ長所と短所があり、どのアルゴリズムを使用するかは優先順位によって異なります。効率が問題にならない場合は、簡単に実装できるバブルソートを使用できます。または、配列がほぼソートされている場合は挿入ソートを使用します。この場合、挿入ソートの時間計算量は線形であるためです。 |
>>: 海外AI界が騒然! Googleの黒人女性AI倫理研究者が「退職」し騒動を引き起こす
金融業界は国民経済の生命線です。モバイルインターネットやオンライン決済の普及により、データは企業にと...
最近、アクセンチュアは「メタバースで出会う:テクノロジーとエクスペリエンスの連続体のビジネスを再構築...
人工知能ツールによって特定された、火星の最新のクレーター群の高解像度画像。画像出典: Space.c...
2016年3月、中国データ最高責任者連盟が「中国ビッグデータ産業の発展に影響を与える100人」大規模...
長年にわたり、強力なパスワード、定期的なデータ バックアップ、多要素認証は、個人情報を安全に保つため...
ケンブリッジ大学人工知能研究センターは、人工知能によってもたらされる新しい能力とそれが直面するリスク...
背景分散コンセンサスアルゴリズム(Consensus Algorithm)は、分散コンピューティング...
Mengniu、Jiaoxia、Qingfeng、Oshiman、Wufangzhai、Santon...
最近、暗号通貨の世界では多くのニュースがありました。BTC は再びフォークを経験し、ビットコインは急...
農業人口の高齢化と低所得化により、牛による耕作、手作業による移植、手作業による収穫といった伝統的な農...
次世代のインテリジェントコネクテッドカーには、高度な自動運転システムが必須です。車両が自動運転をいか...