Konuşurken, bir algoritmanın zaman karmaşıklık düzeninin O (N log N) olduğunu nasıl söyleyebilirim?


22

O (N log N) karmaşıklığına sahip bir şeyi tanımlamak için hangi terimi kullanabilirim?

Örneğin:

  • O (1): Sabit

  • O (log N): Logaritmik

  • O (N): Doğrusal

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

  • O (N 2 ): Kuadratik

  • O (N 3 ): Kübik


5
Sık sık burada "yarı-doğrusal" terimini O(n · f(n))nerede kullanacağımı kastediyorum f(n) << n. Fakat bu aynı zamanda Ackermann fonksiyonunun tersi gibi O(n · log log n)ve O(n α(n))durumları α(n)ile eşleşir .
Bakuriu


34
"Oh enn log enn" muhtemelen yeterince iyidir.
user253751 19:15

Yanıtlar:


60

"N log N", alacağınız kadar iyidir ve profesyonel programcılar tarafından iyi anlaşılmalıdır. Var olan her karmaşıklık sınıfını tanımlamak için tek bir kelime olmasını bekleyemezsiniz.


6
“Her karmaşıklık sınıfını tanımlamak için tek bir kelime olmasını bekleyemiyorum” - kesinlikle değil. Ancak 𝓞 ( n ⋅ log n ) öyle bir önemli sınıftır ki, kendine ait bir ismi olan IMO'yu hak ediyor; ve Steve Jessop'un dediği gibi, linearithmic zaten oldukça yaygındır.
leftaroundabout

@leftaroundabout Gerçekten bir adı hakettiğini iddia edebileceğiniz kadar yaygındır. Ancak "n log n" bir isim olarak iyi çalıştığını söyleyebilecek kadar kısa (sadece üç heceli). Karşılaştırma için "Logaritmik" dört hecelidir. "N log n" algoritmalarının çoğunun karmaşıklık kazandığı $ N log_B (N / B) $ olan harici algoritmalara ulaştığınızda daha da ilginç, bu kesinlikle daha kısa bir isme layık bir karmaşıklık sınıfı olacak.
kasperd

10
Bir bilgisayar bilimi yüksek lisans öğrencisi olarak, üniversite eğitimim boyunca "enn log enn" duydum. "Lineermik" i hiç duymadım ve ilk önce ne anlama geldiğini anlamadım.
Kevin - Monica'yı yeniden

@Kevin: Logaritmik dört hecelidir, ancak "log-enn" sadece ikidir. Aynı şekilde, O (N ^ 2) "ikinci dereceden" değil, "enn-kare" dir. Sanırım "kübik", "enn-cubed" den daha az ses kullanıyor, ancak ikinci terimin hala daha yaygın olacağını düşünüyorum.
supercat

51

Tam olarak bu anlam ifade eden bir jargon terimi doğrusaldır .

Bunun tüm programcılar tarafından evrensel olarak anlaşıldığına inanmıyorum, bu yüzden eğer dikkatli değilseniz, bildirdiğinden daha fazla gizlenecektir. Şahsen normalde kullanmıyorum ve o zaman yaparsam muhtemelen ilk kullanımda tanımlarım, örneğin "bu makale linearithmic ( O(N log N)) algoritmalarını dikkate alır ".


11
Bunun var olduğunu bile bilmiyordum!
David diyor Reinstate Monica

12

Bu kelime aslında farklı bir şey ifade etse de, bazen "loglinear" olarak adlandırılır. @ Philip'in cevabından da anlaşılacağı gibi sadece "N log N" ile bağlı kaldım .


1
Log-linear için alternatif anlam nedir? Eğer 'N log N' dışında bir isim istiyorsam, log-linear kullanacağım terimdir.
Jonathan Leffler

2
@JonathanLeffler: en.wikipedia.org/wiki/Log-linear_analysis, bazen tire olmadan yazıldığını varsayıyorum . Tabii ki uygun ad boşluğu ile aynı kelimeyi bir karmaşıklık sınıfı için mutlu bir şekilde kullanabilirsiniz.
Steve Jessop

@SteveJessop: Bu kesinlikle bir Google aramasıyla ortaya çıkan şeydi. Google / Wikipedia combo'yu yetkili olarak kabul etmek isteyip istemediğimden emin değilim, ancak log-lineer analizin tanımlandığı gibi olduğundan hiç şüphem yok.
Jonathan Leffler

1
@JonathanLeffler: aynı zamanda lin-log veya log-lin grafiği olarak adlandırdığım anlamına da gelebilir (veya tembel olduğum için, genellikle onları bir log-log'dan farklı olarak bir log plotu olarak adlandırırım). Biz belki sorabilir hangi Bu cevap :-) aklındaki alternatif anlamı
Steve Jessop

2

Faktör log nyavaş büyüdüğü için, nitel bir tanım O(n log n)"neredeyse doğrusal" olacaktır. Hedef kitlenize bağlı olarak, O(n log n)algoritmalar sınıfı iyi bilinir, örneğin bu, nkarşılaştırmalara göre öğeleri hızlı bir şekilde sıralarken durum böyledir .

Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.