話すとき、アルゴリズムの時間複雑度の順序がO(N log N)であると言うにはどうすればよいですか?


22

O(N log N)の複雑さを持つものを説明するためにどの用語を使用できますか?

例えば:

  • O(1):定数

  • O(log N):対数

  • O(N):線形

  • O(N log N):??????

  • O(N 2):二次

  • O(N 3):立方体


5
ここで、「準線形」という広義の用語は、しばしばを意味O(n · f(n))f(n) << nます。しかし、これは次のようにも、物事に一致するO(n · log log n)と、O(n α(n))どこα(n)アッカーマン関数の逆です。
バクリウ


34
「Oh enn log enn」で十分でしょう。
user253751

回答:


60

「N log N」はあなたが手に入れるのと同じくらい良いものであり、プロのプログラマーによってよく理解されるべきです。存在するすべての複雑さのクラスを表す単一の単語があるとは期待できません。


6
「すべての複雑さのクラスを表す単一の単語があると期待することはできません」-確かにそうではありません。しかし𝓞(N ⋅ログnが)それはIMO、自身の名に値しないような重要なクラスです。スティーブ・ジェソップで述べたように、linearithmicはすでにかなり一般的です。

@leftaroundaboutそれはあなたが議論することができるほど十分に一般的であり、名前に値することは確かです。しかし、「n log n」は、名前として正常に機能することを発音できるほど短い(3音節のみ)。比較のために、「対数」は4つの音節です。「n log n」アルゴリズムのほとんどが複雑な$ N log_B(N / B)$になる複雑な外部アルゴリズムにアクセスすると、より興味深いことになります。
カスペルド

10
コンピュータサイエンスの修士号を取得した学生として、大学での研究を通じて「enn log enn」と聞いたことがあります。「リニアリズム」を聞いたことがないので、最初はそれが何を意味するのか理解できません。
ケビン-モニカの復活

@Kevin:対数は4つの音節ですが、「log-enn」は2つだけです。同様に、O(N ^ 2)は「二乗」ではなく「二乗」です。「cubic」の音素は「enn-cubed」よりも少ないと思いますが、後者の用語はまだ一般的だと思います。
スーパーキャット

51

専門用語の用語がありlinearithmic、まさにこのことを意味は。

私はそれがすべてのプログラマーによって普遍的に理解されているとは思わないので、あなたが注意しなければ、それはそれが伝える以上のものを不明瞭にするでしょう。個人的には私は通常それを使用しません。もしそうなら、おそらく「この記事ではlinearithmic(O(N log N))アルゴリズムを考慮します」など、最初の使用時に定義するでしょう。


11
存在すら知らなかった!
デビッドは、Reinstate Monica

12

「対数線形」と呼ばれることもありますが、実際にはその言葉は別の意味を持っています。しかし、@ Philipの答えが示唆するように、「N log N」に固執します。


1
対数線形の代替の意味は何ですか?「N log N」以外の名前が必要な場合は、log-linearを使用します。
ジョナサンレフラー

2
@JonathanLeffler:私はen.wikipedia.org/wiki/Log-linear_analysisが時々ハイフンなしで綴られていると思います。もちろん、適切な名前空間を使用すると、複雑なクラスに同じ単語を喜んで使用できます。
スティーブジェソップ

@SteveJessop:それは確かにGoogle検索を介して出てきたものです。Google / Wikipediaのコンボを信頼できるものとして受け入れるかどうかは定かではありませんが、対数線形分析が説明どおりであることは間違いありません。
ジョナサンレフラー

1
@JonathanLeffler:私がlin-logまたはlog-linプロットと呼ぶものを意味することもできます(または、私は怠け者であるため、実際にログプロットとは異なるログプロットと呼ぶことがよくあります)。おそらく、この答えがどの代替的な意味を念頭に置いているのかを尋ねるかもしれません:
スティーブジェソップ

2

係数log nはゆっくりと成長するため、定性的な説明はO(n log n)「ほぼ線形」になります。対象者によっては、O(n log n)アルゴリズムのクラスがよく知られている場合がありnます。たとえば、これは比較によるアイテムの高速ソートの場合です。

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.