Programma Python per Merge Sort

Pubblicato: 2023-01-31

Come linguaggio di programmazione multi-paradigma con un approccio di progettazione strutturato e orientato agli oggetti e una sintassi e una grammatica semplici e ordinate, Python sta rapidamente emergendo come il linguaggio preferito dai programmatori che lavorano su progetti di varia complessità e scala.

Python fornisce una libreria modulare di algoritmi predefiniti che consente ai suoi utenti di eseguire varie operazioni che possono aiutarli a raggiungere il loro compito in sé e per sé o servire come passo lungo la strada per raggiungere un obiettivo più ampio e più complesso. Uno degli algoritmi di questo tipo più popolari è quello che abilita la funzionalità Merge Sort.

Sommario

Che cos'è Merge Sort?

È una tecnica di ordinamento generica che consente agli utenti di prendere un set di dati casuale di qualsiasi tipo e da qualsiasi fonte e di dividerlo in fasi ripetitive fino a quando non viene scomposto nei suoi singoli componenti: una tecnica ricorsiva, comunemente indicata come " metodo divide et impera.

L'algoritmo quindi mette insieme i singoli componenti, sempre in fasi ripetitive, ma li ordina in una sequenza logica prestabilita in ogni fase lungo il percorso, utilizzando il confronto di base e lo scambio fino a quando l'intera serie di dati non viene ricostituita nella sequenza logica desiderata .

Dai un'occhiata agli altri nostri corsi di scienza dei dati su upGrad.

Tecnica divide et impera

Prendi, ad esempio, un set di dati casuale di lettere dell'alfabeto: N, H, V, B, Q, D, Z, R.

Passaggio 1 : il set di dati originale viene prima suddiviso in due gruppi come segue:

N, H, V, B Q, D, Z, R

Passaggio 2 : entrambi gli array risultanti vengono ulteriormente suddivisi come segue:

N, HV , BQ, DZ, R

Passaggio 3 : infine, tutti e quattro gli array vengono ulteriormente sputati fino a quando l'intera serie di dati non viene scomposta nei suoi singoli componenti:

N H V B Q D Z R

Il processo quindi si inverte e i singoli punti dati ora iniziano a fondersi in modo graduale. Ma nel corso di questo processo di fusione, ogni elemento in ogni sottoarray viene valutato e scambiato in modo che si risolva in una sequenza logica (ordine alfabetico), come segue:

Passaggio 4 : i singoli elementi si uniscono in coppie mentre si scambiano le posizioni come richiesto per formare la sequenza corretta:

H, NB , VD, QR , Z

Passaggio 5 : il processo ricorsivo di fusione e ordinamento continua fino all'iterazione successiva:

B, H, N, V ​​D, Q, R, Z

Passaggio 6 : l'intera serie di dati viene infine ricostituita nel suo ordine logico alfabetico:

B, D, H, N, Q, R, V, Z

Esplora i nostri popolari corsi di scienza dei dati

Executive Post Graduate Program in Data Science presso IIITB Programma di certificazione professionale in Data Science per il processo decisionale aziendale Master of Science in Data Science presso l'Università dell'Arizona
Programma di certificazione avanzata in Data Science da IIITB Programma di certificazione professionale in scienza dei dati e analisi aziendale presso l'Università del Maryland Corsi di scienza dei dati

Unisci implementazioni di ordinamento

Esistono due approcci all'implementazione di Merge Sort in Python. L'approccio top-down e l'approccio bottom-up.

Approccio dall 'alto verso il basso:

L'approccio top-down più comunemente utilizzato è quello sopra descritto. Richiede più tempo e utilizza più memoria ed è quindi inefficiente quando si lavora con set di dati più piccoli. Tuttavia, è molto più affidabile, in particolare se applicato a set di dati di grandi dimensioni.

Leggi i nostri popolari articoli sulla scienza dei dati

Percorso di carriera nella scienza dei dati: una guida completa alla carriera Crescita della carriera nella scienza dei dati: il futuro del lavoro è qui Perché la scienza dei dati è importante? 8 modi in cui la scienza dei dati apporta valore al business
Rilevanza della scienza dei dati per i manager Il foglio informativo definitivo sulla scienza dei dati che ogni scienziato di dati dovrebbe avere I 6 motivi principali per cui dovresti diventare un data scientist
Un giorno nella vita dei data scientist: cosa fanno? Mito sfatato: la scienza dei dati non ha bisogno di codifica Business Intelligence vs Data Science: quali sono le differenze?

Codice di input:

def merge_sort (inp_arr):

dimensione = len(inp_arr)

se dimensione > 1:

mezzo = taglia // 2

left_arr = inp_arr(:middle)

destra_arr = inp_arr(centro:)

merge_sort(sinistra_arr)

unisci _ordina(right_arr)

io = 0

j = 0

K = 0

