そうでない場合は、l
のように文字列の長さを取って、複雑さは次のようになります。何が起きているのかを理解するために、それを文脈に戻す価値があります。
文脈は、長さNの文字列Sから始まり、その文字列のすべての可能な接尾辞のセットをソートすることです。
文字位置ごとに1つずつ、N個の空でない空白の接尾辞があり、セット内の文字列の平均サイズは(N + 1)/ 2です(1からNまでのすべての長さが等しい可能性が高いためです)。
平均長さLの2つの文字列を比較するための予想コストがO(L)であり、N個のオブジェクトをソートするための予想比較数がO(N log N)であり、最後にLがN (N + 1)/ 2 × N × logN)これは、O(N logN)に簡略化するO((N + 1)/ 2 × logN)であることがわかります。 。
しかし、長さLの2つの文字列を比較するための予想コストは、実際にはO(L)ではありません。一般に、2つの文字列の各文字の位置を比較する必要はありません。最初の不一致が見つかるまで、文字を見るだけで十分です。文字列が可能な文字列の中にランダムに分布している場合、検査される必要がある文字の予想数は、最悪の場合のコストはO(L)ですが、実際にはO(1)(単純な確率論的引数)です。
クイックソートの場合(少なくとも)、クイックソートの後のフェーズでの比較が互いに近い文字列間の傾向であるカウンタバランスがあります。この場合、検査される必要がある文字の数は、N個の文字列のソートされた一様分布のサンプル内の2つの連続する文字列の間の最も長い共通プレフィックスの予想される長さであるlog Nに近づく傾向がある。
ソートの実際の予想コストはO(Nlog N)である必要があります。 N.
を記録よりも小さいものに比較数の期待値を復元するに役立つかもしれない、さらに合併症として、各パーティションのLCPのを追跡するために、クイックソートアルゴリズムを変更することが可能である
、(同様の議論ができ引用文は、接尾辞木の問題に対してはるかに良いアルゴリズムを提供するように進んでいるが、並べ替え)
何が原因ですか?文脈とは何ですか?文字列のソート(例: 'cab'が' abc'になる)や文字列のリストを意味しますか? –
Nは文字列の長さで、もう1つは文字列の数なので、実際にはN^2ではありません。文字列の数が文字列の数に比べて短い場合は、O(NLogN)に収束します。 – TTT
「n」が何を意味するかによって異なります。それは文字列の長さですか?それは弦の数ですか?文字列全体を表現するビット数ですか?私の推測*は、後者の場合、時間がO(nlogn)であることになります。なぜなら、短い文字列が多いか、長い文字列が少ないからです。したがって、比較の時間の増加は、 。 – Bakuriu