Sommario[Nascondere][Spettacolo]
L'informatica riguarda la comprensione delle complessità degli algoritmi e delle strutture dati.
Hai un elenco di elementi che devono essere ordinati, ma non hai il tempo o le risorse per utilizzare un algoritmo di ordinamento più complesso.
L'ordinamento per inserimento è uno degli algoritmi di ordinamento più semplici, ma può essere lento per elenchi di grandi dimensioni.
La facile implementazione e comprensione hanno reso questo metodo uno dei preferiti dai programmatori. È perfetto per piccoli elenchi o quando hai bisogno di una soluzione rapida.
In questo post del blog, esamineremo la complessità temporale dell'ordinamento degli inserimenti. Questo algoritmo viene utilizzato per ordinare gli array e ha un runtime di O(n2). Ciò significa che la complessità temporale aumenta con la dimensione dell'array.
Tuttavia, questo algoritmo può essere spesso più veloce di altri algoritmi di ordinamento, come quicksort.
Diamo un'occhiata più da vicino a come funziona l'ordinamento per inserimento!
Che cos'è l'algoritmo di ordinamento per inserimento?
Un elemento alla volta, l'ordinamento per inserimento genera una matrice ordinabile, spesso definita come elenco.
Ad esempio, l'ordinamento viene applicato in programmi per computer complicati come i compilatori, in cui l'ordine dei token è importante per l'interpretazione del programma.
Come funziona l'ordinamento per inserimento?
Quando utilizziamo l'ordinamento per inserimento per ordinare un array, l'algoritmo inizia trovando l'elemento più piccolo nell'elenco e inserendolo nella posizione corretta.
Quindi trova l'elemento più piccolo successivo e lo inserisce nella posizione corretta, e così via.
L'algoritmo funziona scorrendo l'elenco, confrontando ogni elemento con quello che lo precede.
Se gli elementi sono nell'ordine sbagliato, l'algoritmo li scambia. Quindi controlla se l'elenco è ordinato e, in tal caso, l'algoritmo termina.
In pratica, l'ordinamento per inserimento viene spesso implementato utilizzando poche righe di codice, rendendolo una scelta popolare per l'ordinamento di piccoli array. Tuttavia, la complessità temporale dovrebbe essere considerata quando si utilizza questo algoritmo.
Esempio:
Ecco un esempio di come funziona l'ordinamento per inserimento. Useremo il seguente array:
1, 2, 3, 4, 5, 6
L'algoritmo inizia trovando l'elemento più piccolo nell'elenco, che è 1. Quindi lo inserisce nella posizione corretta, la prima posizione. Quindi trova l'elemento successivo più piccolo, che è 2. Lo inserisce nella posizione corretta, che è la seconda posizione.
Quindi trova l'elemento successivo più piccolo, che è 3. Lo inserisce nella posizione corretta, che è la terza posizione.
Quindi trova l'elemento successivo più piccolo, che è 4. Lo inserisce nella posizione corretta, che è la quarta posizione, e così via. L'elenco è ora ordinato!
Possiamo vedere dall'esempio che l'algoritmo esegue sei confronti e scambia per ordinare l'elenco. Questo perché ci vogliono n2 confronti e scambi per ordinare un elenco di n elementi. In questo caso, n=6.
Come migliorare la complessità del tempo di ordinamento di inserimento?
Mentre l'ordinamento per inserimento ha un runtime di O(n2), può essere migliorato utilizzando un algoritmo di ordinamento migliore, come quicksort.
Quicksort ha un runtime O(n log n), che è molto più veloce di O(n2).
Tuttavia, in alcuni casi, l'ordinamento per inserimento può essere più veloce di Quicksort.
Ad esempio, se l'elenco è già in ordine, l'ordinamento per inserimento richiederà meno tempo rispetto a Quicksort.
In pratica, l'ordinamento per inserimento viene spesso implementato utilizzando poche righe di codice, rendendolo una scelta popolare per l'ordinamento di piccoli array.
Tuttavia, la complessità temporale dovrebbe essere considerata quando si utilizza questo algoritmo.
Complessità temporali
Complessità del caso peggiore O(n2):
La complessità temporale aumenta con la dimensione dell'array. Ci vogliono n2 confronti e scambi per ordinare un elenco di n elementi.
Ad esempio, se abbiamo un array di dimensione 1000, l'algoritmo richiederà 1,000,000 di confronti e scambi per ordinare l'array.
Complessità caso migliore O(n):
La complessità temporale è la stessa della dimensione dell'array di input. io
t esegue n confronti e scambia per ordinare un elenco di n elementi. Ad esempio, considera un array di dimensione 5. L'algoritmo eseguirà cinque confronti e scambi per ordinare l'array.
Complessità media dei casi O(n2):
La complessità temporale è compresa tra la complessità del caso peggiore e quella migliore in questo caso.
Ci vogliono n2 confronti e scambi per ordinare un elenco di n elementi.
Pertanto, l'ordinamento per inserimento è un algoritmo di ordinamento stabile.
Perché l'ordinamento per inserimento è stabile?
L'ordinamento per inserimento è stabile perché mantiene l'ordine di elementi uguali nell'array di input.
Questo è importante per molte applicazioni, come il recupero dei dati o l'analisi finanziaria. Ad esempio, se abbiamo due elenchi di numeri e vogliamo confrontarli, dobbiamo assicurarci che l'ordine degli elementi sia preservato.
Se le liste non sono ordinate, non le confronteremo accuratamente.
Lascia un Commento