1 / 35

Curs 5 - Agenda

Curs 5 - Agenda. sortare interna “buble sort” sortare prin insertie sortare pri selectie naiva sistematica (“heap sort”) sortare prin interclasare (“merge sort”) sortare rapida (“quick sort”) cautare in liste liniare cautare binara – aspectul dinamic arbori AVL. Problema sortarii.

nia
Télécharger la présentation

Curs 5 - Agenda

An Image/Link below is provided (as is) to download presentation Download Policy: Content on the Website is provided to you AS IS for your information and personal use and may not be sold / licensed / shared on other websites without getting consent from its author. Content is provided to you AS IS for your information and personal use only. Download presentation by click this link. While downloading, if for some reason you are not able to download a presentation, the publisher may have deleted the file from their server. During download, if you can't get a presentation, the file might be deleted by the publisher.

E N D

Presentation Transcript


  1. Curs 5 - Agenda • sortare interna • “buble sort” • sortare prin insertie • sortare pri selectie • naiva • sistematica (“heap sort”) • sortare prin interclasare (“merge sort”) • sortare rapida (“quick sort”) • cautare • in liste liniare • cautare binara – aspectul dinamic • arbori AVL Algoritmica si programare

  2. Problema sortarii • Forma 1 • Intrare: n, (R0, . . . , Rn-1) cu cheile k0, . . . , kn-1 • Iesire: (R’0, . . . , R’n-1)astfel incit (R’0, . . . , R’n-1)este o permutare a (R0, . . . , Rn-1 ) si R’0.k0  . . .  R’n-1.kn-1 • Forma 2 • Intrare: n, (v0, . . . , vn-1) • Iesire: (w0, . . . , wn-1)astfel incit (w0, . . . , wn-1)este o permutare a (v0, . . . , vn-1), si w0  . . .  wn-1 • structura de date arraya[0..n-1] a[0] = v0, . . . , a[n-1] = vn-1 Algoritmica si programare

  3. Bubble sort I • idee: (i) 0  i < n-1  a[i]  a[i+1] • algoritm procedure bubbleSort (a, n) begin ultim  n-1 while ultim > 0 do ntemp  ultim – 1 ultim  0 for i  0 to ntemp do if a[i] > a[i+1] then swap(a[i], a[i+1]) ultim  i end Algoritmica si programare

  4. Bubble sort II • exemplu • analiza • cazul cel mai nefavorabil a[0] > a[1] > ... > a[n-1] TbubleSort(n) = O(n2) Algoritmica si programare

  5. Sortare prin insertie directa I • idee presupunem a[0..i-1] sortat insereaza a[i] astfel incit a[0..i] devine sortat • algoritm procedure insertSort(a, n) begin for i  1 to n-1 do j  i – 1 temp  a[i] while ((j  0) and (a[j] > temp)) do a[j+1]  a[j] j  j – 1 if (a[j+1]  temp) then a[j+1]  temp end Algoritmica si programare

  6. Sortare prin insertie directa II • exemplu • analiza • cazul cel mai nefavorabil a[0] > a[1] > ... > a[n-1] TinsertSort(n) = O(n2) Algoritmica si programare

  7. Sortare prin selectie • ideea de baza • pasul curent: selecteaza un element si-l duce pe pozitia sa finala din tabloul sortat • repeta pasul curent pana cnd toate elementele ajung pe locurile finale Algoritmica si programare

  8. Sortare prin selectie naiva • idee (i ) 0  i < n  a[i] = max{a[0],…,a[i]} • algoritm procedure naivSort(a, n) begin for i  n-1 downto 0 do imax  i for j  i-1 downto 0 do if (a[j] > a[imax]) then imax  j if (i  imax) then swap(a[i], a[imax]) end • complexitatea timp toate cazurile: TnaivSort(n) = Θ(n2) Algoritmica si programare

  9. "Heap sort" (sortare prin selectie sistematica) • etapa I • organizeaza tabloul ca un max-heap • initial tablou satisface proprietatea max-heap incepand cu n/2 • introduce in max-heap elementele de pe pozitiile n/2-1, n/2 -1, …, 1, 0 • etapa II • selecteaza elementul maxim si-l duce la locul lui prin interschimbare cu ultimul • micsoreaza cu 1 si apoi reface max-heapul • repeta pasii de mai sus pana cand toate elementele ajung pe locul lor Algoritmica si programare

  10. Operatia de introducere in heap al t-lea procedure insereazaAlTlea(a, n, t) begin j  t heap  false while ((2*j+1 < n) and not heap) do k  2*j+1 if ((k < n-1) and (a[k] < a[k+1])) then k  k+1 if (a[j] < a[k]) then swap(a[j], a[k]) j  k else heap  true end Algoritmica si programare

  11. "Heap sort" (sortare prin selectie sistematica) procedure heapSort(a, n) begin // construieste maxheap-ul for t  (n-1)/2 downto 0 do insereazaAlTlea(a, n, t) // elimina r  n-1 while (r > 0) do swap(a[0], a[r]) insereazaAlTlea(a, r, 0) r  r-1 end Algoritmica si programare

  12. "Heap sort" - complexitate • formarea heap-ului (pp. ) • eliminare din heap si refacere heap • complexitate algoritm de sortare Algoritmica si programare

  13. Timpul de executie empiric • Intel Pentium III 1.00 Ghz Algoritmica si programare

  14. Paradigma divide-et-impera • P(n): problema de dimensiune n • baza • daca n  n0 atunci rezolva P prin metode elementare • divide-et-impera • divide P in a probleme P1(n1), ..., Pa(na) cu ni  n/b, b > 1 • rezolvaP1(n1), ..., Pa(na) in aceeasi maniera si obtine solutiile S1, ..., Sa • asambleazaS1, ..., Sa pentru a obtine solutia S a problemei P Algoritmica si programare

  15. Paradigma divide-et-impera: algoritm procedure DivideEtImpera(P, n, S) begin if (n <= n0) then determina S prin metode elementare else imparte P in P1, ..., Pa DivideEtImpera(P1, n1, S1) ... DivideEtImpera(Pa, na, Sa) Asambleaza(S1, ..., Sa, S) end Algoritmica si programare

  16. Sortare prin interclasare (Merge sort) • generalizare: a[p..q] • baza: p  q • divide-et-impera • divide: m = [(p + q)/2] • subprobleme: a[p..m], a[m+1..q] • asamblare: interclaseaza subsecventele sortate a[p..m]sia[m+1..q] • initial memoreaza rezultatul interclasarii in temp • copie din temp[0..p+q-1] in a[p..q] • complexitate: • timp : T(n) = O(n log n) (T(n) = 2T(n/2)+n) • spatiu suplimentar: O(n) Algoritmica si programare

  17. Interclasarea a doua secvente sortate • problema: • date a[0]  a[1]  …  a[m-1], b[0]  b[1]  …  b[n-1], sa se construiasca c[0]  c[1]  …  c[m+n-1] a.i. ( k)((i)c[k]=a[i])  (j)c[k]=b[j]) • solutia • initial: i  0, j  0, k  0 • pasul curent: • daca a[i]  b[j] atunci c[k]  a[i], i  i+1 • daca a[i] > b[j] atunci c[k]  b[j], j  j+1 • k  k+1 • conditia de terminare: i > m-1 sau j > n-1 • daca e cazul, copie elementele din tabloul neterminat Algoritmica si programare

  18. Sortare rapida (Quick sort)  x  x x k q p • generalizare: a[p..q] • baza: p  q • divide-et-impera • divide: determina k intre p si q prin interschimbari a.i. dupa determinarea lui k avem: • p  i  k  a[i]  a[k] • k < j  q  a[k]  a[j] • subprobleme: a[p..k-1], a[k+1..q] • asamblare: nu exista Algoritmica si programare

  19. Quick sort: partitionare • initial: • x  a[p] (se poate alege x arbitrar din a[p..q]) • i  p+1 ; j q • pasul curent: • daca a[i]  xatunci i  i+1 • daca a[j]  xatunci j  j-1 • daca a[i] > x > a[j]si i < j atunci • swap(a[i], a[j]) • i  i+1 • j  j-1 • terminare: conditiai > j operatii k i-1 swap(a[p], a[k]) Algoritmica si programare

  20. Cautare • in liste liniare • cautare binara – aspectul dinamic • arbori AVL Algoritmica si programare

  21. Problema cautarii • aspectul static U multime univers S  U • operatia de cautare: Instanta: a U Intrebare: a S? • aspectul dinamic • operatia de inserare Intrare: x U, S Iesire: S  {x} • operatia de stergere Intrare: x U, S Iesire: S  {x} Algoritmica si programare

  22. Cautare in liste liniare - complexitate Algoritmica si programare

  23. Cautare binara – aspect static - context • multimea univers este total ordonata: (U, ) • structura de data utilizata: • arrays[0..n-1] • s[0]< ... < s[n-1] Algoritmica si programare

  24. Cautare binara – aspect static - algoritm function Poz(s, n, a) begin p  0; q  n-1 m  [(p+q)/2] while (s[m] != a && p < q) do if (a < s[m]) then q  m-1 else p  m+1 m  [(p+q)/2] if (s[m] = a) then return m else return -1; end Algoritmica si programare

  25. Arborele binar asociat cautarii binare m T(m+1,q) T(p,m-1) 2 0 4 1 3 5 T(p,q) T = T(0,n-1) n = 6 Algoritmica si programare

  26. Cautare binara: aspect dinamic • arbore binar de cautare • arbore binar cu proprietatea ca pentru orice nod v, valorile memorate in subarborele la stinga lui v < valoarea din v < valorile memorate in subarborele la dreapta lui v. Algoritmica si programare

  27. Cautare binara: aspect dinamic - cautare function Poz(t, a) begin p  t while (p != NULL && p->val != a) do if (a < p->val) then p  p->stg else p  p->drp return p end Algoritmica si programare

  28. Cautare binara: aspect dinamic - inserare procedure insArbBinCautare(t, x) begin if (t = NULL) then t  (x) /*(x) e arborele cu 1 nod */ else p  t while (p != NULL) do predp  p if (x < p->val) then p  p->stg else if (x > p->val)then p  p->drp else p  NULL if (predp->val != x) then if (x < predp->val) then adaugaxca fiu stinga a luipredp else adaugaxca fiu dreapta a lui predp end Algoritmica si programare

  29. Cautare binara: aspect dinamic - eliminare • se cauta pentru x in arborele t; daca-l gaseste se disting cazurile: • cazul 1: nodul p care memoreaza x nu are fii • cazul 2: nodul p care memoreaza x are un singur fiu • cazul 3: nodul p care memoreaza x are ambii fii • determina nodul q care memoreaza cea mai mare valoare y mai mica decit x (coboara din p la stinga si apoi coboara la dreapta cit se poate) • interschimba valorile din p si q • sterge qca in cazul 1 sau 2 Algoritmica si programare

  30. Cautare binara: aspect dinamic - eliminare • cazul 1 sau 2 procedure elimCaz1sau2(t, predp, p) begin if (p = t) then t devine vid sau unicul fiu al lui t devine radacina else if (p->stg = NULL) then inlocuieste in predp pe p cu p->drp else inlocuiesteinpredppepcup->stg end Algoritmica si programare

  31. Cautare binara: aspect dinamic - eliminare procedure elimArbBinCautare(t, x) begin if (t != NULL) then p  t while (p != NULL && p->val != x) do predp  p if (x < p->val) then p  p->stg else p  p->drp if (p != NULL) if (p->stg = NULL || p->drp = NULL) then elimCaz1sau2(t, predp, p) else q  p->stg; predq  p while (q->drp != NULL) predq  q; q  q->drp p->val  q->val elimCaz1sau2(t, predq, q) end Algoritmica si programare

  32. Degenerarea cautarii binare in cautare liniara 20 elimina(10) elimina(50) elimina(0) 20 20 40 0 40 0 40 30 50 30 50 30 10 50 20 insereaza(32) insereaza(35) 20 20 40 40 40 30 30 30 35 35 32 Algoritmica si programare

  33. Arbori AVL • un arbore binar de cautare t este un arbore AVL-echilibrat daca pentru orice virf v, h(vstg)  h(vdrp) 1 • Lema t AVL-echilibrat  h(t)  (log n). Algoritmica si programare

  34. Arbori AVL • Teorema Clasa arborilor AVL-echilibrati este O(log n) stabila. • algoritmul de inserare • nodurile au memorate si factorii de echilibrare ( {1, 0, 1}) • se memoreaza drumul de la radacina la nodul adaugat intr-o stiva (O(log n)) • se parcurge drumul memorat in stiva in sens invers si se reechilibeaza nodurile dezichilibrate cu una dintre operatiile: rotatie stinga/dreapta simpla/dubla (O(log n)). Algoritmica si programare

  35. Rotatii y x y x A C B C A B z y x D z x y A A B C D B C Rotatie dreapta simpla Rotatie dreapta dubla Algoritmica si programare

More Related