Quando parlo, come posso dire che l'ordine di complessità temporale di un algoritmo è O (N log N)?


22

Quale termine posso usare per descrivere qualcosa con complessità O (N log N)?

Per esempio:

  • O (1): costante

  • O (log N): logaritmico

  • O (N): lineare

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

  • O (N 2 ): quadratico

  • O (N 3 ): cubico


5
Ho spesso qui il termine generico "quasi lineare" per indicare O(n · f(n))dove f(n) << n. Ma questo corrisponde anche a cose come O(n · log log n)e O(n α(n))dov'è α(n)l'inverso della funzione Ackermann.
Bakuriu,


34
"Oh enn log enn" è probabilmente abbastanza buono.
user253751

Risposte:


60

"N log N" è buono come si ottiene e dovrebbe essere ben compreso dai programmatori professionisti. Non puoi aspettarti che ci sia una sola parola per descrivere ogni classe di complessità esistente.


6
"Non posso aspettarmi che ci sia una sola parola per descrivere ogni classe di complessità" - certamente no. Ma 𝓞 ( n ⋅ log n ) è una classe così importante che merita un nome tutto suo, IMO; e come detto da Steve Jessop, linearithmic è già abbastanza comune.
lasciato circa il

@leftaroundabout È davvero abbastanza comune che tu possa discutere, che merita un nome. Ma "n log n" è abbastanza breve da pronunciare (solo tre sillabe) che funziona bene come nome. Per confronto "Logarithmic" è quattro sillabe. È più interessante quando si arriva ad algoritmi esterni in cui la maggior parte degli algoritmi "n log n" ottengono complessità $ N log_B (N / B) $, che sarebbe certamente una classe di complessità degna di un nome più breve.
Kasperd,

10
Come studente di master in informatica, ho sentito "enn log enn" durante i miei studi universitari. Non ho mai sentito "linearitmico" e all'inizio non avrei capito cosa significasse.
Kevin - Ripristina Monica il

@Kevin: Logarithmic è di quattro sillabe, ma "log-enn" è solo due. Allo stesso modo, O (N ^ 2) è "enn-squared", non "quadratic". Suppongo che "cubico" abbia meno fonemi di "enn-cubed", ma penso che quest'ultimo termine sarebbe ancora più comune.
supercat,

51

Esiste un termine gergo lineare che significa esattamente questo.

Non credo che sia universalmente compreso da tutti i programmatori, quindi se non stai attento, oscurerà più di quanto informi. Personalmente normalmente non lo uso, e se lo facessi probabilmente lo definirei al primo utilizzo, ad esempio "questo articolo considera gli O(N log N)algoritmi linearitmici ( )".


11
Non ho nemmeno saputo che esistesse!
David dice Reinstate Monica il

12

A volte viene chiamato "loglinear", anche se quella parola in realtà significa qualcosa di diverso. Vorrei solo attenermi a "N log N", tuttavia, come suggerisce la risposta di @ Philip .


1
Qual è il significato alternativo di log-linear? Se volessi un nome diverso da "N log N", log-linear è il termine che userei.
Jonathan Leffler,

2
@JonathanLeffler: presumo en.wikipedia.org/wiki/Log-linear_analysis a volte scritto senza il trattino. Ovviamente con lo spazio dei nomi corretto potresti tranquillamente usare la stessa parola per una classe di complessità.
Steve Jessop,

@SteveJessop: Questo è certamente ciò che è emerso tramite una ricerca su Google. Non sono sicuro di essere disposto ad accettare la combo Google / Wikipedia come autorevole, anche se non ho dubbi sul fatto che l'analisi log-lineare sia come descritta.
Jonathan Leffler,

1
@JonathanLeffler: potrebbe anche significare quello che definirei un complotto lin-log o log-lin (o, dato che sono pigro, in realtà li definirei spesso un diagramma log distinto da un log log). Potremmo forse chiederci quale significato alternativo abbia in mente questa risposta :-)
Steve Jessop,

2

Poiché il fattore log ncresce lentamente, una descrizione qualitativa O(n log n)sarebbe "quasi lineare". A seconda del pubblico, la classe di O(n log n)algoritmi potrebbe essere ben nota, come ad esempio questo è il caso dell'ordinamento rapido degli narticoli per confronto.

Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.