Sortarea și căutarea în Python

Dacă vi s-a dat o bucată de hârtie cu o listă de 1.000 de nume și vi sa cerut să găsiți un nume, dar această listă nu era în ordine (de exemplu, în ordine alfabetică), ar fi foarte frustrant, nu-i așa? Punerea în ordine a acestei liste, deși durează mult, face ca găsirea numelui să fie mult mai ușoară. Așadar, lucrurile în ordine este o dorință naturală pe care o avem ființele umane, iar căutarea în această listă ar face cu mult mai puțin efort decât căutarea unei liste neordonate.

Să ne îndreptăm spre lumea calculatoarelor, unde listele de căutare ar trebui să fie foarte mari, iar performanța ar putea fi afectată chiar și cu calculatoare rapide. În acest caz, având o potrivire sortarea și căutarea algoritmul ar fi o soluție la o astfel de problemă. In timp ce triere este de a pune în ordine o listă de valori, in cautarea este procesul de identificare a poziției unei valori într-o listă.

Pentru a clarifica cât de important ar fi această problemă, permiteți-mi să vă arăt ceea ce Donald Knuth, om de știință american, matematician și profesor emerit de la Universitatea Stanford menționat în Arta Programării Calculatoarelor, vol.3, Sortare și Căutare, pagina 3:

Producătorii de calculatoare din anii 1960 au estimat că mai mult de 25% din timpul de funcționare pe computerele lor a fost cheltuit pe sortare, când toți clienții lor au fost luați în considerare. De fapt, au existat multe instalații în care sarcina de sortare a fost responsabilă pentru mai mult de jumătate din timpul de calcul. Din aceste statistici, putem concluziona că fie (i) există multe aplicații importante de sortare, fie (ii) multe persoane se sortează când nu ar trebui sau (iii) algoritmi de sortare ineficienți au fost utilizați în mod obișnuit.

În acest tutorial, voi descrie în mod specific Selectare sortare algoritmul (sortarea) și Căutarea liniară algoritm (căutare).

Selecția algoritmului de sortare

Selectare sortare algoritmul se bazează pe selectarea succesivă a valorilor minime sau maxime. Să presupunem că avem o listă pe care dorim să o sortim în ordine ascendentă (de la valori mai mici la cele mai mari). Cel mai mic element va fi la începutul listei, iar cel mai mare element va fi la sfârșitul listei. 

Să presupunem că lista originală arată după cum urmează:

| 7 | 5 | 3.5 | 4 | 3.1 |

Primul lucru pe care îl facem este să-l găsim minim valoare în listă, care este în cazul nostru 3.1

După ce a găsit valoarea minimă, schimb acea valoare minimă cu primul element din listă. Asta este, swap 3.1 cu 7. Lista va arata acum dupa cum urmeaza:

| 3.1 | 5 | 3.5 | 4 | 7 |

Acum că suntem siguri că primul element este în poziția corectă din listă, repetăm ​​pasul de mai sus (găsirea valorii minime) pornind de la al doilea element din listă. Putem observa că valoarea minimă din listă (pornind de la al doilea element) este 3.5. Acum schimbăm acum 3.5 cu 5. Lista devine acum după cum urmează:

| 3.1 | 3.5 | 5 | 4 | 7 |

În acest moment, suntem siguri că primul element și al doilea element sunt în pozițiile lor corecte.

Acum, verificăm valoarea minimă din restul listei, care începe de la al treilea element 5. Valoarea minimă din restul listei este 4, și acum îl schimbăm 5. Lista devine astfel:

| 3.1 | 3.5 | 4 | 5 | 7 |

Deci, acum suntem siguri că prima Trei elementele sunt în pozițiile corecte, iar procesul continuă astfel. 

Să vedem cum algoritmul Selection Selection este implementat în Python (bazat pe Isai Damier):

(aList)): cel mai mic = i pentru k în intervalul (i + 1, len (aList)): dacă aList [k] < aList[least]: least = k swap(aList, least, i) def swap(A, x, y): temp = A[x] A[x] = A[y] A[y] = temp

Să testați algoritmul adăugând următoarele instrucțiuni la sfârșitul scriptului de mai sus:

my_list = [5.76,4.7,25.3,4.6,32.4,55.3,52.3,7.6,7.3,86.7,43.5] selecțieSort (my_list) print my_list

În acest caz, ar trebui să obțineți următoarele rezultate:

[4,6, 4,7, 5,76, 7,3, 7,6, 25,3, 32,4, 43,5, 52,3, 55,3, 86,7]

Algoritmul de căutare liniar

Căutarea liniară algoritmul este un algoritm simplu, în care fiecare element din listă (pornind de la primul element) este investigat până când se găsește elementul necesar sau se ajunge la sfârșitul listei. 

Algoritmul de căutare liniară este implementat în Python după cum urmează (bazat pe Python School):

def lineSearch (element, my_list): găsit = Poziție falsă = 0 în timp ce poziția < len(my_list) and not found: if my_list[position] == item: found = True position = position + 1 return found

Să testăm codul. Introduceți următoarea instrucțiune la sfârșitul scriptului Python de mai sus:

'cauciuc'] element = intrare ('Ce element doriți să verificați în pungă?') itemFound = lineSearch (item, bag) dacă itemFound: print 'Da, elementul este în pungă' else: print 'Oops, elementul dvs. pare să nu fie în geantă'

Când introduceți intrare, asigurați-vă că se află între ghilimele simple sau duble (adică,. 'creion'). Dacă introduceți 'creion', de exemplu, ar trebui să obțineți următoarele rezultate:

Da, elementul este în pungă

Întrucât, dacă intri 'rigla' ca intrare, veți obține următoarea ieșire:

Hopa, elementul dvs. pare să nu fie în geantă

După cum se poate vedea, Python se dovedește din nou un limbaj de programare care facilitează programarea unor concepte algoritmice așa cum am făcut aici, care se ocupă cu triere și in cautarea algoritmi.

Este important de menționat că există și alte tipuri de algoritmi de sortare și căutare. Dacă doriți să vă implicați mai adânc în astfel de algoritmi folosind Python, vă puteți referi la această pagină.

Cod