この記事は、公開アカウント「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倫理研究者が「退職」し騒動を引き起こす
10月30日、崑崙万為は、数百億語の容量を持つ大規模言語モデル「天工」Skywork-13Bシリーズ...
2月28日、BaiduはXiaodu新製品戦略発表会で、Xiaodu TV CompanionとXi...
少し前に、Google とハーバード大学が共同で、人間の脳の神経の 3D 接続マップを公開しました。...
AI技術の飛躍的な発展に伴い、攻撃者はAIの武器化を加速させ、ソーシャルエンジニアリング技術と組み合...
AI研究者は人類と未来を守るために、仮想世界で責任あるAIを開発しなければなりません。人工知能のア...
今日の急速に変化する世界では、私たちが日常生活で処理しなければならないデータとタスクの量は膨大です。...
背景モノのインターネット (IoT) の継続的な発展は、ここ数年にわたって現実のものとなってきました...
二足歩行ロボットは高価で複雑、そして壊れやすい。バランスという観点で言えば、二足歩行は四足歩行よりは...
MoE(Mixed of Experts)モデルは最近とても人気があるので、詳しく紹介する必要はな...
顔認証決済はますます普及しつつあるしかし、この技術の安全性については激しい議論が交わされています。映...
夏が進むにつれて気温もどんどん高くなっていきます。最近クウェートの気温は50℃~70℃に達したと報じ...
2024 年は、人工知能 (AI) を先頭に、革新的なテクノロジーにとってエキサイティングな年となる...