Algoritmica si programare

Slides:



Advertisements
Similar presentations
Prof.Briciu Daniela Sc.cu cls. I-VIII Luna de Sus
Advertisements

Adobe photoshop.  De multe ori ne facem fotografii si unele nu le facem publice pentru ca ori am avut un cos in acel moment sau un alt aspect negativ.
Caracteristici ale corpurilor cu viata
POSTA ELECTRONICA Ana-Maria Tache Ioana Cristina Ciufu.
Februarie 2018 ASE Bucuresti
ACTIVITATEA 1 -,, PROFESOR IT LA PAPI’’
Subinterogari.
Oracle Academy Lead Adjunct
Funcţii Excel definite de utilizator (FDU) în VBA
Căutarea şi regăsirea informaţiei.
Castiga cel care etaleaza primul toate cartile!
PASII INSTALARII SISTEMULUI DE OPERARE
Metoda Backtracking Metoda Implementarea
Dispozitive de stocare
IF Clause prezentare.
Inteligenta Artificiala
Inteligenta Artificiala
Despre Topologie Ciprian Manolescu UCLA
Structura pipeline a unui procesor MIPS
Căutarea şi regăsirea informaţiei.
Şomerul…..
Paxos Made Simple Autor: Puşcaş Radu George
sau ecuaţiile diferenţiale ale mişcării unui SPM
Retele de calculatoare
CARBONUL.
Sistemul de salarizare pentru funcţionarii publici şi cele mai recente tendinţe ale reformei Germania.
METODA BACKTRACKING Examenul de bacalaureat 2012
Amplificatoare operationale Functia de transfer Laplace
Cursul 3 Cautare peste siruri problema cautarea naiva
Generarea modelelor fractale
CONVERSII INTRE SISTEME DE NUMERATIE
Curs Nr. 11 Utilizarea AG in invatarea regulilor de decizie
WebSite Social Tema 2 WebSite Social.
Problema rucsacului lacom
Tipuri structurate Tipul tablou
SUBNETAREA.
Algoritmi de aproximare definitii acoperirea unei multimi
Lucrarea aplicativa nr. 6
Inteligenta Artificiala
Web Form BuilDer Coffee Cup.
studiu de caz – adwords campanie servicii
Totul despre: Valentine’s day.
Curs 2 Structuri de date avansate pentru cautare 2-3 arbori B-arbori
DETERMINAREA ALCALINITATII SI PH-UL APELOR NATURALE
Sisteme de programe pentru timp real
Formatarea paragrafului
Funcții C/C++ continuare
TEMA 3 TRANZISTORUL BIPOLAR
Medii informatice utilizate pentru proiectare
Algoritmul lui Kruskal
INTERNET SERVICII INTERNET.
Inteligenta Artificiala
Mic ghid pentru crearea unei prezentari PowerPoint
Eclipsele de soare si de luna
Forms (Formulare).
Functia de documentare
Raspunsul la frecventa
Tehnologia informatiei Prof. ROMEO BOLOHAN
ARBORI BINARI DE CĂUTARE
Programarea in limbajul Java 2004 Lecturer: Gavrila Cristian
Inteligenta Artificiala
Realizarea prezentarilor cu Microsoft PowerPoint
Crearea unei aplicatii Windows Forms simple
Configurarea metodelor de management al calităţii în sectorul public
Implementarea listelor simplu inlantuite
Microsoft PowerPoint.
Comunicare in medii electronice
Tabele WEB.
ALGORITMI ŞI SCHEME LOGICE
Administrare Oracle 9i Suport de curs
Presentation transcript:

Algoritmica si programare 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 Dorel Lucanu Algoritmica si programare

Algoritmica si programare 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 array a[0..n-1] a[0] = v0, . . . , a[n-1] = vn-1 Dorel Lucanu Algoritmica si programare

Algoritmica si programare 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 Dorel Lucanu Algoritmica si programare

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

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 Dorel Lucanu Algoritmica si programare

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

Algoritmica si programare 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 Dorel Lucanu Algoritmica si programare

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) Dorel Lucanu Algoritmica si programare

"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 Dorel Lucanu Algoritmica si programare

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 Dorel Lucanu Algoritmica si programare

"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 Dorel Lucanu Algoritmica si programare

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

Timpul de executie empiric Intel Pentium III 1.00 Ghz n bubbleSort insertSort naivSort heapSort 10 0.0000 100 1000 0.0310 0.0150 2000 0.1100 0.0320 4000 0.4840 0.0630 0.0930 0.0160 8000 1.9530 0.2500 0.3590 10000 3.0940 0.4060 0.5780 Dorel Lucanu Algoritmica si programare

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 rezolva P1(n1), ..., Pa(na) in aceeasi maniera si obtine solutiile S1, ..., Sa asambleaza S1, ..., Sa pentru a obtine solutia S a problemei P Dorel Lucanu Algoritmica si programare

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 Dorel Lucanu Algoritmica si programare

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] si a[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) Dorel Lucanu Algoritmica si programare

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 Dorel Lucanu Algoritmica si programare

Sortare rapida (Quick sort) 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] x k p q  x  x subprobleme: a[p..k-1], a[k+1..q] asamblare: nu exista Dorel Lucanu Algoritmica si programare

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]  x atunci i  i+1 daca a[j]  x atunci 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: conditia i > j operatii k  i-1 swap(a[p], a[k]) Dorel Lucanu Algoritmica si programare

Algoritmica si programare Cautare in liste liniare cautare binara – aspectul dinamic arbori AVL Dorel Lucanu Algoritmica si programare

Algoritmica si programare 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 Iesire: S  {x} Dorel Lucanu Algoritmica si programare

Cautare in liste liniare - complexitate Tip de date Implementare Cautare Inserare Stergere Lista liniara Tablouri O(n) O(1) Liste inlantuite Lista liniara ordonata O(log n) Dorel Lucanu Algoritmica si programare

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

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 if (s[m] = a) then return m else return -1; end Dorel Lucanu Algoritmica si programare

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

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. Dorel Lucanu Algoritmica si programare

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 Dorel Lucanu Algoritmica si programare

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 adauga x ca fiu stinga a lui predp else adauga x ca fiu dreapta a lui predp end Dorel Lucanu Algoritmica si programare

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 q ca in cazul 1 sau 2 Dorel Lucanu Algoritmica si programare

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 inlocuieste in predp pe p cu p->stg end Dorel Lucanu Algoritmica si programare

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 Dorel Lucanu Algoritmica si programare

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

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). Dorel Lucanu Algoritmica si programare

Algoritmica si programare 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)). Dorel Lucanu Algoritmica si programare

Algoritmica si programare Rotatii Rotatie dreapta simpla x y A B C Rotatie dreapta dubla x y z A B C D Dorel Lucanu Algoritmica si programare