Compari metodele
Identifici asemănările și diferențele dintre cele trei metode.
Comparații, eficiență, complexitate și alegerea metodei potrivite
Identifici asemănările și diferențele dintre cele trei metode.
Interpretezi O(n²), O(n+m) și rolul memoriei.
Explici cazul favorabil, mediu și nefavorabil.
Alegi metoda potrivită în funcție de n, domeniu și proprietățile listei.
Care este ideea centrală a lecției?
În lecțiile anterioare am studiat trei metode. Selecția minimului și metoda bulelor sunt metode bazate pe comparații. Lista de frecvențe exploatează proprietățile domeniului valorilor și numără aparițiile.
Selecția minimului face aproximativ n(n-1)/2 comparații indiferent de ordinea inițială, dar numărul interschimbărilor poate fi mai mic. Bulele fără oprire anticipată are ordin O(n²). Cu oprire anticipată, o listă deja sortată poate fi tratată în O(n).
Dacă m este dimensiunea domeniului, timpul este O(n+m), iar memoria suplimentară este O(m). Metoda este atractivă când domeniul este mic și cunoscut.
Nu există o singură metodă potrivită pentru orice listă. Alegerea depinde de proprietățile datelor: dimensiunea listei, domeniul valorilor și cât de aproape este lista de ordinea finală.
Alege o situație și observă ce proprietate a datelor contează.
Alege o situație.
Putem număra comparațiile și interschimbările pentru a realiza un experiment. Aceste instrumente nu înlocuiesc analiza teoretică, ci o completează.
def selectie(a):
comparatii = 0
interschimbari = 0
n = len(a)
for i in range(n - 1):
poz_min = i
for j in range(i + 1, n):
comparatii += 1
if a[j] < a[poz_min]:
poz_min = j
if poz_min != i:
a[i], a[poz_min] = a[poz_min], a[i]
interschimbari += 1
return comparatii, interschimbari
def bule(a):
comparatii = 0
interschimbari = 0
n = len(a)
for i in range(n - 1):
schimbat = False
for j in range(n - 1 - i):
comparatii += 1
if a[j] > a[j + 1]:
a[j], a[j + 1] = a[j + 1], a[j]
interschimbari += 1
schimbat = True
if not schimbat:
break
return comparatii, interschimbari
Algoritm Comparare
alege aceeași listă de test
aplică selecția minimului și numără comparațiile și interschimbările
aplică metoda bulelor și numără comparațiile și interschimbările
dacă domeniul valorilor este mic și cunoscut atunci
construiește lista de frecvențe
compară timpul și memoria necesare
sfârșit dacă
interpretează rezultatele și alege metoda potrivită
SFÂRȘIT ALGORITM
n, domeniu, repetări și ordinea inițială.Pentru 200 de punctaje întregi între 0 și 100, compară selecția minimului, bulele și frecvențele.
n=200, iar domeniul are m=101 valori posibile. Selecția minimului are 200·199/2 = 19 900 comparații. Bulele are ordin O(n²), iar numărul exact depinde de date dacă folosim oprirea anticipată. Frecvențele necesită parcurgerea celor 200 de valori și a domeniului de 101 valori, apoi reconstrucția rezultatelor.
Pentru punctaje între 0 și 100, lista de frecvențe este o alegere foarte bună deoarece domeniul este mic și cunoscut. Pentru un domeniu enorm, această metodă poate deveni nepotrivită din punctul de vedere al memoriei.
Testează o listă aleatorie, una sortată, una descrescătoare, una cu valori egale și una aproape sortată. La bule, urmărește oprirea anticipată; la frecvențe, urmărește dimensiunea domeniului.
Selecția minimului și bulele sunt metode de ordin pătratic în cazul general. Frecvențele folosesc domeniul restrâns și au ordin O(n+m). Alegerea corectă se bazează pe timp, memorie și proprietățile datelor.
1. Ce metodă folosește comparații între vecini?
2. Ce ordin are selecția minimului în cazul general?
3. Ce ordin are frecvențele?
4. Când sunt frecvențele potrivite?
5. Ce poate face bulele în cazul favorabil?
6. Ce trebuie păstrat identic într-un experiment?
primește o listă și, dacă domeniul permite, construiește frecvențele. Testează cel puțin cinci liste: aleatorie, sortată, descrescătoare, cu valori egale și aproape sortată. Pentru selecție și bule numără comparațiile și interschimbările. Pentru frecvențe explică n și m și justifică alegerea.
Recitește algoritmul, verifică testele și justifică alegerea metodei.