Algoritmi Divide-et-Impera Structura unui algoritm divide-et-impera divide: impera: combina: Utilizarea cea mai frecventa

Σχετικά έγγραφα
Metode iterative pentru probleme neliniare - contractii

(a) se numeşte derivata parţială a funcţiei f în raport cu variabila x i în punctul a.

Proiectarea Algoritmilor 2. Scheme de algoritmi Divide & Impera

Curs 10 Funcţii reale de mai multe variabile reale. Limite şi continuitate.

Sisteme diferenţiale liniare de ordinul 1

Curs 1 Şiruri de numere reale

Subiecte Clasa a VIII-a

Esalonul Redus pe Linii (ERL). Subspatii.

Curs 4 Serii de numere reale

Analiza în curent continuu a schemelor electronice Eugenie Posdărăscu - DCE SEM 1 electronica.geniu.ro

Asupra unei inegalităţi date la barajul OBMJ 2006

DISTANŢA DINTRE DOUĂ DREPTE NECOPLANARE

R R, f ( x) = x 7x+ 6. Determinați distanța dintre punctele de. B=, unde x și y sunt numere reale.

COLEGIUL NATIONAL CONSTANTIN CARABELLA TARGOVISTE. CONCURSUL JUDETEAN DE MATEMATICA CEZAR IVANESCU Editia a VI-a 26 februarie 2005.

Functii definitie, proprietati, grafic, functii elementare A. Definitii, proprietatile functiilor X) functia f 1

Metode de interpolare bazate pe diferenţe divizate

MARCAREA REZISTOARELOR

Functii definitie, proprietati, grafic, functii elementare A. Definitii, proprietatile functiilor

a n (ζ z 0 ) n. n=1 se numeste partea principala iar seria a n (z z 0 ) n se numeste partea

SERII NUMERICE. Definiţia 3.1. Fie (a n ) n n0 (n 0 IN) un şir de numere reale şi (s n ) n n0

Seminar 5 Analiza stabilității sistemelor liniare

V O. = v I v stabilizator

