5.11. Ordine di miscelazione¶

Ora dirigiamo la nostra attenzione all’utilizzo di una strategia di divisione e conquistazione come un modo per migliorare le prestazioni degli algoritmi di ordinazione. Il primo algoritmo che studiamo sta mescolando mescolando. L’ordine di miscelazione è un algoritmo ricorsivo che divide continuamente un elenco a metà. Se l’elenco è vuoto o ha un singolo elemento, è ordinato per definizione (il caso base). Se l’elenco ha più di un oggetto, dividiamo la lista e invulgatamente invulgabile un ordine di miscelazione per entrambe le metà. Una volta ordinate le due metà, viene eseguita l’operazione fondamentale, chiamata miscela. Il mix è il processo di scattare due elenchi ordinati più piccoli e combinarli su un unico elenco nuovo e ordinato. La figura 10 mostra la nostra lista di esempio di famiglia in quanto è divisa da ordenamientoPorMezcla. La figura 11 mostra gli elenchi semplici, ora ordinati, come si uniscono di nuovo.

../_ Immagini / mergesorta.png

Figura 10: Divisione della lista in un ordine di missaggio

Figura 10: Divisione dell’elenco in un ordine di miscelazione

. ./_Immages/Mergesortb .png 3figura 11: elenchi come università di nuovo

Figura 11: elenchi come uniti di nuovo

La funzione ordenamientoPorMezcla mostrato in ActiveCode 1 inizia chiedendo la custodia di base. Se la lunghezza dell’elenco è inferiore o uguale a una, quindi abbiamo già un elenco ordinato e non è necessaria alcuna più elaborazione. Se, d’altra parte, la lunghezza è maggiore di una, quindi utilizziamo l’operazione slice di Python per estrarre le metà sinistra e destra. È importante tenere presente che la lista potrebbe non avere un certo numero di articoli. Che non importa, poiché le lunghezze saranno diverse al massimo in uno.

una volta la funzione nella metà sinistra ( Linee 8-9), si presume che siano ordinati. Il resto della funzione (linee 11-31) è responsabile della miscelazione dei due elenchi ordinati più piccoli in un elenco ordinato più ampio. Si noti che l’operazione di miscelazione individua nuovamente gli elementi nell’elenco originale (unaLista) uno alla volta prendendo ripetutamente l’elemento minimo degli elenchi ordinati.

La funzione ordenamientoPorMezcla è stato aumentato con un’istruzione print (LINEA 2) per mostrare il contenuto dell’elenco che viene ordinato all’inizio di ciascuno invocazione C’è anche un’istruzione print (LINE 32) per mostrare il processo di miscelazione. La stampa mostra il risultato dell’esecuzione della funzione con il nostro elenco di esempio. Si noti che l’elenco con gli elementi 44, 55 e 20 non sarà suddiviso in parti uguali. La prima divisione dà e il secondo giorno. È facile vedere come il processo di divisione produce occasionalmente un elenco che può essere miscelato immediatamente con altri elenchi ordinati.

Initializerunstop Invia suggerimenti indietro indietro

per analizzare la funzione ordenamientoPorMezcla, dobbiamo considerare i due diversi processi che costituiscono la sua attuazione. Innanzitutto, la lista è divisa in metà. Siamo già calcolati (in una ricerca binaria) che possiamo dividere un elenco a metà in un momento \ (\ log n \) dove n è la lunghezza della lista. Il secondo processo è la miscela. Ogni elemento nell’elenco verrà elaborato e inserito nell’elenco ordinato. Quindi l’operazione di miscelazione che si traduce in un elenco di N richiede n operazioni. Il risultato di questa analisi è che sono fatti \ (\ log n \) divisioni, ciascuno dei quali costi \ (n \) per un totale di \ (n \ log n \) operazioni. Un ordine di miscelazione è un algoritmo \ (o (n \ log n) \).

Ricorda che l’operatore di partizione è \ (o (k) \) in cui K è la dimensione della partizione. Per garantire che ordenamientoPorMezcla be \ (o (n \ log n) \) Dovremo rimuovere l’operatore di partizione. Ancora una volta, questo è possibile se passiamo semplicemente gli indici iniziali e finali insieme all’elenco quando facciamo la chiamata ricorsiva. Lasciamo questo come esercizio fisico.

È importante notare che la funzione ordenamientoPorMezcla richiede spazio aggiuntivo per memorizzare le due metà poiché vengono estratte con le operazioni di partizione. Questo spazio aggiuntivo può essere un fattore critico se l’elenco è grande e può rendere problematico a questo ordine quando si lavora su set di dati di grandi dimensioni.

Autovalutazione

    Q-2: dato il seguente elenco di numeri: quale delle seguenti risposte corrisponde all’elenco che verrà ordinata dopo 3 chiamate ricorsive alla moderazione?

  • Questa è la seconda metà della lista.
  • Sì, OrderORMEZCLA continuerà a spostarsi in modo ricorsivo verso l’avvio dell’elenco finché non si arresta con il caso base.
  • Ricorda che OrderPormezCla non funziona sulla metà della metà della lista fino a quando non funziona La metà destra è completamente ordinata.
  • Questa è l’elenco dopo 4 chiamate ricorsive
    q-3: dato il seguente elenco di numeri : Quale delle seguenti risposte corrisponde alle prime due annunci che saranno mescolati?

  • e
  • I primi due elenchi misti saranno elenchi di base, non abbiamo ancora raggiunto un caso base.
  • e
  • Questi saranno gli ultimi Due elenchi misti
  • e
  • Gli elenchi e sono i primi due casi base trovati ordinando la memoria e, pertanto, saranno i primi due elenchi misti.
  • e
  • Sebbene 9 e 16 siano valori vicini, sono in diverse metà dall’elenco dalla prima partizione.

Leave a Comment

Il tuo indirizzo email non sarà pubblicato. I campi obbligatori sono contrassegnati *