Questo è il mio primo corso in strutture dati e ogni lezione/conferenza TA, parliamo di O(log(n))
. Questa è probabilmente una domanda stupida, ma sarei grato se qualcuno possa spiegarmi esattamente cosa significa!Differenza tra O (n) e O (log (n)) - che è migliore e che cosa è esattamente O (log (n))?
risposta
vuol dire che la cosa in questione (tempo di solito in esecuzione) scale in un modo che è coerente con il logaritmo della sua dimensione di ingresso.
Big-O notation non significa un esatto equazione , ma piuttosto una vincolato. Ad esempio, l'uscita delle seguenti funzioni è tutto O (n):
f(x) = 3x
g(x) = 0.5x
m(x) = x + 5
Perché come si aumenta x, le loro uscite tutti aumentare linearmente - se c'è un rapporto di 6: 1 tra f(n)
e g(n)
, ci sarà anche essere approssimativamente un rapporto 6: 1 tra f(10*n)
e g(10*n)
e così via.
Per quanto riguarda se O(n)
o O(log n)
è meglio, prendere in considerazione: se n = 1000
, quindi log n = 3
(per log-in base 10). Quale preferiresti far eseguire l'algoritmo: 1000 secondi o 3 secondi?
Ben spiegato. Inoltre, vorrei aggiungere alcune informazioni su ciò che un logaritmo è anche per coloro che non lo sanno. log n in informatica significa, l'esponente avrei bisogno di alzare il numero 2 per ottenere n. Quindi, immagina, se n = 16. Il nostro esponente sarebbe molto molto più piccolo del valore reale n. Sarebbe 4. Spero che questo abbia un senso. Nell'esempio sopra riportato da Amber, lei sta dando un esempio simile ma sta aumentando 10 alla potenza di 3. –
+1 - La spiegazione più chiara possibile nel minor numero di parole. Grazie. – techfoobar
http://en.wikipedia.org/wiki/Big_oh
O (log n) è meglio.
O (log n) significa che tempo di esecuzione dell'algoritmo dipende dal logaritmo della dimensione di input. O (n) significa che il tempo di esecuzione dell'algoritmo dipende dalla dimensione di input.
fondamentalmente, O (qualcosa) è un limite superiore al numero dell'algoritmo di istruzioni (quelle atomiche). pertanto, O (logn) è più stretto di O (n) ed è anche migliore in termini di analisi degli algoritmi. Ma tutti gli algoritmi che sono O (log n) sono anche O (n), ma non indietro ...
"O (n) è più stretto di O (logn) ed è anche migliore in termini di analisi degli algoritmi" ... chiaramente O (log (n)) è migliore di O (n). Penso che tu intendessi l'altro modo. – LuxuryMode
Silly :) modificato – Eyal
Per l'input di dimensione n
, un algoritmo di O(n)
eseguirà operazioni perportional a n
, mentre un altro algoritmo di O(log(n))
eseguirà passaggi all'incirca allo log(n)
.
Chiaramente log(n)
è inferiore a n
quindi l'algoritmo di complessità O(log(n))
è migliore. Dal momento che sarà molto più veloce.
definizione formale:
g (x) = O (f (x)) < => c'è x0 e costante C che per ogni x0 x>, | g (x) | < = C | f (x) |.
Quindi, se si trova l'algoritmo A per il problema P che la sua complessità O (f (n)), si può dire che il numero di passi che l'algoritmo farà, è inferiore o uguale asintoticamente a f (n), quando n è solitamente la dimensione di input. (N può essere qualsiasi cosa)
Per ulteriori approfondimenti: http: //en.wikipedia.org/wiki/Big_O_notation.
- 1. Come si visualizza la differenza tra O (log n) e O (n log n)?
- 2. Che cos'è O (log * N)?
- 3. Cosa significa O (log (log (n)))) - competitivo?
- 4. O (N log N) Complessità - Simile al lineare?
- 5. Quale registro dei tassi di crescita (log * n) e log * (log n) è più veloce?
- 6. Intersezioni cerchio di calcolo in O ((n + s) log n)
- 7. Qual è la differenza tra '\ n' o "\ n" in C++?
- 8. trova mediana in O (log n)
- 9. O-grande complessità del c^n + n * (log n)^2 + (10 * n)^c
- 10. Big Oh per (n log n)
- 11. array numpy che è (n, 1) e (n,)
- 12. Dove trovare cosa significa O (n^2) e O (n) etc?
- 13. Perché l'unisci esegue il caso peggiore nel tempo di esecuzione O (n log n)?
- 14. O (N log N) trovando 3 numeri che hanno una somma di qualsiasi T arbitraria in un array
- 15. Qual è la differenza tra Array.of (n), Array (n) e array = [n]?
- 16. Differenza tra "\ n" e Environment.NewLine
- 17. Trova una coppia di elementi dell'array con una data somma e un prodotto in O (n * log (n))
- 18. Possiamo calcolarlo in meno di O (n * n) ... (nlogn o n)
- 19. Che cosa significa "log *"?
- 20. Differenza tra matrice (n) e matrice (n) .fill?
- 21. Ricerca di un elemento a log (n)
- 22. differenza tra PHP \ r \ n \ n
- 23. concatenare due (o n) flussi
- 24. Architettura N-Tiered e N-Layered
- 25. Differenza tra System.getProperty ("line.separator"); e n" ?
- 26. Esempio di Big O di 2^n
- 27. Qual è il significato di O (polylog (n))? In particolare, come viene definito il polylog (n)?
- 28. Spiegazione intuitiva del motivo per cui QuickSort è n log n?
- 29. Perché l'idioma di ricorsione in Haskell "'n + 1' e 'n'" e non "'n' e 'n-1'"?
- 30. conteggio sottostringhe palindromi a O (n)
Una possibile ripetizione di http://stackoverflow.com/questions/487258/plain-english-explanation-of-big-o/487278#487278 – sank
Whoa, 1429 upvotes? Sarò felice con la metà di quello per il mio link di Wikipedia. –