この記事は、公開アカウント「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倫理研究者が「退職」し騒動を引き起こす
[[188225]] arXiv.org は、物理学、数学、コンピューターサイエンス、生物学の論文の...
顔認識技術は国民の自由に深刻な脅威を与えるほど強力になっている。それにもかかわらず、業界は繁栄し続け...
Google がゲームを撤回しました! Gemini が API を公開してから1 週間も経たないう...
パンデミックの影響で、医療業界は世界中で医師、看護師、その他の医療スタッフの深刻な不足に直面していま...
現在、コンピューティング能力、ストレージ容量、データ収集能力の急速な向上により、人工知能はさまざまな...
ニュージーランドの広大な草原で、羊の群れがのんびりと散歩しながら草を食べており、その後ろを牧羊犬が追...
2023 年には、人工知能 (AI) と Web3 という 2 つの技術現象が引き続き議論の中心にな...
人工知能、モノのインターネット、産業インターネットなどがもたらすインテリジェント化の波は、技術発展の...
今日では、驚くほど人間らしい文章の一部は、実際には大量の人間の文章でトレーニングされた AI システ...
[[406953]]自動車メーカー、自動運転企業、バッテリーおよびエネルギー貯蔵企業として、テスラは...
8 月 12 日、Juli プロジェクト シリーズの第 21 回「大規模言語モデルのトレーニングとア...
人工知能と機械学習。これらの言葉だけでも、意思決定を行うコンピューターが部署や課全体に取って代わる世...