Programul Python pentru sortare prin îmbinare
Publicat: 2023-01-31Fiind un limbaj de programare cu mai multe paradigme, cu o abordare de proiectare structurată, orientată pe obiecte și sintaxă și gramatică simple și neaglomerate, Python devine rapid ca limbajul de alegere pentru programatorii care lucrează la proiecte de complexitate și scară variate.
Python oferă o bibliotecă modulară de algoritmi pre-construiți, care le permite utilizatorilor săi să efectueze diverse operațiuni care îi pot ajuta să-și îndeplinească sarcina în sine sau să servească ca un pas pe calea atingerii unui obiectiv mai mare și mai complex. Unul dintre cei mai populari astfel de algoritmi este unul care permite funcționalitatea Merge Sort.
Cuprins
Ce este Merge Sort?
Este o tehnică de sortare de uz general, care permite utilizatorilor să ia un set de date aleatoriu de orice tip și din orice sursă și să-l împartă în etape repetitive până când, în cele din urmă, este defalcat în componentele sale individuale - o tehnică recursivă, denumită în mod obișnuit „ metoda împărțiți și cuceriți.
Algoritmul reunește apoi componentele individuale – din nou în etape repetitive – dar le sortează într-o secvență logică prestabilită la fiecare etapă de-a lungul drumului, folosind comparația de bază și schimbarea până când întreaga serie de date este reconstituită în secvența logică dorită. .
Consultați celelalte cursuri ale noastre de știință a datelor la upGrad.
Tehnica Divide and Conquer
Luați, de exemplu, un set de date aleatoriu de litere ale alfabetului: N, H, V, B, Q, D, Z, R.
Pasul 1 : Setul de date original este mai întâi împărțit în două grupuri, după cum urmează:
N, H, V, B Q, D, Z, R
Pasul 2 : Ambele matrice rezultate sunt subdivizate în continuare după cum urmează:
N, H V, B Q, D Z, R
Pasul 3 : În cele din urmă, toate cele patru matrice sunt în continuare scuipat până când întreaga serie de date este împărțită în componentele sale individuale:
N H V B Q D Z R
Procesul se inversează, iar punctele de date individuale încep acum să se îmbine într-o manieră în etape. Dar pe parcursul acestui proces de fuziune, fiecare element din fiecare sub-matrice este evaluat și schimbat, astfel încât să se ordoneze într-o secvență logică (ordine alfabetică), după cum urmează:
Pasul 4 : elementele individuale se îmbină în perechi în timp ce schimbă pozițiile după cum este necesar pentru a forma secvența corectă:
H, N B, V D, Q R, Z
Pasul 5 : Procesul recursiv de îmbinare și sortare continuă la următoarea iterație:
B, H, N, V D, Q, R, Z
Pasul 6 : Întreaga serie de date este în cele din urmă reconstituită în ordinea sa logică alfabetică:
B, D, H, N, Q, R, V, Z
Explorați cursurile noastre populare de știință a datelor
Program Executive Postuniversitar în Știința Datelor de la IIITB | Program de certificat profesional în știința datelor pentru luarea deciziilor de afaceri | Master în Știința Datelor de la Universitatea din Arizona |
Program de certificat avansat în știința datelor de la IIITB | Program de certificat profesional în știința datelor și analiză de afaceri de la Universitatea din Maryland | Cursuri de știință a datelor |
Implementări de sortare îmbinate
Există două abordări pentru implementarea Merge Sort în Python. Abordarea de sus în jos și abordarea de jos în sus.
Abordare de sus în jos:
Abordarea de sus în jos mai des folosită este cea descrisă mai sus. Durează mai mult și consumă mai multă memorie și, prin urmare, este ineficient atunci când lucrați cu seturi de date mai mici. Cu toate acestea, este mult mai fiabil, în special atunci când este aplicat la seturi de date mari.
Citiți articolele noastre populare despre știința datelor
Calea de carieră în știința datelor: un ghid cuprinzător de carieră | Creșterea carierei în știința datelor: viitorul muncii este aici | De ce este importantă știința datelor? 8 moduri în care știința datelor aduce valoare afacerii |
Relevanța științei datelor pentru manageri | Ultima fișă pentru știința datelor pe care ar trebui să o aibă fiecare cercetător de date | Top 6 motive pentru care ar trebui să devii un Data Scientist |
O zi în viața omului de știință a datelor: ce fac ei? | Mitul distrus: Știința datelor nu are nevoie de codare | Business Intelligence vs Data Science: Care sunt diferențele? |
Cod de intrare:
def merge_sort (inp_arr):
dimensiune = len(inp_arr)
dacă dimensiunea > 1:
mijloc = dimensiune // 2
left_arr = inp_arr(:middle)
dreapta_arr = inp_arr(mijloc:)
merge_sort(left_arr)
merge _sort(right_arr)
i = 0
j = 0
k = 0
(Unde i și j sunt iteratorii pentru parcurgerea jumătăților din stânga și din dreapta ale seriei de date, respectiv, și k este iteratorul seriei totale de date).
dimensiune_stânga = len(arr_stânga)
right _size = len(right_arr)
în timp ce i < mărimea_stânga și j < dimensiunea dreaptă:
dacă stânga_arr(i) < right_arr (j):
inp_arr(k) – left_arr(i)
eu >= 1
altceva:
inp_arr(k) = right_arr (j)
j += 1
k += 1
în timp ce i < left_size:
inp_arr (k) = left_arr(i)
i += 1
k += 1
în timp ce j < mărimea_dreapta:
inp_arr (k) = right_arr(j)
j += 1
k += 1
inp_arr = (N, H, V, B, Q, D, Z, R)
print(:Input Array:\n”)
print(inp_arr)
merge_sort (inp_arr)
print(„Matrice sortată:\n”)
imprimare (inp_arr)
Ieșire:
Matrice de intrare: N, H, V, B, Q, D, Z, R
Matrice de ieșire: B, D, H, N, Q, R, V, Z
Abordarea de jos în sus:
Abordarea de jos în sus este mai rapidă, utilizează mai puțină memorie și funcționează eficient cu seturi de date mai mici, dar poate întâmpina probleme atunci când lucrați cu seturi de date mari. Prin urmare, este utilizat mai rar.
Cod de intrare:
def merge(stânga, dreapta):
rezultat = [] x, y = 0, 0
pentru k în interval (0, len(stânga) + len(dreapta)):
if i == len(stânga): # dacă la sfârșitul primei reprize,
result.append(right[j]) # adaugă toate valorile din a doua jumătate
j += 1
elif j == len(dreapta): # dacă la sfârșitul celei de-a doua jumătăți,
result.append(left[x]) # adaugă toate valorile din prima jumătate
i += 1
elif dreapta[j] < stânga[i]:
result.append(dreapta[j])
j += 1
altceva:
rezultat.append(stânga[i])
i += 1
returnează rezultatul
def mergesort(ar_list):
lungime = len(ar_list)
dimensiune = 1
în timp ce dimensiunea < lungime:
size+=size # se inițializează la 2 așa cum este descris
pentru poziție în interval (0, lungime, dimensiune):
start = poz
mid = pos + int (dimensiune / 2)
sfârşit = poz + mărime
stânga = lista_ar[ începutul: mijlocul] dreapta = lista_ar[ mijlocul: sfârşitul]
ar_list[start:end] = îmbinare(stânga, dreapta)
returnează ar_list
ar_list = [N, H, V, B, Q, D, Z, R] print(mergesort(ar_list))
Ieșire:
Matrice de intrare: N, H, V, B, Q, D, Z, R
Matrice de ieșire: B, D, H, N, Q, R, V, Z
Implementarea Merge Sort aplicată la seturi de date mai complexe, din viața reală
Să aplicăm abordarea de sus în jos la patru vehicule de teren aleatorii din India:
Marca | Model | Prețul din ex-showroom în Rs Crore |
Jeep | Wrangler | 0,58 |
Vad | Efort | 0,35 |
Jaguar Land Rover | Range Rover Sport | 2.42 |
Mercedes Benz | Clasa G | 1,76 |
Cod de intrare:
masina de clasa :
def __init__(self, brand, model, price):
self.brand = brand
self.model = model
self.price = pret
def __str__(self):
return str.format(„Brand: {}, Model: {}, Pret: {}”, self.brand,
auto.model, auto.pret)
def merge(list1, i, j, k, comp_fun):
stânga_copie = list1[i:k + 1]
r_sublist = list1[k+1:r+1]
index_copie_stânga = 0
j_sublist_index = 0
index_sortat = i
în timp ce left_copy_index < len(left_copy) șij_sublist_index <
len(j_sublist):
dacă comp_fun(left_copy[left_copy_index], j_sublist[j_sublist_index]):
list1[sorted_index] = copie_stânga[index_copie_stânga]
index_copie_stânga = index_copie_stânga + 1
altceva :
list1[sorted_index] = j_sublist[j_sublist_index]
j_sublist_index = j_sublist_index + 1
index_sortat = index_sortat + 1
în timp ce left_copy_index < len(left_copy):
list1[sorted_index] = copie_stânga[index_copie_stânga]
index_copie_stânga = index_copie_stânga + 1
index_sortat = index_sortat + 1
în timp ce j_sublist_index < len(j_sublist):
list1[sorted_index] = j_sublist[j_sublist_index]
j_sublist_index = j_sublist_index + 1
index_sortat = index_sortat + 1
def merge_sort(list1, i, j, comp_fun):
dacă i >= j:
întoarcere
k = (i + j)//2
merge_sort(list1, i, k, comp_fun)
merge_sort(lista1, k + 1, j, comp_fun)
merge(list1,i, j, k, comp_fun)
mașină1 = Mașină ("Jeep", "Wrangler", 0,58)
mașină2 = Mașină(„Ford”, „Endeavour”, 0,35)
mașină3 = Mașină(„Jaguar Land Rover”, „Range Rover Sport”, 1.76)
mașină4 = Mașină(„Mercedes Benz”, „Clasa G”, 2.42)
list1 = [mașină1, mașină2, mașină3, mașină4]
merge_sort(lista1, 0, len(lista1) -1, lambda carA, carB: carA.brand < carB.brand)
print („Mașini sortate după marcă:”)
pentru mașina dinlista 1:
imprimare (masina)
imprimare ()
merge_sort(lista1, 0, len(lista1) -1, lambda carA, carB: carA.price< carB.price)
print („Mașini sortate după preț:”)
pentru mașina dinlista 1:
imprimare (masina)
Ieșire:
Mașini sortate după marcă:
Ford Endeavour
Jaguar Land Rover Range Rover Sport
Jeep Wrangler
Mercedes Benz Clasa G
Mașini sortate după preț:
Ford Endeavour
Jeep Wrangler
Jaguar Land Rover Range Rover
Mercedes Benz Clasa G
Puteți învăța atât aspectele teoretice, cât și cele practice ale Python cu certificatul profesional upGrad în știința datelor și analiză de afaceri de la Universitatea din Maryland. Acest curs vă ajută să învățați Python de la zero. Chiar dacă sunteți nou în programare și codare, upGrad vă va oferi un curs pregătitor de două săptămâni, astfel încât să puteți învăța elementele de bază ale programării. veți afla despre diverse instrumente precum Python, SQL, în timp ce lucrați la mai multe proiecte din industrie.