(Dove i e j sono gli iteratori per attraversare rispettivamente la metà sinistra e destra della serie di dati e k è l'iteratore della serie di dati complessiva).

dimensione_sinistra = len(arr_sinistra)

dimensione_destra = len(arr_destra)

mentre i < dimensione_sinistra e j < dimensione destra:

se arr_sinistra(i) < arr_destra (j):

inp_arr(k) – left_arr(i)

io >= 1

altro:

inp_arr(k) = right_arr (j)

j += 1

k += 1

mentre i < dimensione_sinistra:

inp_arr (k) = left_arr(i)

io += 1

k += 1

mentre j < dimensione_destra:

inp_arr (k) = right_arr(j)

j += 1

k += 1

inp_arr = (N, H, V, B, Q, D, Z, R)

print(:Input Array:\n”)

stampa(inp_arr)

merge_sort (inp_arr)

print("Array ordinato:\n")

stampa (inp_arr)

Produzione:

Array di input: N, H, V, B, Q, D, Z, R

Array di uscita: B, D, H, N, Q, R, V, Z

Approccio dal basso:

L'approccio dal basso verso l'alto è più rapido, utilizza meno memoria e funziona in modo efficiente con set di dati più piccoli, ma può incorrere in problemi quando si lavora con set di dati di grandi dimensioni. È quindi usato meno frequentemente.

Codice di input:

def unisci(sinistra, destra):

risultato = [] x, y = 0, 0

per k in range(0, len(sinistra) + len(destra)):

if i == len(sinistra): # if alla fine del 1° tempo,

result.append(right[j]) # somma tutti i valori della seconda metà

j += 1

elif j == len(right): # if alla fine del 2° tempo,

result.append(left[x]) # somma tutti i valori della prima metà

io += 1

elif destra[j] < sinistra[i]:

risultato.append(right[j])

j += 1

altro:

risultato.append(left[i])

io += 1

risultato di ritorno

def mergesort(ar_list):

lunghezza = len(ar_list)

dimensione = 1

mentre dimensione < lunghezza:

size+=size # inizializza a 2 come descritto

per pos in range(0, lunghezza, dimensione):

inizio = pos

mid = pos + int(dimensione / 2)

fine = posizione + dimensione

left = ar_list[ start : mid ] right = ar_list[ mid : end ]

ar_list[start:end] = merge(sinistra, destra)

restituisce ar_list

ar_list = [N, H, V, B, Q, D, Z, R] print(mergesort(ar_list))

Produzione:

Array di input: N, H, V, B, Q, D, Z, R

Array di uscita: B, D, H, N, Q, R, V, Z

Implementazione Merge Sort applicata a set di dati reali più complessi

Applichiamo l'approccio dall'alto verso il basso a quattro veicoli fuoristrada casuali in India:

Marca

Modello

Prezzo franco showroom in Rs Crore

Jeep attaccabrighe 0,58
Guado Cercare di sforzarsi 0,35
Giaguaro Land Rover Range Rover Sport 2.42
Mercedesbenz Classe G 1.76

Codice di input:

classe Auto:

def __init__(self, marca, modello, prezzo):

self.marca = marca

self.modello = modello

self.prezzo = prezzo

def __str__(self):

return str.format("Marca: {}, Modello: {}, Prezzo: {}", self.brand,

self.modello, self.prezzo)

def merge(lista1, i, j, k, comp_fun):

copia_sinistra = lista1[i:k + 1]

r_sottolista = lista1[k+1:r+1]

left_copy_index = 0

j_sublist_index = 0

indice_ordinato = i

mentre left_copy_index < len(left_copy) ej_sublist_index <

len(j_sublista):

if comp_fun(left_copy[left_copy_index], j_sublist[j_sublist_index]):

lista1[indice_ordinato] = copia_sinistra[indice_copia_sinistra]

left_copy_index = left_copy_index + 1

altro :

lista1[indice_ordinato] = j_sottolista[j_sottolista_indice]

j_sublist_index = j_sublist_index + 1

indice_ordinato = indice_ordinato + 1

while left_copy_index < len(left_copy):

lista1[indice_ordinato] = copia_sinistra[indice_copia_sinistra]

left_copy_index = left_copy_index + 1

indice_ordinato = indice_ordinato + 1

while j_sublist_index < len(j_sublist):

lista1[indice_ordinato] = j_sottolista[j_sottolista_indice]

j_sublist_index = j_sublist_index + 1

indice_ordinato = indice_ordinato + 1

def merge_sort(lista1, i, j, comp_fun):

se io >= j:

Restituzione

k = (io + j)//2

merge_sort(lista1, i, k, comp_fun)

merge_sort(lista1, k + 1, j, comp_fun)

merge(lista1,i, j, k, comp_fun)

car1 = Auto(“Jeep”, “Wrangler”, 0.58)

car2 = Auto(“Ford”, “Endeavour”, 0.35)

car3 = Auto("Jaguar Land Rover", "Range Rover Sport", 1.76)

car4 = Auto(“Mercedes Benz”, “Classe G”, 2.42)

lista1 = [auto1, auto2, auto3, auto4]

merge_sort(list1, 0, len(list1) -1, lambda autoA, autoB: autoA.marca < autoB.marca)

stampa ("Automobili ordinate per marca:")

per auto inlista1:

stampa (auto)

stampa ()

merge_sort(list1, 0, len(list1) -1, lambda carA, carB: carA.price< carB.price)

stampa ("Automobili ordinate per prezzo:")

per auto inlista1:

stampa (auto)

Produzione:

Auto ordinate per marca:

Ford Endeavour

Jaguar Land Rover Range Rover Sport

Jeep Wrangler

Mercedes Benz Classe G

Auto ordinate per prezzo:

Ford Endeavour

Jeep Wrangler

Jaguar Land Rover Range Rover

Mercedes Benz Classe G

Puoi apprendere aspetti sia teorici che pratici di Python con il certificato professionale di upGrad in Data Science e Business Analytics dell'Università del Maryland. Questo corso ti aiuta a imparare Python da zero. Anche se sei nuovo alla programmazione e alla codifica, upGrad ti offrirà un corso preparatorio di due settimane in modo che tu possa apprendere le basi della programmazione. imparerai a conoscere vari strumenti come Python, SQL, mentre lavori su più progetti di settore.

Vuoi condividere questo articolo?

Pianifica ora la tua carriera nello sviluppo software!

Richiedi il programma di certificazione professionale in Data Science e Business Analytics