GeeksforGeeks

この記事では、複雑さ、安定性、メモリ制約など、さまざまなソート技術の重要な特性について説明します。 この記事を理解する前に、さまざまなソート技法の基本を理解しておく必要があります (参照 : ソート技法)。

時間の複雑さの解析 –
さまざまなソート技法の最高、平均、最悪の場合の複雑さを、考えられるシナリオとともに説明しました。

比較ベースのソート –
比較ベースのソートでは、配列の要素が互いに比較されてソートされた配列を見つける。

  • バブルソートと挿入ソート –
    平均と最悪の場合の時間複雑さ:n^2
    最高の場合の時間複雑さ:配列がすでにソートされていると、n。
  • Selection sort –
    Best, Average and worst case time complexity: n^2 これはデータの分布に依存しない。
  • マージソート –
    最適、平均、最悪の場合の時間計算量: nlogn これはデータの分布から独立しています。
  • ヒープソート –
    最適、平均、最悪の場合の時間計算量: nlogn これはデータの分布から独立しています。
  • Quick sort –
    再帰関係による分割統治アプローチ:
     T(n) = T(k) + T(n-k-1) + cn

    最悪の場合:配列がソートまたは逆ソートされたとき、分割アルゴリズムは配列を0とn-1の要素を持つ二つの部分配列に分割する。 したがって、

    T(n) = T(0) + T(n-1) + cnSolving this we get, T(n) = O(n^2)

    ベストケースとアベレージケース。 平均すると、分割アルゴリズムは配列を同じ大きさの2つの部分配列に分割する。 したがって、

    T(n) = 2T(n/2) + cnSolving this we get, T(n) = O(nlogn)

非比較型ソート –
非比較型ソートでは、配列の要素を互いに比較してソートを求めない。

  • Radix sort –
    Best, average and worst case time complexity: nk where k is the maximum number of digits in elements of array.
  • Count sort –
    Best, average and worst case time complexity: n+k where k is the size of count array.これは配列の要素数、または配列の要素数です。
  • バケットソート –
    最高・平均時間計算量:n+k(kはバケット数)
    最悪時間計算量:n^2(すべての要素が同じバケットに属する場合)

置換/置換テクニック –
配列のソートに追加のメモリを使用しなければ、そのソート技術は置換(inplace)です。
比較ベースの手法のうち、ソートされたサブアレイをマージするために余分な配列が必要なため、マージ ソートのみがアウトプレース手法となります。 カウントソートはカウント配列を使用し、バケットソートは配列の並べ替えにハッシュテーブルを使用する。

オンライン/オフライン手法 –
ソート手法が進行中に新しいデータを受け入れることができる場合、オンラインと見なされる。 すなわち、(要素だけでなく)配列を左から右に処理し、新しい要素が右に追加されても、進行中の操作に影響を与えません。

安定/非安定手法 –
同じ値を持つ要素の順序を変更しない場合、ソート手法は安定しています。 選択ソートは同じ値を持つ要素の順序を変更する可能性があるため、不安定である。 例えば、配列4, 4, 1, 3を考える。

最初の反復で、見つかった最小要素は1であり、0番目の位置で4と入れ替わる。 したがって、1位の4に対する4の順番が変わることになります。 同様に、クイックソートやヒープソートも不安定である。

非比較ベースの技術のうち、カウントソートやバケットソートは安定したソート技術であるが、基数ソートの安定性はソートに使用する基本アルゴリズムに依存する。

  • 配列がほぼソートされている場合、挿入ソートが好まれます。
  • 入力の順序がわからない場合、マージソートは最悪の場合時間複雑度がnlognで安定しているので好まれます。
  • 配列がソートされている場合、挿入とバブルソートはnの複雑度になるがクイックソートはn^2が得られる。 入力配列のすべての要素が同一であるとき、どのソートアルゴリズムが最も時間を要しないか。 1005>(A)挿入ソート<1005>(B)ヒープソート<1005>(C)マージソート<1005>(D)選択ソート<4590><6266>解決策を考えてみよう。 議論したように、挿入ソートは、入力配列がすでにソートされている場合、複雑さがnになる。

    Que – 2. クイックソート・アルゴリズムについて考える。 リストを2つのサブリストに分割し、それぞれが少なくとも5分の1の要素を含むピボット要素を見つける手順があるとする。 n個の要素をソートするために必要な比較の回数をT(n)とする。 すると、(GATE-CS-2012)
    (A) T(n) <= 2T(n/5) + n
    (B) T(n) <= T(n/5) + T(4n/5) + n
    (C) T(n) <= 2T(4n/5) + n
    (D) T(n) <= 2T(n/2) + n

    解決策です。 クイックソートの複雑さは次のように書ける:

    T(n) = T(k) + T(n-k-1) + cn

    問題で与えられたように、あるリストには全体の1/5の要素が入っている。 したがって、別のリストには全体の4/5の要素が含まれることになります。 値を入れると、

    T(n) = T(n/5) + T(4n/5) + cnとなり、選択肢(B)に一致します。

    時間と空間の複雑さの比較表:

    ベストケース

    ソートアルゴリズム 時間複雑度 空間複雑度
    アベレージ ケース ワーストケース
    バブルソート ΘΩ(N) O(N2) N2 O(1)
    選択ソート ΘΩ(N2) O(N2) O(1)
    挿入ソートΩ(N) O(N2) O(1)
    Merge Sort Ω(N log N) Θ(N log N) O(N log N) O(N)
    Heap Sort Ω(N log N) O(N log N) O(1)
    Quick Sort Ω(N log N) O(N 2) O(N log N)
    Radix Sort Ω(N k) O(N log N) O(N 2) O(N 2) Θ(N k) O(N + k)
    Count Sort Ω(N + k) Θ(N + k) O(N + k) o(N + k) O(k)
    Bucket Sort Ω(N + k) O(N2) O(N)
    Article Tags :

コメントを残す

メールアドレスが公開されることはありません。