SEMINAR 14. Funcţii de mai multe variabile (continuare) ( = 1 z(x,y) x = 0. x = f. x + f. y = f. = x. = 1 y. y = x ( y = = 0

Subiecte Clasa a VII-a

5. FUNCŢII IMPLICITE. EXTREME CONDIŢIONATE.

chip and be conquered - b subprobleme de dimensiune n-c Exercitiu: Dati exemple de algoritmi care au recurente de tipul celor de mai sus.

Curs 14 Funcţii implicite. Facultatea de Hidrotehnică Universitatea Tehnică "Gh. Asachi"

III. Serii absolut convergente. Serii semiconvergente. ii) semiconvergentă dacă este convergentă iar seria modulelor divergentă.

V.7. Condiţii necesare de optimalitate cazul funcţiilor diferenţiabile

Integrala nedefinită (primitive)

Laborator 11. Mulţimi Julia. Temă

Laborator 1: INTRODUCERE ÎN ALGORITMI. Întocmit de: Claudia Pârloagă. Îndrumător: Asist. Drd. Gabriel Danciu

5.5. REZOLVAREA CIRCUITELOR CU TRANZISTOARE BIPOLARE

riptografie şi Securitate

Principiul incluziunii si excluziunii. Generarea şi ordonarea permutărilor. Principiul porumbeilor. Pri

Aplicaţii ale principiului I al termodinamicii la gazul ideal

BARAJ DE JUNIORI,,Euclid Cipru, 28 mai 2012 (barajul 3)

Componente şi Circuite Electronice Pasive. Laborator 3. Divizorul de tensiune. Divizorul de curent

Planul determinat de normală şi un punct Ecuaţia generală Plane paralele Unghi diedru Planul determinat de 3 puncte necoliniare

5.4. MULTIPLEXOARE A 0 A 1 A 2

Examen AG. Student:... Grupa:... ianuarie 2011

Examen AG. Student:... Grupa: ianuarie 2016

EDITURA PARALELA 45 MATEMATICĂ DE EXCELENŢĂ. Clasa a X-a Ediţia a II-a, revizuită. pentru concursuri, olimpiade şi centre de excelenţă

Curs 2 Şiruri de numere reale

6 n=1. cos 2n. 6 n=1. n=1. este CONV (fiind seria armonică pentru α = 6 > 1), rezultă

a. 11 % b. 12 % c. 13 % d. 14 %


5.1. Noţiuni introductive

Subiecte Clasa a V-a

1.7. AMPLIFICATOARE DE PUTERE ÎN CLASA A ŞI AB

Sisteme liniare - metode directe

MULTIMEA NUMERELOR REALE

Seminariile Capitolul X. Integrale Curbilinii: Serii Laurent şi Teorema Reziduurilor

Laborator 6. Integrarea ecuaţiilor diferenţiale

Proiectarea filtrelor prin metoda pierderilor de inserţie

Criptosisteme cu cheie publică III

T R A I A N ( ) Trigonometrie. \ kπ; k. este periodică (perioada principală T * =π ), impară, nemărginită.

Εμπορική αλληλογραφία Ηλεκτρονική Αλληλογραφία

Teme de implementare in Matlab pentru Laboratorul de Metode Numerice

Capitolul 4 PROPRIETĂŢI TOPOLOGICE ŞI DE NUMĂRARE ALE LUI R. 4.1 Proprietăţi topologice ale lui R Puncte de acumulare

Metode Runge-Kutta. 18 ianuarie Probleme scalare, pas constant. Dorim să aproximăm soluţia problemei Cauchy

Proiectarea Algoritmilor 4. Scheme de algoritmi Programare dinamica

Să se arate că n este număr par. Dan Nedeianu

Ecuatii exponentiale. Ecuatia ce contine variabila necunoscuta la exponentul puterii se numeste ecuatie exponentiala. a x = b, (1)

Al cincilea baraj de selecţie pentru OBMJ Bucureşti, 28 mai 2015

SEMINARUL 3. Cap. II Serii de numere reale. asociat seriei. (3n 5)(3n 2) + 1. (3n 2)(3n+1) (3n 2) (3n + 1) = a

Metode de sortare. Se dau n numere întregi, elemente ale unui vector a. Se cere să se aranjeze elementele vectorului a în ordine crescătoare.

4. Măsurarea tensiunilor şi a curenţilor electrici. Voltmetre electronice analogice

Functii Breviar teoretic 8 ianuarie ianuarie 2011

CURS 11: Programare dinamică - I - Algoritmica - Curs 11 1

Programarea dinamica I

RĂSPUNS Modulul de rezistenţă este o caracteristică geometrică a secţiunii transversale, scrisă faţă de una dintre axele de inerţie principale:,

Fig Impedanţa condensatoarelor electrolitice SMD cu Al cu electrolit semiuscat în funcţie de frecvenţă [36].

Definiţia generală Cazul 1. Elipsa şi hiperbola Cercul Cazul 2. Parabola Reprezentari parametrice ale conicelor Tangente la conice

Ταξίδι Γενικά. Γενικά - Τα απαραίτητα. Γενικά - Συνομιλία. Παράκληση για βοήθεια. Ερώτηση σε πρόσωπο αν μιλά αγγλικά

Cursul Măsuri reale. D.Rusu, Teoria măsurii şi integrala Lebesgue 15

Principiul Inductiei Matematice.

Lucrare. Varianta aprilie I 1 Definiţi noţiunile de număr prim şi număr ireductibil. Soluţie. Vezi Curs 6 Definiţiile 1 şi 2. sau p b.

2. Circuite logice 2.4. Decodoare. Multiplexoare. Copyright Paul GASNER

Sortare. 29 martie Utilizarea şi programarea calculatoarelor. Curs 16

Orice izometrie f : (X, d 1 ) (Y, d 2 ) este un homeomorfism. (Y = f(x)).

Ecuatii trigonometrice

TEMA 9: FUNCȚII DE MAI MULTE VARIABILE. Obiective:

2.1 Sfera. (EGS) ecuaţie care poartă denumirea de ecuaţia generală asferei. (EGS) reprezintă osferă cu centrul în punctul. 2 + p 2

Ακαδημαϊκός Λόγος Κύριο Μέρος

Reflexia şi refracţia luminii.

* K. toate K. circuitului. portile. Considerând această sumă pentru toate rezistoarele 2. = sl I K I K. toate rez. Pentru o bobină: U * toate I K K 1


Curs 2 DIODE. CIRCUITE DR

2. Circuite logice 2.2. Diagrame Karnaugh. Copyright Paul GASNER 1

f(x) = l 0. Atunci f are local semnul lui l, adică, U 0 V(x 0 ) astfel încât sgnf(x) = sgnl, x U 0 D\{x 0 }. < f(x) < l +

Rădăcini primitive modulo n

Progresii aritmetice si geometrice. Progresia aritmetica.

Problema a II - a (10 puncte) Diferite circuite electrice

Seminar Algebra. det(a λi 3 ) = 0

Eficienta algoritmilor

1. Preliminarii 1.1 Ce este un algoritm?

GEOMETRIE PLANĂ TEOREME IMPORTANTE ARII. bh lh 2. abc. abc. formula înălţimii

Tranzistoare bipolare şi cu efect de câmp

Lectia VI Structura de spatiu an E 3. Dreapta si planul ca subspatii ane

Transcript:

Algoritmi Divide-et-Impera una din tehnicile de baza pt designul algoritmilor reduce complexitatea: cel mai des de la n la log(n), de la n 2 la n log(n) etc Structura unui algoritm divide-et-impera divide: imparte problema in (una sau mai multe) subprobleme de dimensiune mai mica (neaparat mai mica, recursivitatea trebuie sa ne conduca inspre problema elementara/banala) impera: rezolva recursiv aceste subprobleme sau iterativ daca am ajuns la problema elementara / banala => se obtin solutii pentru subprobleme combina: combina solutiile subproblemelor intr-o solutie pt intreaga problema Utilizarea cea mai frecventa problema de dimensiune n se imparte in 2 subprobleme de dimensiune n/2 se rezolva recursiv cele 2 subprobleme si solutiile se pot combina in timp liniar consecinta: o forta bruta: complexitate n 2 o divide-et-impera: complexitate n log(n): T(n) = 2T(n/2) + Θ(n) exemple: mergesort, quicksort Abordarea designerului decide asupra unui numar de subprobleme (uzual 2 pt tablouri unidimensionale, 4 pt bidimensionale, etc) se intreaba: daca as cunoaste rezolvarile acestor subprobleme, as putea sa le combin intr-un timp superior rezolvarii problemei initiale prin forta bruta? care parte a impartirii mele face combinarea sa devina mai usoara decat problema initiala? (exemplu: daca pot rezolva sortarea in Θ(n 2 ) prin forta bruta, procedura merge din algoritmul mergesort trebuie sa fie mai rapida decat atat, altfel nu am castigat nimic) intotdeauna se intreaba si: pot mai bine decat atat? Problema 1: numararea inversiunilor (NI) se da un sir v 1,v 2... v n v i si v j formeaza o inversiune daca i<j dar v i >v j exemplu: sirul {1,2,5,4,3} are 3 inversiuni: {5,4}, {5,3}, {4,3} aplicatii: metrica pt similaritate (exemplu: facem un top al melodiilor noastre preferate, numarul de inversiuni intre topurile noastre arata cat de mult se aseamana gusturile noastre), metrica pt ordonare (cu cat mai putine inversiuni are o lista, cu atat e mai ordonata), teoria voturilor, analiza sensibilitatii functiei google de ordonare a rezultatelor etc NI forta bruta prima idee este de a lua fiecare numar cu fiecare si a vedea daca formeaza o inversiune => complexitate Θ(n 2 )

NI divide-et-impera daca as cunoaste numarul de inversiuni din prima jumatate (inv1) si numarul de inversiuni din a 2ª jumatate (inv2), as putea obtine numarul de inversiuni (inv) din tot vectorul in timp liniar? observ ca inv = inv1+inv2+inv3, unde inv3 = numarul de inversiuni care apar intre elemente din prima jumatate si elemente din a 2ª jumatate; cum inv1 si inv2 se determina recursiv, problema devine daca pot determina inv3 in timp liniar practic un element din a 2ª jumatate formeaza o inversiune cu toate elementele din prima jumatate care sunt mai mari decat el; pot numara cate sunt acestea fara sa compar fiecare cu fiecare (pt ca asta mi-ar da complexitate patratica)? idee: mergesort! procedura merge stie, cand adauga un element din a 2ª jumatate, cate elemente au ramas neadaugate in prima jumatate (= cate sunt mai mari, adica exact cate inversiuni produce acel element) => nu mai e nevoie sa le compar fiecare cu fiecare, ci doar sa fac o adunare obs: fata de problema initiala, castig faptul ca in partea de combinare elementele din cele 2 jumatati sunt sortate, de aici si progresul de la patratic la liniar; daca nu castigam nimic, nu rezolvam nimic! complexitate: aceeasi recurenta ca la mergesort => Θ(n log(n)) NI(L) if L are 1 element return {0, L} divide L in 2 jumatati L1 si L2 {inv1, L1} <- NI(L1) {inv2, L2} <- NI(L2) {inv3, L} <- mergeni(l1,l2) return {inv1+inv2+inv3, L} // divide mergeni(l1,l2) while L1,L2 nevide append elementul minim din L1 sau L2 la L si treci la elementul urmator if min era in L2 inv <- inv+elemente-ramase-in-l1 append restul listei nevide la L return {inv, L} Problema 2: subsecventa de suma maxima (SSM) se da un sir de intregi v 1,v 2... v n subsecventa de suma maxima din sir reprezinta valoarea maxima posibila pt Suma k=i..j v k cand toate numerele din sir sunt negative, rezultatul se considera 0 exemple: {-2,5,-1,3,-2,1,-3} cu valoarea 7, {1,-2,4,-1,-2,4} cu valoarea 5 SSM forta bruta prima idee este de a lua toti indicii de inceput si toti indicii de sfarsit posibili si de a calcula sumele dintre ei, retinand maximul => complexitate Θ(n 2 ) sau Θ(n 3 ), in functie de implementare

SSM divide-et-impera daca as cunoaste subsecventa de suma maxima din prima jumatate (s1) si subsecventa de suma maxima din a 2ª jumatate (s2), as putea obtine subsecventa de suma maxima (smax) din tot vectorul in timp liniar? observ ca smax = max(s1,s2,s3), unde s3 = subsecventa de suma maxima dintre cele care traverseaza obligatoriu atat prima cat si a 2ª jumatate; cum s1 si s2 se determina recursiv, problema devine daca pot determina s3 in timp liniar fata de problema initiala, in determinarea lui s3 am castigat faptul ca stim sigur ca 2 elemente fac parte din solutie: ultimul element din prima jumatate, respectiv primul element din a 2ª; fiecare jumatate avand un capat fixat (j e fix in prima jumatate, respectiv i in a 2ª), s3 se poate determina in timp liniar; tot ce trebuie sa fac este sa determin subsecventa de suma maxima care se termina obligatoriu cu v mijloc, la fel pe cea care incepe obligatoriu cu v mijloc+1, apoi sa le adun intre ele si sa obtin s3 obs: strategia este similara cu cea de la problema anterioara: impartire in 2, determinarea unei formule pt obtinerea solutiei mari din subsolutii, observarea avantajelor pe care partea de combinare le are in raport cu problema initiala complexitate: T(n) = 2T(n/2)+ Θ(n) => Θ(n log(n)) SSM(L) if L are 1 element return max(0,acel element) divide L in 2 jumatati L1 si L2 s1 <- SSM(L1) s2 <- SSM(L2) s3 <- smax(l1,l2) return max(s1,s2,s3) // divide smax(l1,l2) smax1 <- 0 smax2 <- 0 for elem = end(l1) to start(l1) if smax1<scrt smax1 <- scrt for elem = start(l2) to end(l2) if smax2<scrt smax2 <- scrt return smax1+smax2 SSM liniar observ ca o solutie nu poate incepe cu un numar negativ mai mult decat atat, o solutie nu poate incepe cu un prefix negativ (o serie de numere cu suma negativa), intrucat partea care urmeaza ar avea suma mai mare singura, fara acest prefix

privind din cealalta perspectiva, orice prefix pozitiv e bun : n-are sens sa incep solutia de la numarul urmator, pt ca acest prefix nu face decat sa o imbunatateasca concluzie: in permanenta tin un prefix curent si o suma maxima; cat timp prefixul curent e pozitiv il pastrez, e candidat la a fi prefixul unei noi sume maxime; cand devine negativ il arunc si o iau de la 0, am sanse mai bune asa obs: pt a mai scapa de un ciclu, a trebuit sa gasesc pe cale logica o serie de subsecvente care sigur nu pot fi solutii, si sa le elimin obs: orice prefix poate fi gandit in acelasi timp si in acelasi fel si ca un sufix: important e sa fie pozitiv complexitate Θ(n) SSM(L) smax <- 0 for elem = start(l) to end(l) if scrt<0 if smax<scrt smax <-scrt return smax Exercitiu: Problema 3: Ridicarea la putere a unui numar (x n ) forta bruta: complexitate Θ(n) divide-et-impera: T(n) = T(n/2)+ Θ(1): complexitate Θ(log(n)) Problema 4: Numerele lui Fibonacci (FIB) sugestie: cautati pe google fibonacci numbers in nature pt niste detalii interesante privind aceste numere FIB varianta recursiva T(n) = T(n-1)+T(n-2)+Θ(1) => complexitate exponentiala exercitiu: desenati arborele de recurenta si deduceti limita inferioara (2 n/2 ) respectiv limita superioara (2 n ) de complexitate exercitiu: deduceti exact de cate ori se apeleaza FIB(n), FIB(n-1), FIB(n-2) etc e rau sa calculez de atat de multe ori acelasi lucru; pot mai bine decat atat? FIB(n) if n<2 return 1 else return FIB(n-1)+FIB(n-2) FIB varianta iterativa T(n) = T(n-1)+ Θ(1) => complexitate liniara FIB(n,a,b) if n=0 return a else

return FIB(n-1,b,a+b) FIB divide-et-impera se pleaca de la observatia ca ((1 1) (1 0)) n = ((F n+1 F n ) (F n F n-1 )) (unde ((a b) (c d)) reprezinta o matrice cu prima linie (a b) si a doua linie (c d) ) exercitiu: sa se demonstreze aceasta proprietate prin inductie vom putea calcula FIB(n) in complexitate logaritmica folosind algoritmul divideet-impera de ridicare la putere! exercitiu pt acasa: implementati cele 3 variante de algoritmi FIB si studiati diferentele de performanta Pt cine vrea sa isi testeze suplimentar abilitatile in algoritmi divide-et-impera http://en.wikipedia.org/wiki/closest_pair_of_points_problem