Quali sono alcuni algoritmi che utilizziamo quotidianamente che hanno complessità O (1), O (n log n) e O (log n)?
Quali sono alcuni algoritmi che utilizziamo quotidianamente che hanno complessità O (1), O (n log n) e O (log n)?
Risposte:
Se desideri esempi di algoritmi / gruppi di dichiarazioni con complessità temporale come indicato nella domanda, ecco un piccolo elenco:
O(1)
tempoO(n)
tempoIn poche parole, tutti gli algoritmi di forza bruta, o noob che richiedono linearità, sono basati sulla complessità temporale O (n)
O(log n)
tempoO(n log n)
tempoIl fattore "log n" viene introdotto prendendo in considerazione Divide and Conquer. Alcuni di questi algoritmi sono i migliori ottimizzati e utilizzati frequentemente.
O(n^2)
tempoQuesti dovrebbero essere gli algoritmi meno efficienti se sono presenti le loro controparti O (nlogn). L'applicazione generale potrebbe essere Brute Force qui.
O(log n)
elenco in modo che sia prima O(n)
dell'elenco in modo che l'elenco sia in ordine dal migliore al peggiore. haha :)
Un semplice esempio di O(1)
potrebbe essere return 23;
: qualunque sia l'input, questo tornerà in un tempo fisso e finito.
Un tipico esempio O(N log N)
potrebbe essere l'ordinamento di un array di input con un buon algoritmo (ad es. Mergesort).
Un tipico esempio se O(log N)
sarebbe cercare un valore in un array di input ordinato per bisezione.
O (1) - la maggior parte delle procedure di cottura sono O (1), ovvero ci vuole una quantità di tempo costante anche se ci sono più persone per cui cucinare (in una certa misura, perché potresti esaurire lo spazio nelle tue pentole / padelle e bisogno di dividere la cottura)
O (logn) - trovare qualcosa nella tua rubrica telefonica. Pensa alla ricerca binaria.
O (n) - leggere un libro, dove n è il numero di pagine. È il tempo minimo necessario per leggere un libro.
O (nlogn) - non riesco a pensare immediatamente a qualcosa che si potrebbe fare ogni giorno che è nlogn ... a meno che non si ordinino le carte eseguendo l'unione o l'ordinamento rapido!
Posso offrirti alcuni algoritmi generali ...
Queste sarebbero le risposte istintive in quanto suona come un tipo di domanda per i compiti a casa / intervista. Se stai cercando qualcosa di più concreto è un po 'più difficile in quanto il pubblico in generale non avrebbe idea dell'implementazione sottostante (ovviamente con risparmio di open source) di un'applicazione popolare, né il concetto in generale si applica a una "applicazione"
O (1): trovare la migliore mossa successiva negli scacchi (o Go se è per questo). Poiché il numero di stati del gioco è finito, è solo O (1) :-)
O(1)
nanosecondi, e tu sicuramente sai quale O(1)
accadrà per primo ...
La complessità dell'applicazione software non viene misurata e non è scritta in notazione O grande. È utile solo per misurare la complessità degli algoritmi e per confrontare gli algoritmi nello stesso dominio. Molto probabilmente, quando diciamo O (n), intendiamo che si tratta di "O (n) confronti " o "O (n) operazioni aritmetiche". Ciò significa che non puoi confrontare nessuna coppia di algoritmi o applicazioni.
0 (logn) -Ricerca binaria, elemento di picco in un array (può esserci più di un picco) 0 (1) -in Python che calcola la lunghezza di una lista o di una stringa. La funzione len () richiede 0 (1) tempo. L'accesso a un elemento in un array richiede 0 (1) tempo. L'operazione push in uno stack richiede 0 (1) tempo. 0 (nlogn) -Unisci ordinamento. l'ordinamento in python richiede tempo nlogn. quindi quando usi listname.sort () ci vuole tempo nlogn.
La ricerca di note in una tabella hash a volte richiede tempo più che costante a causa delle collisioni.
O (2 N )
O (2 N ) denota un algoritmo la cui crescita raddoppia con ogni aggiunta al set di dati di input. La curva di crescita di una funzione O (2 N ) è esponenziale: inizia molto superficiale, quindi aumenta in modo meteorico. Un esempio di una funzione O (2 N ) è il calcolo ricorsivo dei numeri di Fibonacci:
int Fibonacci (int number)
{
if (number <= 1) return number;
return Fibonacci(number - 2) + Fibonacci(number - 1);
}
Tower of Hanoi
sarebbe stato un esempio migliore.