UNIVERSITATEA DIN BUCURE TI FACULTATEA DE MATEMATIC I INFORMATIC

Structuri de Date i Tehnici de Programare

Cuprins -----------------------------------------------------------------------------------------------------------------------

Cuprins
PREZENTAREA MODULULUI............................................. ....................................... ...... 5 Unitatea de înv are Nr. 1 ARBORI BINARI

Obiectivele unit ii de înv are nr. 1 ................................ ................................ .................... 5 1.1. Necesitatea utilizarii arborilor binari ................................ ................................ ............. 5 1.2. Un exemplu de parcurgere a unui arbore binar ................................ ............................ 6 1.3. Ce este un cod prefixat ? ................................ ................................ ............................. 7 1.4. Comentarii i r spunsuri la testele de autoevaluare ................................ .................. 10 1.5. Lucrare de verificare pentru studen i ................................ ................................ .......... 11 1.6. Bibliografie ................................ ................................ ................................ ................. 11
Unitatea de înv are Nr. 2 SORTARE OPTIMA

Obiectivele unit ii de înv are nr. 2 ................................ ................................ .................. 12 2.1. Ce este sortarea si necesitatea utilizarii ei ................................ ................................ . 12 2.2. Un prim exemplu : Sortarea rapida (quick sort) ................................ .......................... 13 2.3. Ce este un ansamblu (heap) ? ................................ ................................ ................... 15 2.4. Sortare optima ................................ ................................ ................................ ........... 17 2.5. Comentarii i r spunsuri la testele de autoevaluare ................................ .................. 20 2.6. Lucrare de verificare pentru studen i ................................ ................................ .......... 21 2.7. Bibliografie ................................ ................................ ................................ ................. 22
Unitatea de înv are Nr. 3 REGASIREA INFORMATIEI

Obiectivele unit ii de înv are nr. 3 ................................ ................................ .................. 23 3.1. Ce este cautarea (regasirea informatiei) ................................ ................................ .... 23 3.2. Un prim exemplu : algoritmul de cautare binara ................................ ......................... 25 3.3. Arbori binari optimi pentru cautare ................................ ................................ ............. 27 3.4. Ce este un fisier cu autoorganizare ?................................ ................................ ......... 30 3.5. Comentarii i r spunsuri la testele de autoevaluare ................................ .................. 32 3.6. Lucrare de verificare pentru studen i ................................ ................................ .......... 33 3.7. Bibliografie ................................ ................................ ................................ ................. 33
Unitatea de înv are Nr. 4 ARBORI BINARI DE CAUTARE

Obiectivele unit ii de înv are nr. 4 ................................ ................................ .................. 34 ------------------------------------------------------------------------------------------------------------------Structuri de date si tehnici de programare 1

Cuprins ----------------------------------------------------------------------------------------------------------------------4.1. Ce sunt arborii binari de cautare ................................ ................................ ................ 34 4.2. Un prim exemplu : algoritm de cautare si insertie in arbore binar .............................. 35 4.3. Arbori Fibonacci ................................ ................................ ................................ ......... 36 4.4. Ce este un arbore echilibrat dupa inaltime (AVL)? ................................ ..................... 36 4.5. Comentarii i r spunsuri la testele de autoevaluare ................................ .................. 41 4.6. Lucrare de verificare pentru studen i ................................ ................................ .......... 42 4.7. Bibliografie ................................ ................................ ................................ ................. 43
Unitatea de înv are Nr. 5 DISPERSAREA MEMORIEI

Obiectivele unit ii de înv are nr. 5 ................................ ................................ .................. 44 5.1. Ce este dispersarea memoriei ................................ ................................ ................... 44 5.2. Un prim exemplu : algoritm de cautare si insertie in tabele dispersate si inlantui te ... 46 5.3. Dispersarea cu adresare deschisa ................................ ................................ ............. 47 5.4. Ce este dubla dispersare? ................................ ................................ ......................... 49 5.5. Comentarii i r spunsuri la testele de autoevaluare ................................ .................. 52 5.6. Lucrare de verificare pentru studen i ................................ ................................ .......... 53 5.7. Bibliografie ................................ ................................ ................................ ................. 53
Unitatea de înv are Nr. 6 METODA GREEDY

Obiectivele unit ii de înv are nr. 6 ................................................................................... 54 6.1. Introducere ................................ ................................ ................................ .................. 54 6.2. Memorarea textelor pe band ................................ ................................ ..................... 56 6.3. Problema continu a rucsacului ................................ ................................ .................. 56 6.4. Problema arborelui par ial de cost minim ................................ ................................ .... 58 6.5. Comentarii i r spunsuri la testele de autoevaluare ................................ ................... 62 6.6. Lucrare de verificare pentru studen icontiunu a rucsa cului ................................ ....... 63 6.7. Bibliografie. ................................ ................................ ................................ ................. 63
Unitatea de înv are Nr. 7 METODA BACKTRACKING

Obiectivele unit ii de înv are nr. 7 ................................ ................................ .................. 64 7.1. Descrierea metodei ................................ ................................ ................................ .. 65 7.2. Exemple ................................ ................................ ................................ ................... 66 7.3. O descriere succint a metodei backtracking ................................ ........................... 67 7.4. Variante ................................ ................................ ................................ .................... 68 7.5. Varianta recursiv ................................ ................................ ................................ .... 69 7.6. Metoda backtracking în plan ................................ ................................ .................... 70 7.7. Comentarii i r spunsuri la testele de autoevaluare ................................ ................. 72 7.8. Lucrare de verificare pentru studen i ................................ ................................ ........ 74 7.9. Bibliografie. ................................ ................................ ................................ .............. 74

2 --------------------------------------------------------------------------------------------------------------Structuri de date si tehnici de programare

.......3................................ ........ ......... ......... 79 8... 83 8............... 76 8.. ...................... ...4......... 8 5 9....... Algoritmul Branch & Bound pentru probleme de optim .............................................6................ 76 8................... ...............................8............................... ........... ...... 84 Unitatea de înv are Nr........................ Lucrare de verificare pentru stude n i .................... .... .. .................. ... ..... Lucrare de verificare pentru studen i ........ ........... Metoda program rii dinamice.........2......................................... 10 ........ ............... 96 10............... 9................................ .......... Comentarii i r spunsuri la testele de autoevaluare ...................5....................................................................109 BIBLIOGRAFIE................. . Exemple reprezentative ..... ........................5................ 96 10............................... .............. ............. ...................1......... .............................................7.. Prezentare general ................................. . Metoda irului cresc tor de mul imi ............8.................... Problema turnurilor din Hanoi ......... 107 10...........................Cuprins ----------------------------------------------------------------------------------------------------------------------Unitatea de înv are Nr...... 89 9....... ......... 93 9......... ............................... 77 8. ...................... ..... ...........................1..... ....... Comentarii i r spunsuri la testele de autoevaluare ......................... Comentarii i r spun suri la testele de autoevaluare .................... ......................... O problem general ..... .. . 94 9........................ ........................... Schema general ..... 83 8................... ... 8 METODA DIVIDE ET IMPERA Obiectivele unit ii de înv are nr....................................................... 108 10.................2...... Solu ie final ...... .......................... Metoda Quicksort ......................1....................... ..........8 ............................................4..........................................................4......... ................................................ ....3.5.......... ............................................................... .................2........ 95 Unitatea de înv are Nr.......... C utarea binar .......... 98 10......................6....................... 7 5 8........................................... 99 10.......... 9 METODA BRANCH AND BOUND Obiectivele unit ii de înv are nr.... ...... Sortare prin interclasare ..3....................................... ................... Bibliografie .................. 78 8................................. 10 METODA PROGRAM RII DINAMICE Obiectivele unit ii de înv are nr................ ................... .......................................................................... ................................... .. 85 9................ 110 ------------------------------------------------------------------------------------------------------------------Structuri de date si tehnici de programare 3 ...................................... Bibliografie . . Sortarea topologic ..............7..................................... ...... .. 100 10...... Lucrare de verificare pentru studen i ..... Bibliografie ...................... ................. .. 100 10...... ...............

prin analiza optimalit ii algoritmilor de sortare. atât din punct de vedere practic. algoritmii urmând a fi programa i în limbajul Java. Es te apoi abordat problema sort rii. studiul este extins la prezentarea arborilor binari de c utare. prezentându -se algoritmi de c utare. Branch and Bound. totul fiind orientat spre facilitarea urm ririi urm toarelor cursuri din Masterul "Baze de date". precum i metoda program rii dinamice. Ultima unitate de înv are din aceast parte este dedicat problemei dispers rii memoriei. 4 --------------------------------------------------------------------------------------------------------------Structuri de date si tehnici de pro gramare . Se continu cu problematica reg sirii informa iei. Divide et Impera. Este de remarcat c acest modul este strâns legat de cel de "Limbaje evoluate de programare". Partea de structuri de date începe cu studiul arborilor binari. Partea de tehnici de programare prezint cele mai importante tehnici de programare: Greedy. cât i teoretic.Prezentarea modulului ----------------------------------------------------------------------------------------------------------------------- PREZENTAREA MODULULUI Unitatea de înv are "Structuri de date i tehnici de programare" î i propune o recapitulare înso it de o actualizare a cuno tin elor în domeniul precizat. Backtracking.

.............. Comentarii i r spunsuri la testele de autoevaluare ............... 1 Dup ce ve i parcurge aceast unitate de înv are........ ...................... Utilizati algoritmul lui Huffman pentru construirea unor coduri prefixate optime y 1.................. ...............................Cel mai simplu caz de structuri de date neliniare il constituie arborii binari.. .......1................ ........care la randul lor sunt arbori binari.... -un arbore binar nevid este alcatuit din radacina si un subarbore stang si un subarbore drept..................... Ce este un cod prefixat ? . Arbori binari ----------------------------------------------------------------------------------------------------------------------- Unitatea de înv are Nr...........5. Utilizati arborii binari inseilati pentru parcurgerea mai rapida a arborilor binari si gasirea succesorilor/predecesorilor unor noduri .. 1 .....2.... ...................... . . .................................... Lucrare de verificare pentru studen i .............. 5 1... 7 1......... ....... ------------------------------------------------------------------------------------------------------------------Structuri de date si tehnici de programare 5 ..........................................1.............................6........... 6 1........... ve i reu i s : y y Intelegeti notiunea de arbore binar..3........................modul de reprezentare si posibilitatile de parcurgere ..4...... ................... Bibliografie ....................care se pot defini recursiv in modul urmator : -arborele vid este un arbore binar ...........................................1...........care pot functiona ca stive (ultimul intrat primul iesit) sau cozi (primul intrat-primul iesit) nu este suficienta............. 11 1. 1 ARBORI BINARI Cuprins Obiectivele unit ii de înv are nr........................ ... Necesitatea utilizarii arborilor binari In multe situatii utilizarea listelor liniare in alocarea secventiala sau inlantuita (simplu sau dublu)..... ...... 11 Obiectivele Unit ii de înv are nr...... 10 1........ Necesitatea utilizarii arborilor binari .. ... Un exemplu de parcurgere a unui arbore binar ..... 5 1.

care contin pointeri catre adresele radacinilor subarborilor stang.algoritmul se termina . Arborii binari se pot reprezenta in felul urmator : fiecare nod este reprezentat printr-un camp INFO care contine informatia memorata in acel nod. se merge la pasul 4. nu se executa nimic. Vom vedea ca arborii binari se utilizeaza pentru repre zentarea unor algoritmi de sortare si de cautare (regasire a informatiei).atunci T=lambda.ca in urmatorul exemplu : 1.adica a vizitarii nodurilor sale intr-o anumita ordine.radacinile lor se mai numesc fiii radacinii.1. Se depune valoarea lui P in stiva A. -traversarea in inordine sau in ordinea simetrica SRD (stangaradacina-dreapta) : se viziteaza intai subarborele stang. Pentru traversarea unui arbore binar se poate utiliza o stiva. Arborii binari se utilizeaza pentru reprezentarea expresiilor aritmetice . Daca stiva A este vida. Daca P=lambda. Structura de arbore binar se poate transforma intr -o structura liniara in urma parcurgerii sau traversarii arborelui.respectiv drept (L de la left si R de la right).daca arborele este vid.operatii care apar frecvent in bazele de date. Se face stiva A vida si P T. 2.respectiv drept reprezinta cele doua expresii carora li se aplica acest operator. -traversarea in postordine SDR (stanga-dreapta-radacina) : se viziteaza subarborele stang. daca arborele este vid. P A. 4. 6 --------------------------------------------------------------------------------------------------------------Structuri de date si tehnici de programare . altfel se scoate varful stivei si se atribuie lui P : P A. Un arbore binar se numeste strict daca fiecare nod are zero sau doi fii . 1. in radacina unui arbore apare ultimul operator (operatie) efectuata de acea expresie.rezultand un sir de noduri.Daca unul dintre acestia este vid. Arbori binari ----------------------------------------------------------------------------------------------------------------------Daca ambii subarbori binari ai radacinii sunt nevizi. subarborele ei stang si apoi subarborele drept. Tipurile principale de parcurgeri sunt urmatoarele : -traversarea in preordine sau in ordinea RSD (radacina -stangadreapta) : se viziteaza intai radacina.Apoi P LLINK(P) si se merge la pasul 2.iar subarborii stang. Aceste definitii sunt recursive . radacina si subarborele drept. nodurile cu zero fii se numesc frunze sau noduri terminale.2.precum si prin doua alte campuri LLINK si RLIN K.iar in nodurile interne operator ii expresiei. apoi subarborele drept si la final radacina. campul de legatura respectiv va fi reprezentat prin lambda. Un exemplu de parcurgere a unui arbore binar Exemplul 1 Urmatorul algoritm traverseaza un arbore binar in ordinea simetrica folosind o stiva auxiliara A . accesul la arbore se face printr-un pointer T care memoreaza adresa radacinii arborelui . 3.iar cei doi fii se numesc frati. In acest fel in frunze apar operanzii (variabilele si constantele) . in aceeasi ordine .

respectiv legatura de insailare dreapta a ultimului nod al arborelui in ordinea simetrica. Sa mai observam ca este necesara prezenta unui nou nod care sa joace rolul unui nod cap de l ista si la care sa mearga lagatura de insailare stanga a primului nod.care poate fi gasit facand o parcurgere partiala a unui drum din arbore.se poate utiliza o reprezentare insailata a arborelui. Multimea cuvintelor de cod asociate frunzelor unui arbore binar formeaza un asa numit cod prefixat (sau instantaneu).101. ------------------------------------------------------------------------------------------------------------------Structuri de date si tehnici de programare 7 . Arbori binari ----------------------------------------------------------------------------------------------------------------------5. Deoarece in reprezentarea cu legaturi LLIN K si RLINK a unui arbore binar multe campuri sunt lambda. RLINK(P) si se Daca se face vizitarea nodului NOD(P) la pasul 3. De exemplu.care mai este egal cu numarul de nivel al frunzei respective.adica numarul sau de litere este egal cu lungimea drumului de la radacina la acea frunza. Apoi se face P merge la pasul 2.01.adica nu contin nicio informatie utila.atunci vom defini RLINK(P) ca fiind egal cu adresa succesorului nodului NOD(P) relativ la aceeasi ordine.101. Daca un sir de litere este format prin concatenarea cuvintelor dintr un astfel de cod.de fiecare data cand ne deplasam la stanga scriem 0 si cand ne deplasam la dreapta scriem 1. sirul 000110110100 se descompune imediat.11.inainte de depunerea valorii lui P in stiva. Aceasta se justifica prin aceea ca nicio frunza nu este nici descendent si nici stramos al altei frunze in arbore.care va avea valoarea TAG( P)=1 daca legatura este obisnuita si TAG(P)=0 daca legatura a fost creata prin insailare.Daca insailarea se face relativ la ordinea simetrica. Ce este un cod prefixat? Frunzele unui arbore binar pot fi puse in corespondenta cu cuvinte binare peste alfabetul M cu doua simboluri.Radacina arborelui poata fi gasita in campul LLINK al acestui nod.Lungimea unui cuvant binar asociat unei frunze.3.pe nivelele cele mai mari). In felul acesta unele operatii asupra arborelui pot fi simplificate.1.01.0 si 1 : plecand din radacina arborelui.care are proprietatea ca niciun cuvant de cod nu este inceput propriu al celuilalt.atunci daca LLINK(P)=lambda ea se va inlocui cu adresa predecesorului nodului NOD(P) relativa la ordinea simetrica.101.nivelul radacinii fiind egal cu 0 (se presupune ca arborele este desenat cu radacina sus si frunzele jos. Se viziteaza nodul NOD (P).Pentru a distinge legaturile de insailare de cele obisnuite vom folosi un camp de un singur bit in fiecare nod.decodificarea se poate face usor citind sirul de la stanga la dreapta si marcand un cuvant de fiecare data cand el este recunoscut.de la stanga la dreapta in 00.fara a mai folosi o stiva auxiliara.100.de exemplu gasirea succesorului simetric al lui NOD(P) intr-un astfel de arbore.00.a carui adresa trebuie memorata printr-un pointer T. 1.iar daca RLINK(P)= lambda.se obtine un algoritm pentru vizitarea arborelui in ordinea RSD.pentru codul care consta din cuvintele 00.

numarul de ponderi.«.pentru care notand vectorul lungimilor acestor cuvinte prin (l_1.initial egala cu 0 este un contor care numara nodurile interne construite pana in acel moment.w_n pentru 1”i”n si cu o multime I de noduri interne . 8 --------------------------------------------------------------------------------------------------------------Structuri de date si tehnici de programare . Arbori binari ----------------------------------------------------------------------------------------------------------------------Ne vom ocupa de constructia unui arbore binar care este optim intr un sens care va fi precizat ulterior. I este initial multimea vida.lungimea medie ™p_il_i sa fie minima.w_2.prezentand problema ca o problema de comunicatie optima.l_2. Vrem sa gasim un cod prefixat w_1.«.in cautare.w_3. Algoritmul lui Huffman construieste un arbore T optim plecandu-se cu o multime V formata din n frunze .se face k k+1 . Exista un arbore optim in care frunzele cu cele mai mici ponderi sunt frati.Variabila k.w_n} sortata crescator.l_L).In aceasta formula sa notat cu l(w_i)=l_i lungimea (numarul de litere) al e cuvantului w_i.p_2. Daca w_i<w_j atunci nivelul frunzei v_i in orice arbore optim este mai mare sau egal cu nivelul frunzei v_j.1.Insa aceasta metoda de optimizare se aplica de asemenea in sortarea externa.v_n carora li se asociaza ponderile w_1.«.«. Folosindu-se aceste doua proprietati se poate demonstra prin inductie dupa n.context in care a fost rezolvata de Huffman in anul 1950.v_1.iar urmatorul mesaj care trebuie transmis apare cu aceste probabilitati.ca alg oritmul lui Huffman construieste un Exemplul 3 arbore optim (care liste circulare este unic).independent de mesajele precedente.se construieste un nou nod intern x cu ponderea egala cu suma ponderilor celor doua noduri x_1 si x_2 si se adauga x la multimea nodurilor interne I.considerand multimea de Serializarea unei in general nu ponderi {w_1+w_2.p_L. 2.«.«.in comprimarea fisierelor etc.1 cate una intr -o unitate de timp.w_L peste alfabetul M.Sa mai presupunem ca aceste mesaje apar unul dupa altul cu probabilitatile p_1. se elimina nodurile x_1 si x_2 din I U V od Întrebare: Care sunt proprietatile arborilor optimi care justifica algoritmul lui Huffman? R spuns: 1. Algoritmul se scrie astfel : while k<n-1 do se selecteaza nodurile x_1 si x_2 din I U V cu cea mai mica pondere. Sa presupunem ca trebuie sa transmitem L mesaje printr-un canal de comunicatie care transfera literele din alfabetul 0.

1. Arbori binari ----------------------------------------------------------------------------------------------------------------------Testul de autoevaluare nr. în continuarea enun urilor 4. R spunsurile la acest test se g sesc la pagina 10 a acestei unit i de înv are. De ce expresiile aritmetice trebuie reprezentate prin arbori binari? Cate noduri interne are un arbore binar strict cu n frunze (n•2) ? Cum se poate defini prin recurenta un arbore m-ar. ------------------------------------------------------------------------------------------------------------------Structuri de date si tehnici de programare 9 . R spunsurile la test se vor da în spa iul liber din chenar.in care fiecare nod care nu este frunza sa aiba cel mult m fii (m •2) si ordinea in care apar acestia sa aiba importanta ? Cum se poate defini parcurgerea unui arbore m-ar in ordinea RSD ? Ce structuri de date se pot folosi la aplicarea algoritmului lui Huffman astfel incat complexitatea sa timp sa fie liniara?. Justificati raspunsul. 5. 1 1. 3. 2.

«.Presupunand-o adevarata pentru arborii binari cu n-1 frunze. Care este numarul de operatii efectuate de fiecare pas al algoritmului prezentat de parcurgere a unui arbore binar in ordinea simetrica. 5. Un arbore m-ar este fie vid.Dar numarul de noduri interne ale lui T este egal cu numarul de noduri interne ale lui T¶ plus 1.Suprimand doua frunze ale aces tuia.4.impartirea.apoi subarborii radacinii A_1. Arbori binari ----------------------------------------------------------------------------------------------------------------------- Tema de autoinstruire nr. Operatorii care apar in expresiile aritmetice sunt operatori binari.De aceea. Comentarii i r spunsuri la testele de autoevaluare Testul 1.fie T un arbore binar cu n frunze.conform ipotezei de inductie.generate in ordine crescatoare a ponderilor.A_m) care sunt arbori m-ari.1. 10 --------------------------------------------------------------------------------------------------------------Structuri de date si tehnici de programare . 1.numar care depinde numai de numarul de noduri ale arborelui si nu de forma lui. 1 Consulta i bibliografia pentru a afla : 1.Aceasta proprietate se demonstreaza prin inductie dupa n:pentru n=2 ea se verifica.Arborele A_i se numeste subarborele de ordinul i al radacinii. Se utilizeaza o coada pentru a memora nodurile interne ale arborelui create de algoritm cu ponderile coresp unzatoare si o stiva sau o coada pentru a memora cele n frunze care au asociate cele n ponderi date initial .A_m in aceeasi ordine RSD.Acesti subarbori au multimile de noduri disjuncte doua cate doua.exponentierea). 4.la coada nodurilor interne.«. 1. 3.expresiile aritmetice trebuie reprezentate prin arbori binari. 2.se scot si se adauga noduri. Din lista liniara a frunzelor numai se scot noduri.la ca re se face distinctie intre subarborele stang si cel drept. 2.A_2.care in general nu sunt comutativi (de exemplu scaderea.se obtine un arbore T¶ cu n-1 frunze. Cum procedeaza algoritmul lui Huffman in cazul nebinar .adica n-1. Un arbore binar strict cu n frunze (n • 2) are n-1 noduri interne.sortate crescator. Se parcurge radacina.fie este alcatuit dintr -o radacina si o lista ordonata cu m elemente (A_1.deci cu n-2 noduri interne.A_2.fiii aceluiasi nod intern.

Knuth.1998.Mehlhorn. [5] I. Data Structures. Se elimina nodurile astfel gasite si se adauga un nou nod cu ponderea egala cu suma celor doua ponderi la spatele cozii nodurilor interne.introduce i în program un num r suficient de comentarii pentru buna în elegere a programelor. Data Structures.Deoarece numarul nodurilor interne create de algoritm este egal cu n-1. Data Structures and Algorithms. Vol.11 Structuri de date si tehnici de programare . . Editura Universitatii din Bu curesti. 2008. Data Structures. 1. Algorithms. E. 1973.Editura Tehnica. [3] S. Gasiti in acest arbore binar insailat succesorul unui nod dat prin adresa lui.înso i i programul de o documenta ie privind problema tratat .5. Sahni. Mc Graw Hill.complexitatea lui folosind aceasta structura de date este egala cu O(n). vor fi expediate prin mail tutorelui. Bibliografie [1] D. I. retiparit. ------------------------------------------------------------------------------------------------------------------. 2000. Rezolv rile. and Applications in Java .ceea ce se realizeaza cu o complexitate O(1). [2] K. Sahni. Editura Teora. [4] S. Mc Graw Hill.6. Algorithms. Indica ii de redactare: .1. 1. and Applications in C ++.1984. Lucrare de verificare pentru studen i Scrie i un program pentru parcurgerea in ordinea simetrica a unui arbore binar si apoi insailarea lui relativ la aceeasi ordine. Berlin. modul de introducere a datelor i aspecte deosebite folosite la elaborarea programelor. 2000. dar i dificult ile întâmpinate. Tratat de programarea calculatoarelor. Springer-Verlag. Bucuresti. Arbori binari ----------------------------------------------------------------------------------------------------------------------Pentru a afla care sunt cele 2 noduri cu cele mai mici ponderi trebuie sa comparam ponderile a 4 noduri.2 situate in varful stivei (fata cozii) frunzelor si 2 situate in fata cozii nodurilor interne. Tomescu.

..................... Comentarii i r spunsuri la testele de autoevaluare ...2.................................... Ce este sortarea si necesitatea utili zarii ei .3.1... .. ............ 12 2....... .......fiecare continand o cheie K_i (1 ” i ” n) si o informatie asociata cu aceasta cheie...........ceea ce este foarte mult pentru n mare. .... y Aflati numarul asimptotic minim de comparatii de chei efectuate de cel mai bun algoritm de sortare in cazul cel mai nefavorabil 2.................................. 17 2.. Ce este sortarea si necesitatea utilizarii ei Sa consideram o multime de n inregistrari R_1..... 20 2.R_2........... ........................... Sortare optima ....7.......... ........ . ........ ...... 2 ........ ..... y Utilizati algoritmul de sortare de ansamble............ y Utilizati algoritmul de sortare rapida si sa deduceti complexitatea medie a acestuia.................2........... Sortare optima ------------------------------------------------------------------------------------------------------------------------ Unitatea de înv are Nr.......... Bibliografie ..................Cum operatia de cautare a unei inregistrari este foarte frecventa in bazele de date..... ...... 2 Dup ce ve i parcurge aceast unitate de înv are................ 12 2. Sortarea acestor inregistrari dupa cheile K_i presupune gasirea unei rearanjari a inregistrarilor sau gasirea unei permutari p(1)p(2)«p(n) astfel incat sa avem : K_p(1) ” K_p(2) ” « ” K_p(n) Sortarea inregistrarilor dupa o anumita cheie este o operatie importanta in vederea regasirii rapide a informatiei..deducem importanta operatiei de sortare in vederea functionarii eficiente a 12 --------------------------------------------------------------------------------------------------------------Structuri de date si tehnici de programare ...........................4..................................................... 22 Obiectivele Unit ii de înv are nr..........1...... 2 SORTARE OPTIMA Cuprins Obiectivele unit ii de înv are nr................ Lucrare de verificare pentru studen i ............... 15 2....... ve i reu i s : y Aflati principalele tipuri de algoritmi de sortare interna .......................... ... Un prim exemplu : Sortarea rapida (quick sort) ....................... ..........R_n......................................Vom vedea ca sortarea poate reduce complexitatea operatiei de cautare a unei inregistrari de la O(n) la O(log n)............«.............. Ce este un ansamblu (heap) ? ........Cheile apartin unei multimi total ordonate U cu o relatie de ordine notata ” (cum ar fi de exemplu relatia de ordine uzuala din multimea numerelor reale sau ordinea lexicografica din multimea cuvintelor peste un alfabet total ordonat)........... ........ 21 2..6.5..................... . 13 2..................

Astfel pozitia i a tabelului indica adresa inregistrarii K_i dupa sortare.In momentul cand apare prima interschimbare se creste i cu 1 si se continua compararea crescandu -l pe i pana cand apare -------------------------------------------------------------------------------------------------------------------.Se pastreaza inregistrarile sub forma unei liste simplu inlantuite cu nod cap de lista.sortarea de ansamble. pentru acest tip de sortare criteriul de performanta va fi minimizarea numarului de comparatii de chei necesare in procesul de sortare.apoi depunerea ace stora pe memorii externe si in final sortarea acestora prin interclasare.primele memorii tampon.care interschimba intre ele perechile de elemente care nu sunt in ordine. Sortarea rapida actioneaza asupra unui sir de inregistrari R_1.strategia de sortare este alcatuirea de siruri sortate cat mai lungi in memoria interna.Campul de legatura al acestuia indica inregistrarea cu cheia cea mai mica.adica prezinta inversiuni. Exista mai multe clase de algoritmi de sortare : prin numarare.prin interschimb de partitii (metoda bulelor si sortarea rapida).La pasul curent se compara cheile K_i cu K_j si daca nu este necesara nicio schimbare (avem mereu i ” j) se descreste j cu 1 si se repeta acest proces.sortarea prin interclasare.primii algoritmi folositi la prelucrarea datelor. In multe cazuri nu se doreste rearanjarea fizica a inregistrarilor in memorie astfel incat cheile lor sa fie in ordine.prin insertie (simpla si multipla).IBM a estimat ca in jur de 25% din timpul total de calcul se consuma cu operatii de sortare in aplicatiile comerciale ale calculatoarelor. Sa mai amintim ca sortarea a avut un rol important in evolutia calculatoarelor.in ordinea crescatoare a cheilor .prin distributie.care se desfasoara numai in unitatea centrala a calculatorului . Sortare optima -----------------------------------------------------------------------------------------------------------------------acestora.cum sunt cele rezultate de exemplu din recensamintele populatiei : primele masini de prelucrarea automata a datelor. Un prim exemplu : Sortarea rapida (quicksort) Exemplul 1 Sortarea rapida se incadreaza in familia algoritmilor de sort are prin interschimbare sau transpozitie.«R_n in felul urmator : Se utilizeaza doi indici.ci numai existenta unui tabel auxiliar care sa specifice ordinea inregistrarilor.radix sort etc.criteriul de eficienta in acest caz este minimizarea numarului de citiri si scrieri de pe /in memoria externa. ultimul camp de legatura este lambda.care indica sfarsitul listei.pana cand astfel de perechi nu mai exista.de care se inlantuie toate celelalte inregistrari.nu numarul de comparatii de chei din memoria interna.datorita importantei practice a manipularii unor volume mari de date.i si j care initial au valorile i=1 si j=n.cand inregistrarile sunt asa de numeroase incat nu incap in me moria interna.Deoarece timpul de acces la memoria externa este de sute de ori mai mare decat timpul necesitat de operatiile din memoria interna. In ceea ce urmeaza vom considera numai sortarea interna.2.aceasta metoda se numeste sortare prin tabel de adrese .13 Structuri de date si tehnici de programare .In cazul sortarii externe. O alta varianta este sortarea de liste.primele studii privind complexitatea algoritmilor au fost legate de algoritmii de sortare. 2.2.

a. if k+1<r then Quicksort(k+1.m.deci algoritmul are complexitatea O(n^2).S[r] in ordine crescatoare .2. este clar caracterul recursiv al acestui algoritm. co Quicksort(l.pana cand i=j.«.El ilustreaza bine tehnica de programare numita divide et impera ». Fiecare comparatie va implica valoarea cheii K_1 .deoarece toate inregist rarile cu chei mai mici decat ea au fost mutate in stanga ei iar inregistrarile cu chei mai mari se gasesc la dreapta ei.d.r) end Sa notam cu QS(n) numarul mediu de comparatii de chei efectuate de algoritmul de sortare rapida pentru a sorta un fisier cu n chei distincte doua cate doua (fara a restrange generalitatea putem presupune ca acestea sunt chiar numerele 1.n). 14 --------------------------------------------------------------------------------------------------------------Structuri de date si tehnici de programare . if l<k-1 then Quicksort(l.Deci la fiecare interschimbare se comuta regula de variatie pentru i si j . interschimba S[l] si S[k].care sunt perechile de indici ai inregistrarilor de la capetele subfisierelor.deci necesita un spatiu mic de memorare.R_{i-1} si R_{i+1} . Astfel fisierul original a fost partitionat in doua subfisiere.stiva nu va contine niciodata mai mult de log n perechi.in asa fel incat problema initiala s-a redus la doua probleme mai simple si anume sortarea fisierelor R_1.apoi iarasi scaderea lui j s.r) sorteaza subfisierul S[l]. begin i l.Hoare.k -1).se numeste sortare rapida (quick sort) si este eficienta pentru valori mari ale lui n . R_n.aceste subfisiere se pot reprezenta prin perechi (l. Algoritmul se poate scrie simplu ca o procedura re cursiva dupa cum urmeaza : Procedure Quicksort (l. Sortare optima -----------------------------------------------------------------------------------------------------------------------o noua interschimbare. de aceea este de dorit ca fisierele scurte sa se sorteze prin alte metode.k r+1.«. Aceasta procedura.Daca de fiecare data cand un fisier este partitionat se pune perechea de indici care reprezinta fisierul cel mai mare in stiva si se prelucreaza subfisierul ramas. Putem aplica acelasi algoritm pentru fiecare din aceste subfisiere .Atunci se scade din nou j cu o unitate si asa mai departe.in momentul cand i=j.Daca sirul de chei de intrare este chiar sortat.insa vom arata ca QS(n)=O(nlog n).r) .dupa scaderea lui j urmeaza cresterea lui i.propusa de C.prima inregistrare R_1 va fi deja in pozitia ei finala din sirul sortat. while i<k do begin repeat i i+1 until S[i] • S.«.cum ar fi insertia simpla.2.r_k). if k>i then interschimba S[k] si S[i] end.«.atunci procesul de partitionare se desfasoara ineficient si numarul de comparatii de chei este patratic. S S[l].care se depun intr-o stiva care contine toate aceste perechi (l_k. repeat k k-1 until S[k] ” S. In interiorul calculatorului.r).

K_i K si se merge la 2. Vom rezolva aceasta recurenta in felul urmator : aducand la acelasi numitor gasim: nQS(n) = n(n+1)+2 ™ QS(k).3. 3.expresie care este asimptotic egala cu 2 nln n = O(nlog n).2. Daca j<r se merge la 5 . -------------------------------------------------------------------------------------------------------------------.K_n (n • 2) permutandu-le intre ele pe acelasi spatiu de memorie. Daca K_j<K_{j+1}. Se observa ca aceasta suma este egala cu QS(n) = n+1+2™QS(k)/n pentru n • 2.printr-o procedura de selectie cum este cea care va fi descrisa in continuare. rezulta ca pe prima pozitie se gaseste cel mai mare elem ent din tabel. se merge la 8 7.9.Insa 1/(n+1)+«+1/3 = H_{n+1}-3/2. daca j=r se merge la 6 si daca j>r se merge la 8.unde suma se efectueaza de la k=0 la k=n1.atunci l l -1.S[2].unde H_{n+1} = 1+1/2+«+1/(n+1) este cel de al (n+1)-lea numar armonic. 2.unde [k/2] reprezinta partea intreaga din k/2.Este evident ca QS(0)=QS(1)=0.putem obtine un algoritm eficient de sortare. Daca K • K_j. K_i K_j si se merge la 4 8.sirul 10. se executa j j+1 6. Sortare optima -----------------------------------------------------------------------------------------------------------------------Daca prima cheie este k.putem scrie : QS(n) = ™(n+1+QS(k-1)+QS(n-k))/n.«.Conform teoremei lui Euler. scriind aceasta ecuatie pentru n-1 si scazand membru cu membru egalitatile obtinute gasim QS(n)/(n+1) = 2/(n+1)+QS(n-1)/n. Daca l>1. se gaseste P(n) = 2/(n+1)+P(n-1) = 2/(n+1)+2/n+P(n-2) = «= 2(1/(n+1)+1/n+ «+ 1/3). l [n/2]+1. unde suma se efectueaza de la k=1 la k=n. deoarece P(1) = 0. altfel se face K K_r. i j si j 2j.r n 2. j l 4.4.D e exemplu.daca aceasta faza necesita n+1 comparatii de chei. Algoritmul de sortare care urmeaza presupune ca trebuie sortate cheile K_1.atunci in urma primei faze a algoritmului de sortare rapida rezulta doua subfisiere de lungimi egale cu k-1 si n-k .deci QS(n) = 2(n+1)(H_{n+1}-3/2). 5.Daca putem transforma un sir oarecare de chei intr-un ansamblu.15 Structuri de date si tehnici de programare .ceea ce nu implica faptul ca tabelul este ordonat descrescator.K K_l . K_r K_1 si r r-1 .H_{n}-ln n converge la constanta gamma (§ 0.S[n] formeaza un ansamblu (heap) daca S[[k/2]] • S[k] pentru orice 2 ” k ” n.5 este un ansamblu.«. Exemplul 2 Algoritmul sortarii de ansamble 1. Daca notam P(n) = QS(n)/(n+1). Daca un astfel de tablou este un ansamblu . Ce este un ansamblu (heap)? Un tabel ordonat S[1].57). daca r=1 se face K_1 K si stop.6.

K_{j-2}. se merge la 3 (Daca i=0. 1.n i j-1. «.care foloseste un sir de incrementi h_t.atunci K este cea mai mica cheie gasita pana in acel moment.h_{t-1}.Deoarece sunt n faze. 4.h_1. Se executa pasii de la 2 la 5 pentru j=2. R spuns: Deoarece indicele j care guverneaza comparatiile de chei se inmulteste in mod repetat cu 2 pana cand devine mai mare ca n.interschimband pe K_i in mod repetat cu cel mai mare dintre fiii sai.2.se merge la 5 R_{i+1} R_i .descoperindu-se ca R_{j} trebuie inserata intre R_{i} si R_{i+1}.se procedeaza in felul urmator : Se compara pe rand noua cheie K_j cu cheile K_{j-1}. Daca i > 0. « .«. i i-1. complexitatea totala a algoritmului este egala cu O(nlog n).in faza de selectie l=1 si r descreste de la n la 1. R R_j Daca K • K_i.astfel incat R se pl aseaza pe prima pozitie).Prin suprapunerea acestor sortari prin insertie in final se obtine sirul 16 --------------------------------------------------------------------------------------------------------------Structuri de date si tehnici de programare .In faza de constructie r=n si l descreste la 1 . h_1 =1 pentru a sorta prin aceasta metoda cheile situate la o distanta egala cu h_t. 5. Sortare optima ------------------------------------------------------------------------------------------------------------------------ La pasul 2 daca l>1 suntem in faza de construire a ansamblului si adaugam cheia K_l .«.K_r. Întrebare: Care este complexitatea algoritmului sortarii de ansamble la sortarea a n chei?. 3.rezulta ca la fiecare faza numarul de comparatii este de ordinul lui O(log n). D.interschimbam pe K_1 cu K_r si trebuie sa restabilim proprietatea de ansamblu in multimea d e chei K_1. 2.in caz contrar suntem in faza de selectie.cheia K_1 este cea mai mare cheie dintre K_1. « R_{j-1} au fost rearanjate astfel incat K_1 ” K_2 ” « ” K_{j-1}. K K_j.dupa care se muta inregistrarile R_{j-1}. R_{i+1} R.3.Shell a propus metoda de sortare prin insertie multipla. Exemplul 3 Algoritmul de sortare prin insertie simpla Ideea algoritmului se bazeaza pe urmatoarea observatie : Daca 1 < j ” n si inregistrarile R_1. «.pentru a insera inregistrarea R_{j} la locul ei in acest sir.K_{r-1}.«. « .R_{i+1} cu cate o pozitie la dreapta in aceasta ordine si se depune inregi strarea R_{j} pe pozitia i+1.

h h_s si executa pasii de la 3 la 6 pentru j=h+1.fiecare permutare a cheilor defineste un drum unic de la radacina arborelui la o frunza. Daca i>0. Se executa pasul 2 pentru s=t.nu ale cheilor care ocupa in mod curent pozitiile i si j ale fisierului dupa ce s-au facut interschimbari ale cheilor.Frunzele unui arbore de decizie reprezinta diferitele iesiri ale algoritmului.deoarece h_1=1. 2. Fiecare nod terminal (frunza) a acestui arbore contine o permutare a_1a_2«a_n a multimii {1. R R_j 4. R_{i+h} R_i .2.adica ne asiguram ca cheia K_i ” K_{i+h} pentru 1 ” i ” n-h) 3.Daca nu se fac comparatii redundante.«.2. « . Orice metoda de sortare bazata pe compararea a n chei distincte poate fi reprezentata printr-un arbore binar :fiecare nod intern contine doi indici i :j .«.Se poate acum defini cazul cel mai nefavorabil al complexitatii problemei de sortare.daca frunza atinsa pentru aceasta intrare este etichetata cu permutarea p.K_n.Un arbore de decizie este un arbore binar ale carui noduri au etichete de forma K_i :K_j.«. Sortare optima Vom face un scurt studiu al algoritmilor de sortare bazat numai pe relatia de ordine < intre chei.deci exista exact n ! frunze intr-un arbore care sorteaza n chei fara comparatii redundante.Pentru un arbore de -------------------------------------------------------------------------------------------------------------------. K K_j . R_{i+h} R.4.vom presupune toate cheile distincte doua cate doua.«. « . Sortare optima -----------------------------------------------------------------------------------------------------------------------sortat.deci exista numai doua raspunsuri posibile la compararea a doua chei K_i si K_j: fie K_i<K_j fie K_i>K_j.17 Structuri de date si tehnici de programare . i i-h.n (Se foloseste algoritmul de insertie simpla pentru a sorta elementele care sunt la o distanta egala cu h in sir.Daca K_i<K_j mergem in subarborele stang al acestui nod si facem comparatiile indicate acolo.2.t -1.care reprezinta o comparatie a cheilor K_i si K_j.O comparatie a lui K_i cu K_j in acest arbore semnifica o comparatie intre valorile originale ale acestor chei.n}.atunci K_p(1) ” K_p(2) ” « ” K_p(n).se merge la 4 6.Algoritmul de sortare prin insertie multipla se poate scrie astfel : 1.reprezentand faptul ca algoritmul a stabilit ordinea K_{a_{1}}<K_{a_{2}}< « <K_{a_{n}} a cheilor.iar daca K_i>K_j mergem in subarborele drept. Printr-o alegere convenabila a incrementilor h_t.Pentru simplitate.h_1 se pot imbunatati performantele algoritmului de sortare prin insertie simpla. i j-h .Cele doua muchii care ies dintr-un nod intern sunt etichetate cu < si >.1 2.prin micsorarea numarului de comparatii de chei. Se spune ca un arbore de decizie binar rezolva problema de sortare de dimensiune n daca exista o etichetare a frunzelor lui T cu permutari ale multimii {1. Daca K • K_i se merge la 6 5.n} astfel incat pentru orice sir de intrare K_1.

putine valori ale functiei S(n) sunt cunoscute. Deci S(n) este asimptotic egal cu nlog n .daca nivelul radacinii este notat cu 0.de exemplu S(3)=3. O margine superioara pentru S(n) se obtine de exemplu din analiza algoritmului sortarii de ansamble : S(n) ” nlog n + O(n).2. Folosind aproximatia lui Stirling pentru n ! obtinem ca log n ! = (n+1/2)log n-n/ln 2 + O(1) = nlog n-1.Sa notam S(n) = max_{T} h(T).un arbore de inaltime k are cel mult 2^k frunze.adica numarul maxim de nivel.logaritmul fiind in baza 2.deci 2^S(n) • n !.S(4)=5.Deci S(n) este complexitatea minima in cazul cel mai nefavorabil pentru orice algoritm de sortare care sorteaza n chei distincte. unde T parcurge multimea tuturor arborilor de decizie pentru sortarea a n elemente.deci S(n) • log n !.43n+O(log n).Daca S(n) ” k. Sortare optima -----------------------------------------------------------------------------------------------------------------------decizie T vom nota cu h(T) inaltimea arborelui. 18 --------------------------------------------------------------------------------------------------------------Structuri de date si tehnici de programare .Este clar ca h(T) reprezinta numarul maxim de comparatii de chei necesare pentru sortarea oricarui sir de chei de lungime n cu arborele de decizie T.Un arbore pentru sortarea a n chei are cel putin n ! frunze.S(5)=6 etc.de unde se deduce ca limita cand n tinde la ’ din S(n)/nlog n este egala cu 1.

Sa se indice un algoritm pentru gasirea tuturor cheilor distincte doua cate doua dintr-un sir de n chei care sa aiba complexitatea O(nlog n) utilizand ideea de sortare. în continuarea enun urilor 2. Sa se arate ca prima cheie dintr-un ansamblu este cea mai mare cheie din acel ansamblu.2.Sa se arate ca un astfel de algoritm face cel mult m+n-1 operatii de comparatii de chei. Care este numarul de comparatii de chei efectuate de alg oritmul de sortare rapida in cazul unui sir deja sortat ? 4.Sa se scrie un algoritm care sa interclaseze cele doua siruri de chei intr -un singur sir sortat. Se considera doua siruri de chei sortate x_1 ” x_2 ” « ”x_m si y_1 ” y_2 ” « ” y_n.prin compararea de fiecare data a celor mai mici chei din cele doua siruri. R spunsurile la test se vor da în spa iul liber din chenar. 5. Sortare optima ------------------------------------------------------------------------------------------------------------------------ Testul de autoevaluare nr.19 Structuri de date si tehnici de programare . -------------------------------------------------------------------------------------------------------------------. R spunsurile la acest test se g sesc la pagina 20 a acestei unit i de înv are.continand m+n chei. 1 1. Sa se arate ca orice algoritm care face comparatii a cate doua chei va face cel putin n-1 comparatii pentru a gasi maximum (sau minimum) din n chei. 3.

Daca insa intai se sorteaza cheile cu un algoritm de complexitate O(nlog n) si apoi se face o trecere prin ele marind cu cate o unitatea valoarea unui contor de fiecare data cand intalnim o cheie diferita de cea precedenta.deoarece cel putin o cheie se copiaza.cand unul dintre siruri este epuizat. 3. 1 Consulta i bibliografia pentru a afla : 1. 20 --------------------------------------------------------------------------------------------------------------Structuri de date si tehnici de programare .egala cu n-1. In momentul cand unul dintre sir uri este epuizat.care se gaseste pe prima pozitie curenta. Cum pot fi rearanjate inregistrarile R_1«R_n sub forma R_p(1)«R_p(n).iar cea mai mica cheie dintre acestea se depune in sirul final z_1 ” z_2 ” « ” z_{m+n}. Se compara de fiecare data cea mai mica cheie din cele doua siruri.iar cel de al doilea mai contine o singura cheie. 2. Sortare optima ------------------------------------------------------------------------------------------------------------------------ Tema de autoinstruire nr.2. operatie de complexitate O(n). Daca se compara cheile doua cate doua rezulta un algoritm cu complexitatea O(n^2). Comentarii i r spunsuri la testele de autoevaluare Testul 1.se copiaza ceea ce a ramas din celalalt in sirul final. Se observa usor ca acest numar de comparatii de chei poate fi atins.rezulta in final un algoritm de complexitate O(nlog n).este clar ca numarul maxim de comparatii de chei este m+n-1.5.fiind data permutarea p?. 2.fie in urma unei copieri.Deoarece orice cheie ajunge in sirul final fie in urma unei comparatii. 1. Cum procedeaza algoritmul de sortare prin metoda bulelor si pentru ce siruri acesta are o complexitate minima.cand sorteaza siruri de chei de lungime n ?.in acelasi spatiu de memorie.

5.K_{2p+1}) pentru orice p • 1. Sortare optima ------------------------------------------------------------------------------------------------------------------------ 3. Daca (K_1. 4. Un astfel de algoritm compara cheile cate doua si retine maximum lor intr-un nod tata .înso i i programul de o documenta ie privind problema tratat .vor exista n-1 noduri interne. Dupa fiecare faza a algoritmului de sortare rapida prima cheie ramane pe loc.introduce i în program un num r suficient de comentarii pentru buna în elegere a programelor. vor fi expediate prin mail tutorelui.Deoarece exista n frunze. dar i dificult ile întâm pinate. Lucrare de verificare pentru studen i Scrie i un program pentru sortarea unui sir de chei prin metoda sortarii de ansamble (heap sort). 2.se poate reprezenta printr-un arbore binar strict cu cele n chei dintre care se alege maximum drept frunze.adica n-1. Rezolv rile.6. intreg procesul.avem K_m ” K_[m/2] ” K_[[m/2]/2] ” « ”K_1.obtinem in final numarul 1.2. Indica ii de redactare: .«. modul de introducere a datelor i aspecte deosebite fo losite la elaborarea programului.Deci numarul total de comparatii de chei este egal cu (n-1)+(n-2)+ «+1 = n(n-1)/2 = O(n^2).Insa numarul de noduri interne este egal cu numarul de comparatii de chei. Rezulta ca oricare ar fi indicele m.atunci K_p • max (K_{2p}. .dar e ste comparata cu toate cheile ramase. -------------------------------------------------------------------------------------------------------------------.cand nu se fac comparatii redundante. deoarece luand mereu partea intreaga din numarul m care se imparte repetat la 2.21 Structuri de date si tehnici de programare .K_n) este un ansamblu.

[4] S. Springer-Verlag. Data Structures. [2] K. Data Structures and Algorithms. Mc Graw Hill. Algorithms. and Applications in C ++. Tomescu. 1973. Sortare optima ------------------------------------------------------------------------------------------------------------------------ 2. Data Structures. Editura Teora. Knuth. 22 --------------------------------------------------------------------------------------------------------------Structuri de date si tehnici de programare . I.7. 2008. Editura Tehnica.1984. Tratat de programarea calculatoarelor. Bucuresti. Berlin. 2000. Sahni. [5] I.2. [3] S. Mc Graw Hill. Mehlhorn. Algorithms. Sahni. Editura Universitatii din Bucuresti. and Applications in Java . Data Structures. E. Vol. Bibliografie [1] D.1998. retiparit. 2000.

...................................In general......... ........................ 3 ...............................Dupa ce cautarea s-a incheiat...... Bibliografie ...... 23 3. 23 3................3.............1....... ............... Utilizati algoritmul de cautare binara si sa -i evaluati performantele..................... .............. 32 3..presupunem ca fiecare inregistrare contine un camp special numit cheie dupa care se face cautarea.................. 3 Dup ce ve i parcurge aceast unitate de înv are. Ce este cautarea (regasirea informatiei) .. ............... .....................................Ca si in cazul sortarii... Arbori binari optimi pentru cautare . ..... 30 3............. Ce este cautarea (regasirea informatiei) De multe ori suntem confruntati cu urmatoa rea problema : cum trebuie organizate datele astfel incat regasirea lor sa fie cat mai rapida..4...... ve i reu i s : y y y Aflati in ce consta regasirea informatiei si cum se clasifica metodele de cautare ............Vom impune cerinta ca cele n chei sa fie distincte.... Regasirea informatiei ------------------------------------------------------------------------------------------------------------------------ Unitatea de înv are Nr... 33 Obiectivele unit ii de înv are nr........................................ ...........7...... Aceste cautari de obicei se fac in baze de date care contin fisiere de mari dimensiuni.............. 3 REGASIREA INFORMATIEI Cuprins Obiectivele unit ii de în v are nr......................astfel incat fiecare cheie sa identifice in mod unic inregistrarea asociata...vom presupune ca o multime de n inregistrari a fost memorata si ne punem problema sa avem acces cat mai rapid la o anumita inregistrare.. Aflati cum se construiesc arborii binari optimi pentru cautare folosind programarea dinamica.......... ............. Ce este un fisier cu autoorganizare ?.. ....... 25 3. 3.........3. .......6........... ...... 33 3..... ................ .............1..... ..........exista doua posibilitati : cautarea a fost cu -------------------------------------------------------------------------------------------------------------------........ 27 3................................. Lucrare de verificare pentru studen i ............ Algoritmii de cautare sunt prezentati cu argumentul cautarii K si problema de cautare este de a gasi inregistrarea care are cheia K...2......... . Un prim exemplu : algoritmul de cautare binara .. Comentarii i r spunsuri la testele de autoevaluare .....5.....23 Stucturi de date si tehnici de programare ................

K=K_i (cautarea este incheiata) .in caz ca a nu a fost gasit.negasindu-se nicio inregistrare cu cheia K. next un while a  do if a< next od high n intreg in intervalul [low.Operatia de cautare este cea care consuma cel mai mult timp in multe programe. « . Regasirea informatiei -----------------------------------------------------------------------------------------------------------------------succes.Metodele de cautare se pot imparti de asemenea in metode care folosesc valoarea reala a cheii si acelea care utilizeaza chei transformate (prin anumite metode de dispersare).inafara cazului cand cheia K_i este apropiata de unul dintre capetele fisierului initial.R_n nu mai este luat in considerare) . K>K_i.Exista multe proceduri de regasirea informatiei bazate p e structuri arborescente.De asemenea vom vedea ca exista o anumita legatura intre sortare si cautare.este mai convenabil sa -l ordonam dupa valorile cheilor cautate K_1 <K_2 < « <K_n (am presupus ca orice cheie nu apare de doua ori).sortarea facand cautarea mai rapida. o metoda care procedeaza in acest mod se numeste un algoritm de cautare si insertie . In general.cautarea continua in functie de cazurile : K<K_i . Vom discuta metode de cautare bazate pe ordinea liniara a cheilor.Aici cuvantul static se refera la faptul ca tabelul in care se face cautarea este neschimbat si dinamic inseamna faptul ca tabelul este supus frecvent la insertii si suprimari de inregistrari.Dupa o cautare fara succes este uneori de dorit sa inseram o noua inregistrare care contine cheia K in tabel .high] K[next] si high >low K[next] then high next -1 else low next+1 fi un intreg din intervalul [low.vom proceda in consecinta fie cu partea inferioara fie cu partea superioara a tabelului.Dupa ce am comparat cheia K pe care o cautam cu o cheie K_i din tabel.Daca multimea ordonata de chei S={K_1<K_2< « <K_n} este memorata in tabelul K[1 « n] astfel incat K[i]=K_i si cheia a se gaseste in universul cheilor U.3.din care diferiti algoritmi particulari se obtin inlocuind liniile (2) si (7) prin diferite strategii specifice pentru alegerea variabilei next : (1) (2) (3) (4) (5) (6) (7) (8) low 1 . « .iar cautarea unor structuri de date cat mai eficiente in perspectiva cautarii continua si in prezent. K=K_i . la cautarea unei inregistrari cu o cheie data se ignora orice alta informatie in afara cheii cautate. K>K_i (subfisierul R_1.localizandu-se unica inregistrare care are cheia K sau a fost fara succes. de exemplu o clasificare poate fi in metode de cautare statice si dinamice.Aceasta idee conduce la urmatorul algoritm general.dupa compararea cheii K cu K_i avem fie : K<K_i (cand subfisierul R_i.R_{i+1}.high] 24 --------------------------------------------------------------------------------------------------------------Structuri de date si tehnici de programare .astfel incat gasirea unui algoritm eficient de cautare are o importanta deosebita.Cand efectuam multe cautari intr-un tabel.pentru a decide daca a este un element al lui S il vom compara pe a cu un element din tabel .R_i nu mai este cercetat pentru gasirea cheii K).Intr -un astfel de tabel.In fiecare dintre aceste cazuri am facut un progres substantial. Metodele de cautare pot fi clasificate in multe feluri .R_2.

Daca high < low atunci a nu se gaseste in S.n. 3. Acest algoritm poate fi asociat unui arbore de decizie binar . 1. daca K>K_i.Daca ajungem in frunza cu eticheta 0 inseamna ca cheia cautata K<K_1 .3. u i-1 si se merge la 2 .a=1/(n+1) si S inclusa in intervalul deschis (0. 5. 3.Daca a=K[next] atunci cautarea a fost cu succes.frunzele sunt etichetate cu numerele 0. l i+1 si se merge la 2.eticheta i semnificand o comparatie cu cheia K_i.2.Corectitudinea algoritmului este independenta de alegerea particulara facuta in liniile (2) si (7). Algoritmul de cautare binara.K[high]}.al carui algoritm il rescriem in conti nuare. « .In cazul cand subarborele stang (drept) este vid avem cautare fara succes si ajungem intr-o frunza .l 1.«. altfel se face i [(l+u)/2].«.atunci algoritmul se termina cu insucces.R_n ale caror chei sunt in ordine crescatoare : K_1<K_2< «<K_n.Cazul cel mai nefavorabil pentru algoritmul de cautare prin interpolare este O( n) (se poate alege K[0]=0.25 Stucturi de date si tehnici de programare .K[n+1]=1.In acest caz avem mereu next=low si cautarea prin interpolare se reduce la cautarea liniara.cheia fiind gasita.ca si in cazul cautarii binare. mergi la 4.a)). Un prim exemplu : Algoritmul de cautare binara se creste i Exemplul 1 Algoritmul de cautare care urmeaza realizeaza cautarea unei chei K intr-un tabel de inregistrari R_1. Regasirea informatiei -----------------------------------------------------------------------------------------------------------------------(9) if a=K[next] then ³cautare cu succes´ else ³cautare fara succes´ Cautarea liniara se obtine alegand next low.R_2.Aplicarea algoritmului se termina deoarece diferenta high ± low descreste cu cel putin o unitate la fiecare executie a ciclului. La cautarea prin interpolare se presupun e ca s-au adaugat pozitiile K[0] si K[n+1] si au fost completate cu chei artificiale. Daca K<K_i.u n 2.mijlocul aproximativ al tabelului.Daca cheia K a fost gasita ne oprim.pentru eticheta n avem K>K_n si pentru eticheta i cu 0<i<n avem -------------------------------------------------------------------------------------------------------------------.1.In aceste cazuri cautarea a fost fara succes.nodurile interne sunt etichetate cu numere naturale de la 0 la n.daca nu mergem in radacina subarborelui stang daca acesta este nevid si facem comparatia cu cheia al carui indice eticheteaza aceasta radacina daca cheia K<K_i si analog pentru subarborele drept daca cheia K>K_i.Daca a  K[next] stim ca a apartine lui S implica faptul ca a se gaseste in multimea {K[low].Daca u<l.cautarea binara luand next [(low+high)/2] si cautarea prin interpolare alegand next low 1+[(a-K[low-1])(high-low+1)/(K[high+1]-K[low-1])].Daca high = low atunci next = high si deci a nu se gaseste in S.Complexitatea medie este mult mai buna. se merge la 5 si daca K=K_i algoritmul se termina cu succ es. 4.

subarborele stang este arborele corespunzator unei cautari binare pentru n/2 -1 chei.comparand cheia K cu K_4 .notata I(T). Aceasta inseamna ca pentru n=2^k-1 toate frunzele arborelui binar se gasesc pe un singur nivel k.n.o cautare cu succes cu algoritmul de cautare binara necesita cel mult k comparatii .2.independenta de forma arborelui. iar subarborele drept este arborele corespunzator unei cautari binare pentru [n/2] chei cu toate etichetele nodurilor marite cu n/2 . Rezulta ca numarul de comparatii de chei efectuate de algoritmul de cautare binara atat in cazul unei cautari cu succes cat si a unei cautari fara succes este majorat de [log n]+1 in cazul unui tabel care contine n chei in ordine crescatoare. Modul de reprezentare a algoritmului de cautare binara ne permite sa evaluam numarul mediu de comparatii de chei efectuate de acest algoritm intr-un mod simplu : sa notam cu C_n numarul mediu de comparatii de chei intr-o cautare cu succes.2.este suma lungimilor drumurilor de la radacina lui T la toate nodurile interne ale lui T. In cazul general.daca n=2^k-1.presupunand ca toate cele n chei sunt egal probabile si cu C¶_n numarul mediu de comparatii intr-o 26 --------------------------------------------------------------------------------------------------------------Structuri de date si tehnici de programare .arborele binar care corespunde algoritmului de cautare binara pentru n chei se poate construi astfel : daca n=0 arborele contine o singura frunza cu eticheta 0.Daca cheia K<K_8 se merge in subarborele stang al radacinii.o cautare fara succes necesita k comparatii de chei. Reciproc.in mod similar.1.daca arborele T este un arbore binar strict cu n noduri interne.n-1.daca cheia K>K_8 se merge in subarborele drept si se compara cheia K cu K_12 etc. Se defineste lungimea drumului extern al unui arbore binar T ca fiind suma lungimilor (numarul de muchii) ale drumurilor care unesc radacina cu frunzele lui T si se noteaza cu E(T).de la stanga la dreapta.Pentru a face distinctie intre nodurile interne si frunze. E(T)-I(T) = 2n.iar daca 2^{k-1} ” n <2^k-1.n in ordinea simetrica.iar 8 este eticheta radacinii.orice algoritm pentru cautarea intr-un tabel cu n chei cu ajutorul comparatiilor neredundante poate fi reprezentat ca un arbore binar in care nodurile interne sunt etichetate cu numerele de la 1 la n si frunzele cu numerele de la 0 la n.De exemplu.orice arbore binar cu n noduri interne (si n+1 frunze) corespunde unui algoritm valid de cautare a unei chei intr -un tabel sortat cu n chei.In mod analog lungimea drumului intern.daca etichetam nodurile interne si frunzele sale cu etichetele 0. Metoda de construire a arborilor binari asociati algoritmului de cautare binara permite sa se demonstreze prin inductie dupa n urmatorul rezultat : Daca 2^{k-1} ” n <2^k.In c az contrar.pentru n=16 prima comparatie facuta este cu cheia K_8.n-1.o cautare fara succes necesita k-1 sau k comparatii de chei.Intre aceste doua marimi exista relatia.1. « . In mod asemanator.iar pentru 2^{k-1} ” n <2^k-1 frunzele se gasesc pe nivelele consecutive k-1 si k. de exemplu daca K_6<K<K_7 ajungem in frunza cu eticheta 6.eticheta radacinii este cel mai mic intreg mai mare sau egal cu n/2.O cautare fara succes conduce la una dintre frunze . Regasirea informatiei -----------------------------------------------------------------------------------------------------------------------situatia K_{i}<K<K_{i+1}.3.notat cu n/2 .primele se pot r eprezenta prin cerculete iar frunzele prin patrate la desenarea arborelui.

K_2.K_2 si K_3 sunt respectiv egale cu p.atunci numerele medii de comparatii de chei in cazul arborilor 1)²5) sunt egale respectiv cu 3p+2q+r .3. p+2q+3r.Am obtinut astfel cinci expresii algebrice.q_1.K_2. (2n+1)-uplul (q_0.Dar lungimea drumului extern E(T) este minima numai daca toate frunzele se gasesc pe cel mult doua nivele consecutive (ele se pot gasi pe un singur nivel numai daca arborele este complet si n=2^k-1).K_2 .3.deci el minimizeaza numarul mediu de comparatii atat in cazul cautarii cu succes cat si al cautarii fara succes.este de dorit ca ea sa se gaseasca aproape de radacina arborelui de cautare si deci sa fie gasita repede.corespunzatori ordinii de comparare a cheilor : (1)K_3.deci este cautata frecvent.K_1.fiecare avand o anumita probabilitate de cautare .q_n) se numeste distributia probabilitatilor de acces . p+3q+2r .respectiv mai mare decat K_2 . 4)K_1. Deoarece numarul arborilor binari cu n noduri interne este de natura exponentiala (el este de ordinul O(4^ n/n¥n). (2) K_3.q.p_n.Daca o cheie are o probabilitate mare.Rezulta ca C_n este minim daca si numai daca C¶_n este minim.p_1. Revenind la cazul general.K_2 .mai obtinem relatia C_n = (1+1/n)C¶_n ± 1.dar care au de asemenea o complexitate logaritmica.presupunand ca fiecare dintre cele n+1 intervale dintre chei sunt de asemenea egal probabile.27 Stucturi de date si tehnici de programare .in functie de valorile numerice ale probabilitatilor p.r.vom lua in considerare si probabilitatil e de cautare in cazul cautarilor fara succes (daca avem numai cautari cu succes.Deoarece E(T) = I(T)+2n.Exista 5 arbori posibili de cautare.probabilitatile cautarilor fara succes vor fi egale cu 0). Pentru n=3. Aceasta formula are loc pentru toate metodele de cautare care corespund unor arbori binari. Fie multimea ordonata de chei S={K_1<K_2< « <K_n} si fie p_i (respectiv q_j) probabilitatea operatiei acces( a.dupa cum cheia K este mai mica. 5)K_1.Vom avea C_n = 1+I(T)/n si C¶_n = E(T)/(n+1).Rezulta ca p_i.q.Vom -------------------------------------------------------------------------------------------------------------------. 3.K_1 .Am vazut ca algoritmul cautarii binare satisface aceasta cerinta.pe care le numim costurile arborilor respectivi . « .S) cand a=K_i (respectiv K_j<a<K_{j+1}) pentru 1 ” i ” n ( 0 ” j ” n).Daca probabilitatile d e cautare ale cheilor K_1.pe care ii vom introduce in paragrafele urmatoare.Singurul neajuns major al acestui algoritm es te caracterul static al fisierului in care se face cautarea . 2p+q+2r . 2p+3q+r .adica metode care nu fac comparatii redundante de chei.Apare necesitatea gasirii unui arbore optim pentru cautare.daca se fac multe inserari si stergeri de chei trebuie sa folosim alte structuri de date arborescente mai putin performante.nu putem proceda direct evaluand costurile tuturor a cestor arbori si apoi selectand minimul.K_3.K_3.q_j • 0 si suma tuturor acestor 2n+1 numere este egala cu 1.r putem gasi expresia sau expresiile care minimizeaza costul arborelui binar de cautare.cum sunt arborii echilibrati. Deci q_0 este probabilitatea ca cheia cautata K sa fie mai mica decat K_1 si q_n este probabilitatea ca cheia K>K_n. (3)K_2 si apoi K_1 sau K_3. Arbori binari optimi pentru cautare In continuare vom considera operatia de acces la o multime de chei S. Regasirea informatiei -----------------------------------------------------------------------------------------------------------------------cautare fara succes.avem tabelul alcatuit din cheile K_1<K_2<K_3.

k+1.1.j) si w(i.3.p_1.j).p_j.(K_1. unde 0 ” i.j). (1) unde minimul se ia dupa toti indicii k verificand i < k ” j.Pentru aceasta definitie nu mai este necesar sa cerem ca suma tuturor numerelor nenegative q_0.k-1) + c(k. « .p_n.i+2.atunci putem lega costul acestui subarbore de costurile subarborilor sai stang si respectiv drept in modul urmator : cost(i.Daca notam cu c(i. « . « .K_2).j) = w(i.n (sau ( .p_1.q_1.j) costul unui subarbore optim cu ponderile ( p_{i+1}.algoritmul care va fi prezentat functioneaza in acest caz mai general. « .p_n.q_1.care afirma ca subpoliticile unei politici optime trebuie de asemenea sa fie optime. Pentru aceasta fie T un arbore de cautare pentru multimea S si sa notam cu a_i nivelul (adancimea) nodului intern i (cel de al i-lea nod intern in ordinea simetrica) in arborele T si cu b_j nivelul frunzei j (cea de a (j+1)a frunza in ordinea simetrica sau frunza asociata intervalului dintre chei (K_j.j ” n si i ” j-1.un arbore binar T cu n noduri interne se numeste arbore binar optim de cautare pentru multimea S daca costul sau cost(T) este minim in multimea tuturor arborilor binari de cautare pentru multimea S .numarul asteptat de comparatii de chei este proportional cu cost(T).j) + min (c(i.Daca pentru i < j notam cu R(i.j) multimea tuturor valorilor k pentru care se atinge minimul in aceasta ecuatie.Daca radacina acestui subarbore este k (i < k ” j).Un astfel de subarbore este tot un arbore de cautare.K_1).Acesta este masura de baza pentru eficienta operatiei acces .deoarece atat subarborele stang cat si cel drept relativ la radacina k trebuie sa fie minimi.q_i. 28 --------------------------------------------------------------------------------------------------------------Structuri de date si tehnici de programare .obtinem relatiile: c(i.aceasta multime de indici specifica toate valorile posibile ale radacinii k in cazul subarborilor optimi.k-1) + cost(k.iar subarborele stang are frunzele i. « .K_{j+1})).j)=p_{i+1}+ « +p_j+q_i+ « +q_j si costul unui astfel de subarbore cost(i.j.iar subarborele drept frunzele k.Deci numarul mediu de comparatii de chei este egal cu ™ p_i(1+a_i)+™q_j b_j.Un subarbore are nodurile interne de forma i+1. « .q_j) si presupunem ca c(i.prima suma facandu-se dupa i = 1.n si a doua dupa j = 0.q_n) este o distributie de probabilitati fixata pentru multimea ordonata S={K_1 < K_2 < « < K_n}. « . Daca (q_0.j) + cost(i. Pentru aceasta se va folosi programarea dinamica.j) = w(i.j) sunt definite pentru orice 0 ” i ” j ” n. « . « . )).k-1.q_n sa fie egala cu 1 .(K_n.n si frunzele cu 0.j)) pentru i < j.ceea ce conduce la aparitia termenului w(i.j.daca K_j< a <K_{j+1} atunci il comparam pe a cu b_j elemente din T.i+1. « .j) daca se tine seama ca in cei doi subarbori numerele de nivel scad cu o unitate. « .i) = 0 si c(i.j si frunzele i.2. « . Un arbore binar de cautare pentru multimea S are nodurile interne etichetate cu 1. Regasirea informatiei -----------------------------------------------------------------------------------------------------------------------folosi un algoritm bazat pe ideile programarii dinamice.n.algoritmul rezultat va avea complexitatea timp O(n^3) si complexitatea spatiu O(n^2). insa pentru multimea ordonata de chei {K_{i+1}< « <K_j}.Daca facem o cautare pentru elementul a din S si daca a = K_i. « .Sa notam w(i. Vom numi aceasta expresie costul arborelui T (relativ la distributia data de probabilitati) si il vom nota cu cost( T). construindu-se in mod sistematic solutii optime pentru subprobleme de dimensiuni din ce in ce mai mari .atunci il comparam pe a cu a_i+1 chei din arbore .

j) + p_{j+1} + q_{j+1}.4) + min(c(1.adica c(0. Valorile scrise in paranteze indica valorile lui k pentru care minimul este atins.c(1.2) + min(c(0.k-1) + c(k.Aplicand algoritmul descris se obtine c(0. p_1=1.4) = w(3.1.2.n.n-1. Mai departe fie j-i=3 : c(0.k-1) + c(k.11)= 25 ( k=2.Costul minim al unui astfel de arbore este c(0.29 Stucturi de date si tehnici de programare .4) = 13.3) = 12 (k=3). p_4=0. c(2.iar operatia de minimizare se efectueaza de ™i(n-i) = n^3/3+O(n^2) = O(n^3) ori.j) pot fi calculate recursiv deoarece w(i.k-1) + c(k.3) = 9 + min(6.3)) (unde k= 2. Regasirea informatiei -----------------------------------------------------------------------------------------------------------------------Ecuatia (1) ne da posibilit atea sa evaluam pe c(i.3) + min (c(1.Subarbore le stang al radacinii 3 are frunzele 0.4) =16 + min(13. q_4=10. b)Da.j+1) = w(i.4) = w(0. Vom considera un exemplu de construire a unui arbore binar optim de cautare in cazul n=4.j) pentru j-i=2. q_2=0.4) + min(c(0.2.4) + min(c(2. q_1=0.12) = 31 ( k = 4).c(2.24.2 .4) = w(1.3.3.3) = w(2.2) = w(0.j) succesiv.4) + min(31.se intra intr-un ciclu infinit cand l = u si K>K_u .4) = w(2. « . p_3=3.Deci un arbore de cautare minim se poate obtine cu complexitatea timp O(n^3) si complexitatea spatiu O(n^2).Valorile w(i. c(3.el corespunde indicilor i = 0 si j = 2.2) = 3.3) = w(1.3) = w(0.2) = w(1.k-1) + c(k.k-1)+c(k.16.Rezulta ca radacina arborelui minim este 3.k-1) + c(k.Exista n(n-1)/2 = O(n^2) astfel de valori.1) = w(0.3) = 14 + min(12.2) = 11 si radacina sa este 1.2)) (unde k = 1.4)) (unde k=1.pentru ji = 1.3.deci radacina subarborelui drept al radacinii 3 este 4 si subarborele drept al lui 3 este bine determinat.5)=11(k = 1) .2) = 8 + min(3.cu doi fii care sunt frunzele 1 si 2.folosind o proprietate de monotonie a multimii de indici R(i. 24.unde suma se face dupa i = 1. -------------------------------------------------------------------------------------------------------------------. « .6) = 22 (k=4). c(1.3) = 6.4) = 19 + min(22.In final deducem c(0.3) . 25) (k=3).3)) (unde k = 1. Acum se calculeaza c(i. q_3=3.2. q_0=4.Complexitatea timp se poate inca reduce la O( n^2).j).4)) (unde k=3.Putem transforma distributia initiala de ponderi intr-o distributie de probabilitati impartind fiecare componenta cu suma lor.3) + min (c(0.4)) (unde k = 2.4) = w(0.c(1. p_2=3. 27.11.1) = q_0 + p_1+ q_1=5. Exemplul 2 Întrebare: Va functiona corect algoritmul de cautare binara daca se modifica: a) pasul 5 in l i in loc de l i+1 sau b) pasul 4 in u i in loc de u i -1? R spuns: Exemplul 3 a)Nu.Acum subarborele stang al lui 1 este frunza 0 si subarborele sau stang are radacina 2.

3.4.sirul de chei 134 se modifica astfel : 134 2134 4213 3421 342 432. elementele lui S care sunt mai frecvent cautate vor obtine locuri mai bune.unde n este numarul cheilor.care corespund celor n ! permutari posibile ale cheilor din S.In momentul accesarii unui element din S. Vom mai da un exemplu de aplicare a acestei reguli de deplasare in fata a unei inregistrari odata gasite : Prin operatiile insertie (2).acces (3). Regasirea informatiei ------------------------------------------------------------------------------------------------------------------------ 3.structura de date se autoorganizeaza ca o structura de date eficienta. Ce este un fisier cu autoorganizare ? Ideea autoorganizarii este simpla : Sa presupunem ca avem o structura de date pentru multimea de chei S={x_1.deci probabilitatile limita stationare exista si se pot calcula efectiv in functie de frecventele celo r n chei.Aceasta metoda va face urmatoarele accese la x_i mai usoare.acces (4).ea este mutata la inceputul listei. se poate arata ca numarul asimptotic mediu de comparatii de chei la cautarea cu succes a unei chei nu depaseste dublul numarului optim de comparatii. aceasta inseamna ca atunci cand o inregistrare a fost gasita.Sa mai notam ca nu se mentine explicit nicio contabilitate a frecventei de cautare a unei chei.Acest lant Markov este ireductibil (digraful asociat este tare conex) si aperiodic.suprimare (1).care se fac secvential incepand cu cheia de la inceputul listei.Astfel. 30 --------------------------------------------------------------------------------------------------------------Structuri de date si tehnici de programare .Acest algoritm se implementeaza usor daca tabelul este o lista liniara inlantuita.«.Pentru listele liniare.fie x_i.care corespunde cazului cand cheile sunt aranjate in ordinea descrescatoare a frecventelor (care in general nu sunt cunoscute aprioric).mai apropiate de inceputul listei.acces (4).x_n}. Analiza numarului asimptotic mediu de comparatii de chei la cautarea unei chei se poate face folosind un lant Markov cu n ! stari.il deplasam pe x_i mai aproape de punctul de intrare al structurii de date.Astfel.in sensul ca va micsora numarul de comparatii de chei.

exista urmatoarea relatie intre lungimile drumurilor externe si interne : E(T)=I(T)+2n.31 Stucturi de date si tehnici de programare . Sa se arate ca un arbore binar strict cu n frunze are lungimea drumului extern E(T) minima numai daca toate frunzele se gasesc pe cel mult doua nivele consecutive. în continuarea enun urilor 2.notate prin C_n si respectiv C¶_n : C_n = (1+1/n)C¶_n-1.dar de egalitate ? 4. R spunsurile la acest test se g sesc la pagina 3 2 a acestei unit i de înv are.3. indiferent de forma arborelui.reprezentat printr -un arbore binar cu n noduri interne. R spunsurile la test se vor da în spa iul liber din chenar. 1 1. 3. Regasirea informatiei -----------------------------------------------------------------------------------------------------------------------Testul de autoevaluare nr. Se poate inlocui testul u<l de la pasul 2 al algoritmului de cautare binara cu o conditie echivalenta.exista urmatoarea relatie intre numarul mediu de comparatii in cazul cautarii cu succes si fara succes. Sa se arate ca pentru orice algoritm de cautare a unei chei bazat pe comparatii neredundante. Sa se arate ca pentru orice arbore binar strict T cu n noduri interne. -------------------------------------------------------------------------------------------------------------------.

unde q este cel mai mic intreg mai mare sau egal cu log n.Avem E(T_1) = E(T)-p-1. Exista relatiile C_n = 1+I(T)/n si C¶_n = E(T)/(n+1) . 2. 3.Tatal acestora devine frunza pe nivelul L-1 si y devine nod intern pe nivelul l.E(T_1)-I(T_1) = 2(n-1). 4. Comentarii i r spunsuri la testele de autoevaluare Testul 1.deci E(T)-I(T) = E(T_1)-I(T_1)+2 = 2n. Se poate aplica un rationament inductiv : presupunand proprietatea adevarata pentru toti arborii binari stricti cu n-1 noduri interne. Regasirea informatiei -----------------------------------------------------------------------------------------------------------------------Tema de autoinstruire nr.o vom demonstra pentru arborii binari stricti cu n noduri interne.se poate defini un alt arbore binar strict T_1 cu o lungime strict mai mica a drumului extern in felul urmator : Se transfera u si v pe nivelul l+1 ca fii ai lui y.3. 2.Fir T un arbore binar strict cu n noduri interne.Se obtine E(T)-E(T_1) = 2L-(L-1)+l-2(l+1 ) = L-l1 • 1. Rezulta ca T are toate frunzele pe un singur nivel daca n este o putere a lui 2 sau pe doua nivele consecutive q-1 si q in caz contrar. 32 --------------------------------------------------------------------------------------------------------------Structuri de date si tehnici de programare .Suprimandu-i doua frunze.deci T nu poate avea lungimea minima a drumului extern. 1 Consulta i bibliografia pentru a afla : 1.I(T_1) = I(T)-p+1.tinand seama de 2 se obtine relatia cautata. Care este expresia numarului asimptotic mediu de comparatii de chei la cautarea unei chei in cazul fisierelor cu autoorganizare in functie de probabilitatile de cautare ale celor n chei.deoarece conform ipotezei de inductie.5. Se poate inlocui cu conditia u = l-1. 3.fii ale aceluiasi nod intern x gasim un alt arbore binar strict T_1 cu n-1 noduri interne in care x a devenit frunza. Daca T contine frunzele u si v pe nivelul L. 1. Evaluarea numarului de comparatii de chei efectuate de algoritmul de cautare binara in cazul cautarii cu succes si fara succes.y si z pe nivelul l astfel incat L-l • 2.

1984.6. Rezolv rile. Lucrare de verificare pentru studen i Scrie i un program pentr u gasirea unui arbore binar op tim pentru cautare in cazul a n chei. Vol. modul de introducere a datelor i aspecte deosebite fo losite la elaborarea programului . [2] K. and Applications in Java . [4] S. Algorithms.33 Stucturi de date si tehnici de programare . [5] I. Sahni. Editura Teora.stang si respectiv drept. Berlin.înso i i programul de o documenta ie privind problema tratat . .introduce i în program un num r suficient de comentarii pentru buna în elegere a programelor.1998.3. 2000. 1973. [3] S. 2000. Tratat de programarea calculatoarelor . Editura Universitatii din Bucuresti. Indica ii de redactare: . E. vor fi expediate prin mail tutorelui. dar i dificult ile întâmpinate. Mehlhorn.7. Data Structures. Bucuresti. 3. Mc Graw Hill. Regasirea informatiei ------------------------------------------------------------------------------------------------------------------------ 3.fiind dat vectorul cu 2n+1 componente al probabilitatilor de acces. retiparit. Data Structures. I. Tomescu. Mc Graw Hill. Knuth.Pentru fiecare nod al arborelui care nu este frunza se vor indica radacinile subarborilor sai. Bibliografie [1] D. Data Structures and Algorithms. -------------------------------------------------------------------------------------------------------------------. 2008. Springer-Verlag. and Applications in C ++. Sahni. Data Structures. Algorithms. Editura Tehnica.

.... 36 4.............3.....4.... ........ Lucrare de verificare pentru studen i . ......... Bibliografie ..................... 34 4.... ................. ....adica numarul de noduri interne din subarborele sau stang marit cu o unitate.... ................... Un arbore binar de cautare indexat se obtine dintr-un arbore binar de cautare adaugand in fiecare nod un nou camp......... 4 Dup ce ve i parcurge aceast unitate de înv are. Arbori Fibonacci . 34 -------------------------------------------------------------------------------------------------------------Structuri de date si tehnici de programare ............... y Aflati rolul arborilor Fibonacci printre arborii ec hilibrati dupa inaltime .............. 4........ 35 4.. ... 36 4...................3 si 4 implica de asemenea faptul ca toate cheile din arbore trebuie sa fie distincte..........................1.............. Ce sunt arborii binari de cautare ........ Ce este un arbore echilibrat dupa inaltime (AVL)? .... Ce sunt arborii binari de cautare Un arbore binar de cautare este un arbore binar care poate fi vid.....6... Atat subarborele stang cat si subarborele drept al radacinii sunt de asemenea arbori binari de cautare.............................Rangul unui nod ne arata pozitia relativa a nodului in subarborele a carui radacina este...... Un prim exemplu : algoritm de cautare si insertie in arbore binar .................... 2..4.el are urmatoarele proprietati : 1......atunci toate ch eile din acest subarbore sunt mai mari decat cheia din radacina.. Arbori binari de cautare ------------------------------------------------------------------------------------------------------------------------ Unitatea de înv are Nr..................... .... 3.................. .....................7...................... y Utilizati arborii echilibrati dupa inaltime si sa -i reechilibrati la inserarea/stergerea de chei prin rotatii simple/duble....................... 43 Obiectivele Unit ii de înv are nr.. iar toate cheile arborelui sunt distincte................................. Orice nod are o cheie......... 34 4.2..Daca este nevid.... 4 ARBORI BINARI DE CAUTARE Cuprins Obiectivele unit ii de înv are nr....... .......numit rang..... 4 ..... Sa observam ca proprietatile 2..........1.... ....... 42 4.......................... Daca subarborele drept al radacinii este nevid..................... ve i reu i s : y Aflati rolul arborilor binari de cautare ............................. Daca subarborele stang al radacinii este nevid.... ....... ... .. Comentarii i r spunsuri la testele de autoevaluare . .atunci toate cheile din acest subarbore sunt mai mici decat cheia din radacina ...... y Utilizati arborii de cautare ca structuri de date dinamice . 4. 41 4.......5.......

KEY(Q) K.de forma O(log n).se merge la 3.Daca subarborele in care urmeaza sa se faca cautarea este vid.care poate fi accesat printr-un pointer R catre radacina lui T.2.altfel se merge le 5 .adica R  lambda.daca K>KEY(P).se face P LLINK(P) si se merge la 2 .cheia memorata in NOD(P) . Daca cheia K a fost mai mica decat KEY(P) atunci LLINK(P) Q.Nodurile arborelui contin urmatoarele campuri : KEY(P) . 5. LLINK(P) . RLINK(Q) lambda.se face P RLINK(P) si se merge la 2 .Se presupune ca T este nevid.exista totusi posibilitate a ca sa apara arbori degenerati avand inaltimea O(n).Daca K<KEY(P).Daca cheia K nu este in arbore.In acest caz cautarea se reduce la o cautare secventiala intr-o lista liniara.ea se va insera astfel incat arborele extins sa ramana arbore de cautare.4. Acesti arbori se -------------------------------------------------------------------------------------------------------------------. Un prim exemplu : Algoritm de cautare si inserare in arbore binar se creste i Exemplul 1 Algoritmul de cautare care urmeaza realizeaza cautarea unei chei K intr-un arbore binar de cautare T.35 Stucturi de date si tehnici de programare . Daca LLINK(P)  lambda. 1.legata la stanga sau la dreapta nodului cu a carui cheie s-a facut ultima comparatie.pointer catre radacina subarborelui drept al lui NOD( P).daca K=KEY(P). atunci ea se cauta in subarborele stang sau in subarborele drept.pointer catre radacina subarborelui stang al lui NOD( P). 4. 3. Daca un subarbore este vid. Desi se demonstreaza ca in medie arborii rezultati in aceste mod prin inserare succesiva de chei au totusi o inaltime logaritmica.atunci avem o cautare fara succes si cheia trebuie inserata in arbore. RLINK(P) .astfel incat arborele obtinut sa fie in continuare un arbore binar de cautare. altfel RLINK(P) Q si termina algoritmul .cautarea se termina cu succes . 4.P R 2.au fost propus e mai multe subclase de arbori de cautare care a u inaltime logaritmica.daca cheia nu se gaseste acolo.atunci legatura catre radacina lui are valoarea lambda. Arbori binari de cautare -----------------------------------------------------------------------------------------------------------------------Algoritmul de cautare a unei chei K intr-un arbore binar de cautare utilizeaza proprietatile unui astfel de arbore : mai intai cheia se cauta in radacina .avand complexitatea O(n).se merge la 4 . Daca RLINK(P)  lambda. Pentru a evita aceste cazuri critice. (Cautarea a fost fara succes si se insereaza cheia K in arborele de cautare) : Q DISP (aceasta semnifica scoaterea unui nod din stiva de noduri disponibile si stabilirea unui pointer Q catre el) .dupa cum K este mai mica sau mai mare decat cheia din radacina. LLINK(Q) lambda. Algoritmul de cautare si insertie in arbore binar . Acest algoritm este prezentat in detaliu in continuare.

notati prin AF_k (k = 0. arborele Fibonacci de ordinul k. AF_0 si AF_1 constau dintr-o singura frunza.8. 4.O solutie la problema mentinerii unui bun arbore de cautare cand se fac atat insertii cat si suprimari de chei din arbore a fost propusa de G.operatiile 1) si 2) sunt eficiente.21. 2) gasirea articolului cu numarul de ordine k in lista .Aceasta metoda foloseste numai doi biti suplimentari pe nod si numarul de operatii la cautarea sau inserarea unei chei are complexitatea O(log n).4.Arborii Fibonacci AF_k nu au lungimea drumului extern minima pentru k • 5.M.subarborele sau stang este AF_2 si subarborele drept este o frunza cu eticheta 2 etc. AF_k are radacina cu eticheta F_k.55.«) se definesc prin recurenta in felul urmator : ei sunt arbori binari etichetati .dar operatiile 3) si 4) au o complexitate O( n) . Proprietatile de baza ale acestor arbori sunt enuntate in testul de autoevaluare nr.etichetata cu 0 .proprietati care intervin in demonstrarea rezultatului care arata ca arborii echilibrati au inaltimea logaritmica. Arbori Fibonacci O clasa importanta de arbori echilibrati este clasa arborilor Fibonacci. Ce este un arbore echilibrat dupa inaltime (AVL) ? Algoritmul de cautare si insertie in arbore binar poate produce arbori de cautare buni cand datele de intrare sunt aleatorii.De exemplu.O prima clasa de arbori echilibrati sunt arborii Fibonacci.care vor fi prezentati in continuare.2.Expresia explicita a acestora este data de asa-numita formula a lui Binet (a se vedea testul de autoevaluare nr.Adelson-Velskii si E.3.iar F_1=F_2=1. pentru k • 2. 1).deoarece incepand cu aceasta valoare a lui k frunzele lor nu se mai gasesc pe doua nivele consecutive.89.34.M. Arbori binari de cautare -----------------------------------------------------------------------------------------------------------------------numesc arbori echilibrati.5. 4) suprimarea unui articol specificat.daca se 36 -------------------------------------------------------------------------------------------------------------Structuri de date si tehnici de programare . «. 1. 3) inserarea unui articol intr -un loc specificat .Alte clase sunt arborii echilibrati dupa inaltime (AVL).3.Aceasta abordare permite si reprezentarea listelor liniare de l ungime n astfel incat urmatoarele operatii asupra listei sa fie efectuate in numai O(log n) unitati de timp : 1) gasirea unui articol avand o cheie data . Daca se foloseste alocarea secventiala pentru liste liniare.Primii termeni ai sirului Fibonacci sunt urmatorii : 1.subarborele sau stang este AF_{k-1} iar subarborele drept este AF_{k-2} avand toate etichetele nodurilor interne si ale frunzelor marite cu F_k. 4.echilibrati dupa pondere.arbori rosu -negru etc.1. Arborii Fibonacci.eticheta radacinii lui AF_k.2.fiecare numar din sir incepand cu al treilea fiind egal cu suma celor doua numere care il preced.1.Sirul numerelor Fibonacci se defineste de obicei prin recurenta F_{n+2}=F_{n+1}+F_n pentru orice n • 1.13.dar exista posibilitatea obtinerii unui arbore de cautare degenerat de inaltime O( n).AF_2 are radacina cu eticheta 1 si 2 frunze cu etichetele 0 si 1.AF_3 are radacina cu eticheta 2.Landis in anul 1962.4.

4.deci arborele a ramas arbore binar de cautare. Folosirea arborilor echilibrati pentru memorarea datelor in mem oria interna este benefica pentru n mare.de exemplu.37 Stucturi de date si tehnici de programare .in plus apare factorul de echilibru in fiecare nod.4404log( n+2)0.c.b.Inaltimea unui arbore echilibrat AVL cu n noduri interne este majorata de 1.subarborele stang al lui A este a de inaltime h. Este clar ca orice subarbore al unui arbore echilibrat este de asemenea echilibrat.de radacina B si subarbori b si c si-a crescut inaltimea prin cresterea inaltimii lui c de la h la h+1 .operatiile 3) si 4) sunt eficiente.daca factorul de echilibru este -1 si inaltimea subarborelui stang creste cu o unitate. Arbori binari de cautare -----------------------------------------------------------------------------------------------------------------------foloseste alocarea inlantuita.un arbore de cautare indexat AVL este un arbore de cautare indexat care este si arbore AVL.Factorul de echilibru din fiecare nod este egal prin definitie cu inaltimea subarborelui sau drept minus inaltime a subarborelui sau stang.iar subarborele stang al lui B este c de inaltime h+1. Exista numai doua cazuri care sunt esential distincte cand trebuie facuta reechilibrarea : -cazul 1 : nodul A a capatat factorul de echilibru 2 cand subarborel e sau drept.Mai exista alte doua cazuri esential identice daca schimbam stanga si dreapta intre ele.care ajuta la reechilibrarea arborelui atunci cand se fac insertii si suprimari de noduri.cat era inaltimea subarborelui de radacina A inainte de aparitia dezechilibrului in A.fiul sau stang este A. Reprezentarea listelor liniare sub forma de arbori echilibrati face ca toate cele patru operatii standard sa se faca cu o complexitate egala cu O(log n). Un arbore binar se numeste echilibrat dupa inaltime (sau arbore AVL) daca pentru orice nod intern al sau modulul diferentei dintre inaltimea subarborelui stang si cea a subarborelui drept este cel mult egal cu 1.iar inaltimea acestui subarbore este tot h+2.Se poate arata.cu subarborii a si b.328.iar subarborele stang al lui B este b de inaltime h. Apare problema dezechilibrului cand exista un nod cu factorul de echilibru egal cu 1 pentru care inaltimea subarborelui drept creste cu o unitate in urma inserarii sau dual.417 noduri.dar 1) si 2) au o complexitate liniara in n.Situatia se rezolva printr-o rotatie simpla :acest subarbore se schimba facandu-l pe B radacina. Un arbore de cautare AVL este un arbore de cautare care este si arbore AVL .Deci daca un arbore binar este echilibrat. Definitia arborilor echilibrati AV L reprezinta un compromis intre arborii binari optimi (cand toate frunzele se gasesc pe un singur nivel sau pe doua nivele consecutive) si arborii binari oarecare.atunci factorul de echilibru din fiecare nod este egal cu 1.Sa mai observam ca ordinea subarborilor de la stanga la dreapta este tot a.deci aceasta rotatie simpla nu a produs alte -------------------------------------------------------------------------------------------------------------------. Arborii AVL se reprezinta folosind schema de reprezentare inlantuita pentru arborii binari .0 sau -1.ca o cautare intr un arbore echilibrat va necesita mai mult de 25 comparatii de chei numai daca arborele are cel putin F_27 -1=196. Sa studiem cum pot fi reechilibrati arborii AVL la inserarea unui nou nod.deci cautarea va fi in cel mai nefavorabil caz cu doar 45% mai lunga decat in cazul arborilor optimi.

un camp RANG si un nod cap de lista.de inaltime h si subarborele drept al lui B este d de inaltime h. (Aceasta se poate intampla atunci cand k a fost mai mare decat numarul de noduri din arbore sau k ” 0).pentru descoperirea nodurilor A si B in arbore.iar fiul stang al lui B este X. Arbori binari de cautare -----------------------------------------------------------------------------------------------------------------------dezechilibre in arbore.Fiul drept al lui A este B.Acum nodurile A si B au ambele factorul de echilibru egal cu 0. P LLINK(P) si se merge la 2 4.dar si accesele aleatorii la elementele listei (depasind limitarile alocarii inlantuite).Subarborele stang al lui A este a.Desigur.Numarul de legaturi modificate este egal cu 5.iar pentru realizarea rotatiei simple a trebuit sa modificam exact 3 campuri de legatura.In acest caz trebuie sa punem in evidenta radacina X a subarborelui stang al lui B. Daca P = lambda algoritmul se termina fara succes. Arborii echilibrati pot fi utilizati pentru a reprezenta listele liniare astfel incat insertiile de chei sa se faca rapid (depasind dificultatile alocarii secventiale).fiind data valoarea lui k.inaltimea unuia dintre ei a crescut de la h-1 la h.Reamintim ca acest camp indica pozitia relativa a nodului respectiv in subarborele sau.adica numarul de noduri din subarborele sau stang plus o unitate. M M-RANG(P) . Algoritm de cautare in arbore binar dupa pozitie 1. P RLINK(P) si se merge la 2.care are subarborele stang a si subarborele drept b si fiul drept B cu subarborele stang c si subarborele drept d.a trebuit sa memorizam ultimul nod parcurs cu un factor de echilibru egal cu 1 in acest caz si sa modificam toti factorii de echilibru ai nodurilor pe drumul de la A la nodul nou inserat in arbore.inaltimea arborelui fiind logaritmica.cu fiul stang A.Pentru aceasta se folosesc arborii binari de cautare indexati care contin campul RANG in fiecare nod.Factorul de echilibru al radacinii X devine 0.iar inaltimea intregului subarbore dupa rotatia dubla este tot h+2.b.c.d.deci ramane arbore de cautare. Fiind data o lista liniara reprezentata ca un arbore binar. daca M>RANG(P) se merge la 4 . Altfel. P RLINK(HEAD) 2. M k. -cazul 2 : factorul de echilibru al nodului A a crescut la 2 prin cresterea cu o unitate a inaltimii subarborelui stang al lui B. Rotatia dubla reface echilibrul facandu-l pe X radacina a subarborelui.astfel incat ordinea subarborilor este tot a.algoritmul care urmeaza gaseste al k-lea element al listei (al k-lea nod al arborelui in ordinea simetrica). Exemplul 2 38 -------------------------------------------------------------------------------------------------------------Structuri de date si tehnici de programare .daca M<RANG(P) se merge la 3 .Arborele binar se presupune reprezentat astfel incat fiecare nod are campurile LLINK si RLINK.care are subarborii b si c . Folosind campul RANG regasirea dupa pozitie se face modificand algoritmul de cautare in arbore binar.4. daca M=RANG(P) algoritmul se termina cu succes (P este adresa celui de al k -lea nod) 3. Aceasta operatie are de asemenea complexitatea O(log n ).

39 Stucturi de date si tehnici de programare .4.initial vid si apoi Exemplul 3 se aplica algoritmul listetraversare in inordine (ordinea simetrica). -------------------------------------------------------------------------------------------------------------------. Arbori binari de cautare -----------------------------------------------------------------------------------------------------------------------Întrebare: In ce mod poate fi utilizat un arbore binar de cautare pentru a so rta n chei? R spuns: Se insereaza cele n chei intr-un arbore binar de cautare.ceea Serializarea unei de circulare ce va produce sirul sortat al celor n chei.

în continuarea enun urilor R spunsurile la acest test se g sesc la pagina 41 a acestei unit i de înv are. R spunsurile la test se vor da în spa iul liber din chenar. Sa se arate ca numerele Fibonacci au expresia : F_n=1/¥5((1+¥5)/2)^n-1/¥5((1-¥5)/2)^n (Formula lui Binet). 40 -------------------------------------------------------------------------------------------------------------Structuri de date si tehnici de programare . Sa se arate ca arborii Fibonac ci AF_k (k • 1) sunt arbori echilibrati care au inaltimea h(AF_k)=k-1. 2. Sa se justifice faptul ca inaltimea unui arbore echilibrat T cu n noduri interne se afla cuprinsa intre log( n+1) si 1.logaritmii fiind in baza 2. Sa se arate ca arborii Fibonacci de ordinul h+1. 1 1. 3. 4.4.4404log(n+2)0. AF_{h+1} au cel mai mic numar de noduri interne in multimea arborilor echilibrati de inaltime h si acest numar minim de noduri interne este egal cu F_{h+2}-1.F_{k+1} frunze si F_{k+1}-1 noduri interne.328. Arbori binari de cautare -----------------------------------------------------------------------------------------------------------------------Testul de autoevaluare nr.

2}= (1+¥5)/2 si (1-¥5)/2. 3.4. Arbori binari de cautare -----------------------------------------------------------------------------------------------------------------------Tema de autoinstruire nr.Solutia generala a recurentei date este F_n=C_1(r_1)^n+C_2(r_2)^n.gasim h(AF_k)=h(AF_{k-1})+1=k-1.41 Stucturi de date si tehnici de programare . Se cauta o solutie a acestei recurente de forma F_n=r^n si se obtine ecuatia caracteristica r^2-r-1=0 cu solutiile r_{1. Cum se pot folosi arborii echilibrati indexati pentru reprezentarea listelor liniare. Comentarii i r spunsuri la testele de autoevaluare Testul 1.Daca se presupune ca ea este adevarata pentru toti arborii AF_{k¶} cu k¶<k si daca AF_k este un arbore Fibonacci de ordinul k (k • 3). Ce sunt si ce proprietati au arborii splay.Punand conditia F_1=1 si F_2=1 se obtine C_1=1/¥5 si C_2=-1/¥5. 1 Consulta i bibliografia pentru a afla : 1. 4. Proprietatile B-arborilor ca extindere a arborilor binari de cautare pentru memoria secundara.astfel incat atat insertia cheilor cat si accesul dupa pozitie in lista sa se faca rapid. 4. 2.iar F_1=F_2=1.combinand astfel avantajele alocarii secventiale si ale alocarii inlantuite.deci numarul nodurilor interne este F_{k+1}-1.5. 1. 2.pondere care se defineste in functie de numarul de frunze din cei doi subarbori. Cum se definesc si ce performante au arborii de cautare echilibrati dupa pondere.stang si drept. Numerele Fibonacci F_n verifica recurenta F_{n+2}=F_{n+1}+F_n pentru orice n • 1. Proprietatea se justifica prin inductie dupa k :pentru k=1 si k=2 proprietatea se verifica. -------------------------------------------------------------------------------------------------------------------.numarul frunzelor lui AF_k este F_k+F_{k-1}=F_{k+1}.

Lucrare de verificare pentru studen i Scrie i un program pentru realizarea operatiilor de insertie si stergere a unei chei dintr-un arbore binar de cautare.Din problema anterioara se deduce n • F_{h+2}-1 =1/¥5((1+¥5)/2)^{h+2}-1/¥5((1-¥5)/2)^{h+2} -1. dar tutorelui. Indica ii de redactare: .4.Acest argument ne conduce la demonstrarea prin inductie a proprietatii ca AF_{h+1} are numarul minim de noduri interne in multimea arborilor ec hilibrati de inaltime h si ca acest numar minim de noduri este egal cu F_{h+2}-1.deci n+1 ” 2^{h(T)}. Fie T_h un astfel de arbore cu numarul m inim de noduri interne .introduce i în program un num r suficient de comentarii pentru buna în elegere a programelor. 3.0).sa spunem cel stang. vor fi expediate prin mail 42 -------------------------------------------------------------------------------------------------------------Structuri de date si tehnici de programare .Prin logaritmare se obtine inegalitatea cautata.rezulta ca unul dintre subarborii radacinii. 4.înso i i programul de o documenta ie privind problema tratat . 4.Cerinta relativa la numarul minim de noduri implica faptul ca subarborele stang are inaltimea h-1 si cel drept are inaltimea h-2. i dificult ile întâmpinate. Rezolv rile.Aveti grija ca dupa efectuarea acestor operatii arborele binar sa fie in continuare un arbore de cautare.rezulta n • a^{h+2}/¥5-2. .deci h(T) • log(n+1).unde a=(1+¥5)/2>1.6. Arbori binari de cautare ------------------------------------------------------------------------------------------------------------------------ Proprietatea de echilibru se verifica de a semenea prin inductie pentru toate nodurile diferite de radacina lui AF_k.are inaltimea h-1 si cel drept are inaltimea h-1 sau h2.Pentru radacina lui AF_k subarborele sau stang are inaltimea k-2 si subarborele sau drept are inaltimea k-3.deci AF_k este echilibrat. modul de introducere a datelor i aspecte deosebite folosite la elaborarea programului.Deoarece (1-¥5)/2 se gaseste in intervalul ( -1. Deci putem presupune ca subarborele stang al radacinii este T_{h-1} si cel drept este T_{h-2}. Un arbore binar de inaltime h are cel mult 2^h frunze.

[3] S. Vol. Sahni. Algorithms. -------------------------------------------------------------------------------------------------------------------.Editura Tehnica. Bucuresti. 2008. Data Structures. Editura Teora. [4] S. Berlin. Data Structures. Editura Universitatii din Bucuresti. Knuth. Sahni.1998. and Applications i n C++. Tomescu. 2000. Data Structures. Data Structures and Algorithms. Algorithms.7. retiparit. I. Mc Graw Hill. 1973. Mehlhorn. Arbori binari de cautare ------------------------------------------------------------------------------------------------------------------------ 4.4. Mc Graw Hill.43 Stucturi de date si tehnici de programare . Bibliografie [1] D. Springer-Verlag. Tratat de programarea calculatoarelor. [2] K. E. 2000. and Applications in Java . [5] I.1984.

.daca cheile sunt distribuite uniform in 44 -------------------------------------------------------------------------------------------------------------Structuri de date si tehnici de programare .. .........reducem cautarea printre aproximativ |U|/m chei..........calculand valoarea unei functii de cheia K...........4.........6............1.....cheia K va fi cautata in fisierul h(K)................................... 47 5............Functia h aplica universul U al cheilor in numerele fisierelor din tabela T: h:U {0................... 46 5..... . 5 .... 53 5. Ce este dispersarea memoriei Pana acum am considerat metode de cautare care se bazau pe compararea unei chei K cu cheile existente intr-un tabel de date.5... .. Bibliografie . ........ 49 5..... .................................cat si in cazul dispersarii cu adresare deschisa............................. Comentarii i r spunsuri la testele de autoevaluare ........ Ce este dispersarea memoriei ............1...O alta posibilitate este sa facem mai intai un calcul asupra cheii K.... Lucrare de verificare pentru studen i ..1. Dispersarea memoriei ------------------------------------------------------------------------------------------------------------------------ Unitatea de înv are Nr.... ... ....In loc sa cautam printre |U| chei............................5.3.............. Un prim exemplu : algoritm de cautare si insertie in tabele dispersate si inlantu ite ......... .... 53 Obiectivele unit ii de înv are nr................... 44 5.. ............................. Ce este dubla dispersare? ..... 5 DISPERSAREA MEMORIEI Cuprins Obiectivele unit ii de înv are nr.......................... 52 5.......................... y Utilizati algoritmii de cautare si insertie in tabele dispersate atat in cazul dispersarii cu inlantuire.....utila in localizarea cheii K in tabel..................................... ... y Aflati cum pot fi imbunatatite performantele adresarii deschise prin folosirea dispersarii duble...7........... ................. 5..... 44 5............. ...... Dispersarea cu adresare deschisa .......................................m-1} Spunem ca o cheie K disperseaza in fisierul h(K) si ca h(K) este valoarea functiei de dispersare pentru cheia K..2...................... ...... 5 Dup ce ve i parcurge aceast unitate de înv are.«.... ve i r eu i s : y Aflati ce este disperarea memoriei ca metoda de cautare cu chei modificate.. Folosind dispersarea (hashing).Scopul utilizarii unei astfel de functii este acela de a reduce dimensiunea fisierului (subtabloului) in care cautam cheia K...... .....

ideea este similara cu metoda impartirii expusa mai inainte. -------------------------------------------------------------------------------------------------------------------.deci h(K)=[m(KA mod 1)].in loc sa se imparta cu un intreg.In final se defineste h(K)=(h_{s-1}«h_1h_0)_2.Daca |U|>m nu putem evita coliziunile. In cazul definirii prin inmultire.Valoarea functiei de dispersare h(K) determina adresa de unde incepe cautarea efectiva a cheii K.unde KA mod 1 este partea fractionara a lui KA.se poate arata ca h(K_1) este diferit de h(K_2) cand K_1 si K_2 sunt chei distincte care difera pe mai putin de sapte biti.daca n=15.adica o aceeasi intrare K trebuie sa determine intotdeauna aceeasi iesire h(K).definirea unei functii de dispersare h prin impartire se poate face cu formula h(K)=K (mod m). 0<A<1 si se extrage partea fractionara a lui KA.Daca cheile sunt numere reale pozitive si subunitare. Dispersarea memoriei -----------------------------------------------------------------------------------------------------------------------cele m subtablouri prin functia de dispersare h. De exemplu.De exmplu.daca A=(¥5 ± 1)/2 § 0.45 Structuri de date si tehnici de programare .atunci pentru aceasta alegere dispersarea se numeste dispersare Fibonacci si functioneaza bine pentru multimi de chei in progresie aritmetica.iar alegerea unei func tii de dispersare bune poate sa echilibreze numerele de chei care disperseaza la aceeasi adresa.adica KA-[KA]. exprimata prin h(K).adica K(x) mod P(x)= h_{s-1}x^{s-1}+ «+h_1x+h_0 folosind aritmetica polinomiala modulo 2.adica se pune 0 in stanga virgulei acestui numar.O cheie K se transforma in numar binar K=(k_{n-1}«k_1k_0)_2 si acestuia i se asociaza polinomul K(x)=k_{n1}x^{n-1}+ « +k_1x+k_0.aceasta functie de dispersare poate garanta evitarea coliziunilor intre chei care difera pe putine pozitii ca numere binare.unde de obicei m este un numar prim.Functia de dispersare trebuie desigur sa fie determinista.trebuie sa luam in considerare doua decizii independente:mai intai trebuie sa alegem o functie de dispersare h(K) si apoi sa gasim o metoda de rezolvare a coliziunilor.mai intai se alege o constanta subunitara. Pentru a utiliza aceasta metoda.Doua chei distincte K_i si K_j care au aceeasi functie de dispersare.Pentru aceasta se considera m=2^s si se foloseste un polinom fixat de gradul s in variabila x : P(x)=x^s+p_{s-1}x^{s-1}+ « +p_0.numai ca impartirea se face cu un polinom modulo 2.adica h(K_i)=h(K_j) se spune ca au o coliziune si vom studia algoritmi efectivi pentru rezolvarea coliziunilor. In cazul cand cheile sunt numere naturale.putem defini functia de dispersare ca fiind partea intreaga din Km. Apoi se inmulteste acest numar cu m si se considera partea intreaga a rezultatului. Exista si metode pentru calcularea functiei de dispersare care se bazeaza pe teoria algebrica a codurilor .drept baza a cautarii.0 ” K <1.adica f(K)=[Km].Deci ideea cautarii prin dispersare este aceea de a neglija anumite aspecte ale cheii si sa utilizam aceasta informatie partiala.5.Daca polinomul P(x) este bine ales. Apoi se calculeaza restul impartirii polinomului K(x) la polinomul P(x).s=10 si P(x)=x^10+x^8+x^5+x^4+x^2+x+1. Exista doua metode simple pentru definirea functiilor de dispersare: prin impartire si prin inmultire.618034.

5.TABLE[j] este ocupat pentru toti j care verifica inegalitatile R ” j ” m.18.50 acestea nu se gasesc in tabel si se 46 -------------------------------------------------------------------------------------------------------------Structuri de date si tehnici de programare .2.algoritmul se termina cu depasire.Un nod ocupat contine campul KEY[i].Operatiile de insertie sau stergere ale cheii x se implementeaza la fel ca aceste operatii in listele inlantuite folosind legaturile de inlantuire.75. i R. De exemplu.Aceste liste se pot pastra ca arbori binari de cautare indexati.campul LINK[i] si eventual si alte campuri. 6. 3.astfel incat sa putem regasi rapid o cheie sau putem folosi ideea de fisiere cu autoorganizare.23.19.h(K)=K (mod 7) si tabelul initial liber.Daca R=0. 1. Dispersarea memoriei ------------------------------------------------------------------------------------------------------------------------ 5.In acest algoritm se lucreaza numai c u cheile inregistrarilor.apoi cautam cheia x in lista T(h(x)).Daca aceasta cheie nu este in tabel si tabelul nu este plin.Algoritmul foloseste o functie de dispersare h(K) si o variabila auxiliara R pentru a gasi spatiile libere.Daca sunt n chei si m liste inlantuite umplute uniform.pentru m=7. permitand listelor inlantuite ale inregistrarilor ale caror chei disperseaza la aceeasi adresa sa se intrepatrunda. 2. 4. Se descreste R pana cand se gaseste o valoare astfel incat TABLE[R] este neocupata. Algoritmul de cautare si insertie in tabele dispersate si inlantuite. i h(K)+1.ea se insereaza. Urmatorul algoritm propune o rezolvare posibila acestei probleme. Daca K=KEY[i] algoritmul se termina cu succes . Subtabelul j (0 ” j ” m-1) contine un pointer catre capul de lista al elementelor pentru care cheia K verifica h(K)=j.deci dispersarea poate reduce numarul de comparatii secventiale de chei cu un factor de ordinul lui m.se face i LINK(i) si se merge la pasul 3 .Se mai presupune ca TABLE[0] este intotdeauna liber. (Cautarea a fost fara succes si se ca uta sa se insereze cheia K in tabel).altfel LINK[i] R.daca se cauta cheile 5. Daca LINK(i)  lambda. Nodurile tabelului se noteaza cu TABLE[ i] pentru 0 ” i ” m si ele sunt de doua feluri : libere si ocupate.Se cauta intr-un tabel cu m noduri o cheie K. KEY[i] K si LINK[i] lambda. Un prim exemplu : Algoritm de cautare si insertie in tabele dispersate si inlantuite se creste i Exemplul 1 In cazul rezolvarii coliziunilor prin inlantuire se depun toate inregistrarile ale caror chei disperseaza la aceeasi adresa intr-o lista inlantuita.Dupa ce se vor face insertii. Pentru a accesa o cheie x calculam mai intai h(x).Atunci cand tabelul este vid avem R=m+1. Daca pozitia TABLE[i] este libera. (Se insereaza o noua cheie) Se marcheaza TABLE[i] nod ocupat .se merge la 6 .42.5.lungimea medie a unei liste in care trebuie sa facem cautarea este n/m.

atunci K se insereaza.adica argumentul operatiei de ordin k este egal cu x din U cu o probabilitate egala cu 1/| U|. Cea mai simpla schema de adresare deschisa se numeste numeste cautare liniara si ea foloseste urmatorul sir ciclic de cautari : h(K). Pentru gasirea cheilor 42. 5.adica probabilitatea P(h(x_k)=i)=1/m pentru orice 1 ” k ” n si 0 ” i ” m-1.adica pentru orice i.«.Daca cheia K nu se gaseste in tabel si tabelul nu este plin.inserari. Complexitatea algoritmilor de dispersarea memoriei se evalueaza in urmatoarele ipoteze : 1) Functia de dispersare h:U {0.23 si 5 se face cate o comparatie de chei.j din {0.Un nod ocupat are un camp KEY[ i] care contine o cheie si posibil si alte campuri.Algoritmul foloseste o functie de dispersare h(K).857 comparatii de chei.Aceasta clasa generala de metode s -a numit adresare deschisa de W. TABLE[6]=5 si TABLE[7]=19. Research&Development 1(1957).3. TABLE[4]=18.h(K)1. Nodurile tabelului se noteaza prin TABLE[ i] pentru 0 ” i ” m-1 si ele sunt de doua feluri : libere si ocupate.pentru 75 se fac 3 comparatii si pentru gasirea cheii 18 se fac 4 comparatii.Verificarea acestor ipoteze in aplicatiile practice este discutabila.50.In adresarea deschisa toate cheile sunt memorate in tabela de dispersare .m-2.cercetand diferitele pozitii ale tabelului una cate una si fie gasind cheia K sau gasind o pozitie libera.Peterson [IBM J.h(K)+1. 2) Toate elementele din U sunt egal probabile ca argumente ale operatiilor luate in considerare (cautari.In locul utilizarii pointerilor se calculeaza sirul de pozitii din tabel c are trebuie examinate.47 Structuri de date si tehnici de programare .0.Acest tip de dispersare se numeste dispersare simpla uniforma.adica un sir de pozitii din tabel unde cheia K este cautata.TABLE[2]=50. Urmatorul algoritm cauta o cheie K intr-un tabel cu m noduri.5.1.ajungem la concluzia ca cheia K nu se afla in tabel.m-1} avem |h^{-1}(i)|=|h^{-1}(j)|. TABLE[5]=75.130 146].folosind sirul de verificari determinat de K.obtinandu -seTABLE[1]=42.«.«.Ideea de baza este formularea unei reguli dupa care pentru fiecare cheie K se determina un sir de verificari. Dispersarea cu adresare deschisa O alta cale de rezolvarea problemei coliziunilor este aceea de a renunta definitiv la legaturi.m-1} distribuie universul in mod uniform. -------------------------------------------------------------------------------------------------------------------.1.m-1.deoarece acelasi sir de verificari va fi facut de fiecare data cand se cauta cheia K.«.rezultand o medie de 13/7=1.Daca se intalneste o pozitie libera la cautarea chei i K.Pentru evidenta numarului de noduri ocupate din tabel se foloseste o variabila auxiliara n .cand aceasta se umple nu se mai pot face alte insertii. pentru 19 se fac 2 comparatii. ea se mareste cu o unitate de fiecare data cand se insereaza un nou nod. TABLE[3]=23.W.suprimari de elemente).Daca se cautau cheile prin cautare secventiala intr -o lista liniara numarul mediu de comparatii era de (1+2+3+4+5+6+7)/7=4. Dispersarea memoriei -----------------------------------------------------------------------------------------------------------------------insereaza pe rand.

Dispersarea memoriei -----------------------------------------------------------------------------------------------------------------------Exemplul 2 Algoritmul deschise. 4. Întrebare: De ce algoritmul de cautare si insertie in tabele dispersate deschise prezentat anterior considera tabelul plin atunci cand mai ramane o pozitie libera in tabel (n=m-1) si nu atunci cand toate pozitiile sunt ocupate (n=m)?.1.performanta cautarii liniare se degradeaza rapid atunci c and n se apropie de valoarea lui m deoarece liste izolate se combina in liste lungi. avem depasire si nu mai este loc pentru inserarea ch eii K (Algoritmul considera tabelul plin cand n=m -1.tabelul initial neocupat si sirul de chei 5. O cale pentru a ne proteja de acest fenomen este utilizarea urmatoarei idei : in loc sa cautam in pozitii consecutive ale tabelului.Se merge la 2. daca i<0.Daca n=m -1.ceea ce nu se intampla atunci cand mai exista o singura pozitie libera in tabel si testul de umplere a tabelului este m=n -1.De fapt cand n=m-1 exista numai o pozitie libera in tabel si numarul mediu de cautari in cazul unei cautari fara succes este egal cu ( m+1)/2.vom extinde functia de dispersare pentru a include printre argumente si numarul cautarii (plecandu -se de la 0). Experienta de calcul in cazul cautarii liniare ne arata ca algoritmul functioneaza bine pana cand tabelul incepe sa se umple si procesul devine lent.m-1} {0.In consecinta.50.«.sirul de pozitii ale tabelului in care facem cautarea sa depinda de cheia pe care o cautam cat si de numarul operatiei de cautare.23.m-1}. In caz contrar daca KEY[i]=K.deoarece se fac cautari secventiale in liste lungi. de cautare si insertie in tabele dispersate 1. 48 -------------------------------------------------------------------------------------------------------------Structuri de date si tehnici de programare .18. i i-1 .aceste chei s e insereaza pe rand in tabel si vom avea : TABLE[0]=42.19.se marcheaza TABLE[i] ocupat si KEY[i] K. Daca TABLE[i] este liber se merge la 4.5.«. TABLE[3]= 75. R spuns: Deoarece din logica algoritmului rezulta Exemplul 3 Serializarea unei liste circulare ca atunci cand tabelul este plin si cheia cautata K nu se gaseste in tabel.TABLE[5]=5 si TABLE[6] liber. Pentru a determina pe care pozitie a tabelului sa facem cautarea.a lgoritmul se termina cu succes (s -a gasit cheia K).In acest fel functia de dispersare devine h :U x {0. Reluand exemplul precedent cu m=7.1.h(K)=K (mod 7).cheia 50 nu mai poate fi inserata in tabel. 3.atunci i i+m.TABLE[4]=19.42.TABLE[2]=23. i h(K) 2.TABLE[1]=18.75.se intra intr -un ciclu infinit.nu cand n=m).In caz contrar n n+1. Cautarea a fost fara succes.

i) 3.1.4.m-1)> sa fie o permutare a multimii {0.m-1.iar i=0.pentru a putea avea acces la toate pozitiile tabelului de dispersare atunci cand facem cautarea.Cautarea liniara este usor de implementat.0).1. Dispersarea memoriei -----------------------------------------------------------------------------------------------------------------------Atunci cand folosim adresarea deschisa vom impune cerinta ca pentru orice cheie K.1. j h(K. Se marcheaza TABLE[j] ocupat si KEY[j] K (S -a inserat cheia K in tabel).h(K. « .i)=h¶(K)-i (mod m) pentru i=0.patratica si dubla dispersare.Atunci cand se fac multe suprimari de chei inlantuirea este de preferat adresarii deschise pentru rezolvarea coliziunilor intre chei.unde h¶ este o functie de dispersare auxiliara.algoritmul de cautare si insertie in tabele dispersate si inlantuite folosind o functie de dispersare de doua variabile devine : 1. Deoarece algoritmul propus atunci cand face cautarea cheii K cauta in aceleasi pozitii ca atunci cand cheia K a fost inserata in tabel.49 Structuri de date si tehnici de programare .5.i)=h¶(K)+i (mod m) sau h(K. Exista trei metode folosite in mod uzual pentru definirea unei functii de dispersare de doua argumente: cautarea liniara. « . In cazul cautarii liniare fiind data o functie de dispersare h¶:U {0. Ce este dispersarea dubla ? Dispersarea dubla este una dintre cele mai bune metode pentru adresarea deschisa deoarece permutarile pozitiilor din tabelul datelor in care se fac cautarile succesive au caracteristicile unor permutari aleatoare. « . 5.Aceste metode garanteaza ca sirul ordonat <h(K.m1}.«.algoritmul se termina cu depasire. i 0 2.h(K.m-1} se defineste functia de dispersare h(K.Altfel i i+1 si se merge la 2 5. in caz contrar daca KEY[j]=K algoritmul se termina cu succes 4.Dispersarea dubla foloseste o functie de dispersare de forma -------------------------------------------------------------------------------------------------------------------.iar fenomenul de aglomerare a inregistrarilor in acest caz se numeste clustering secundar.1.ceea ce mareste timpul mediu de cautare a unei chei.In acest caz diferenta dintre numarul pozitiilor din tabel unde se face cautarea depinde in mod patratic de numarul probei.m este o putere a lui 2.cautarea se poate termina fara succes atunci cand se gaseste o pozitie libera in tabel (datorita acestui argument cheile nu pot fi sterse din tabel decat cu suprimarea spatiilor libere ramase). m-1} pentru orice cheie K.se merge la 5 . Cautarea patratica foloseste o functie de dispersare de forma h(K.Folosind aceasta idee de cautare si insertie.1.1).Performantele sunt mai bune decat ale cautarii liniare. sirul pozitiilor unde facem cautari.0).m-1.m-1)> este o permutare a multimii {0. m=2^s.«.dar sufera de fenomenul de clustering primar:cautarea se face in blocuri mari de pozitii co nsecutive ocupate din tabel.1). Daca i=m-1. Daca TABLE[j] este neocupata. « .h(K.h(K. <h(K. « .i)=(h¶(K)+i/2+i^2/2) (mod m).

«.i)=(h_1(K)+ih_2(K))(mod m).m-1} pentru orice cheie K.h(75.i)=3i (mod 7) si i=0 conduce la o pozitie libera.1).i)=4+3i (mod 7) si i=0 este bun.1. Dispersarea memoriei -----------------------------------------------------------------------------------------------------------------------h(K.in pozitii destul de imprastiate in tabel.pentru i=0 pozitia din tabel este ocupata.m)=1.h(5. 18 . m-1}.iar h(50. Pentru m=7 si sirul de chei 5 . T(4)=18 .0).50 si 5 facem o singura comparatie de chei.celelalte pozitii unde se face cautarea se obtin din aceasta la care se adauga succesiv valoarea h_2(K) modulo m. Pentru a putea face cautari in tot tabelul T valoarea h_2(K) trebuie sa fie un numar relativ prim cu m .«. 42.se poate lua m=7 (numar prim). Daca m si h_2(K) un un cel mai mare divizor comun d>1 pentru o anumita cheie K. Prima pozitie din tabelul T unde se cauta cheia K este T(h_1(K)).2.i)=5+4i (mod 7) .18. cautarea (fara succes) a acestora in tabel va determina insertia lor in tabelul T astfel incat T(0)=42. De exemplu.«. T(3)=23 . 23.ca in exemplul anterior.i)=2+4i (mod 7) si i=2 este bun .pentru 19 facem 2 comparatii. T(5)=5 si T(6) =75.i)=5+2i (mod 7) .daca cel mai mare divizor comun (h_2(K).atunci <h(K. 75 .«.i)=1+3i (mod 7) si i=0 este bun.2.pentru i=0 avem pozitie libera in tabel si inseram acolo cheia 5 . unde al doilea argument i ia valorile naturale i=0.cautarea pentru K va examina numai a 1/d-a parte din tabelul de dispersare T.5. 50 -------------------------------------------------------------------------------------------------------------Structuri de date si tehnici de programare . T(2)=19 . 19 .iar h_1 si h_2 sunt doua functii de dispersare auxiliare astfel incat h_2(K) apartine multimii {1.1.In mod analog gasim h(42.h_1(x)=x (mod 7) si h_2(x)=1+(x (mod 4)).h(K. 50 si tabela T initial neocupata. Cand facem cautarea pentru a gasi cheile 42. h(23. h(19. h(18. h(K.Intr adevar.dar pentru i=1 pozitia este libera si inseram acolo cheia 19.acest lucru se realizeaza daca de exemplu m este numar prim.m-1)> este o permutare a multimii {0.iar pentru 23 si 75 facem cate 3 comparatii. T(1)=50 .deoarece conform ipotezei avem 1 ” h_2(K) ” m-1 pentru orice cheie K. Intr-adevar.i)=5+4i (mod 7) si numai i=2 conduce la o pozitie libera .

«.0).cu o functie de dispersare de forma h(K.«.m-1}.«. Sa se arate ca daca m este o putere a lui 2. Ce precautii trebuie luate la stergerea unei chei in cazul utilizarii algoritmului de rezolva re a coliziunilor prin adresare deschisa? Raspunsurile la acest test se gasesc la pagina 52 a acestei unitati de invatare -------------------------------------------------------------------------------------------------------------------.h(K. R spunsurile la test se vor da în spa iul liber din chenar.m)=1. iar h¶(K) este o functie de dispersare auxiliara.0).5. atunci pentru orice cheie K.i)=h¶(K)+i/2+i^2/2 (mod m).<h(K. 1 1.h(K.in cazul dispersarii cu adresare deschisa si cautare patratica .«.51 Structuri de date si tehnici de programare . Dispersarea memoriei -----------------------------------------------------------------------------------------------------------------------Testul de autoevaluare nr. 3.h(K.m-1}.1).m-1)> este o permutare a multimii {0.1.1.«.iar cel mai mare divizor comun (h_2(K). m-1}. m=2^s.atunci <h(K.1).daca h_2(K) se gaseste in multimea {1.i)=h_1(K)+ih_2(K) (mod m).h(K. Sa se arate ca in cazul dublei dispersari cu functia h(K.m-1)> este o permutare a multimii {0. în continuarea enun urilor 2.

2.toate valorile h_1(k)+ih_2(K) (mod m) sunt diferite.respectiv fara succes.i>j.m-1.Deci aceasta putere este cel mult egala cu 2^s.De aici rezulta ca exista un numar natural p>0 astfel incat (i-j)(i+j+1)=p2^{s+1} (1) In aceasta egalitate i-j si i+j+1 au paritati diferite.1.«.«. Care este complexitatea unui sir de n operatii de inserare.5. 1. Aceeasi problema in cazul complexitatii medii a algoritmului de dispersare cu adresare deschisa in cazul unei cautari cu succes.m)=1.1.din multimea {0.Comentarii i r spunsuri la testele de autoevaluare Testul 1.toate valorile h¶(K)+i/2+i^2/2 sunt distincte modulo 2^s.deoarece diferenta lor este 2j+1. Trebuie aratat ca pentru orice i=0. Aceasta egalitate nu poate avea loc deoarece 1 ” i-j ” m-1.din multimea {0. 2.m-1.j cu i>j. m-1} pentru care h_1(K)+ih_2(K) h_1(K)+jh_2(K) (mod m).«.Sa presupunem contrariul si anume ca exista d oi indici i. Dispersarea memoriei -----------------------------------------------------------------------------------------------------------------------Tema de autoinstruire nr. iar (h_2(K). rezulta ca exista un intreg p>0 pentru care (i-j)h_2(K) =pm.suprimare si operatii de acces la chei pentru algoritmul de cautare si insertie in tabele dispersate si inlantuite in ipoteza unei dispersari simple uniforme in functie de factorul de incarcare beta=n/m a tabelului. Trebuie demonstrat ca pentru orice i=0.1. 1 Consulta i bibliografia pentru a afla : 1.m-1} astfel incat h¶(K)+i/2+i^2/2 h¶(K)+j/2 +j^2/2 (mod 2^s).un numar impar. 52 -------------------------------------------------------------------------------------------------------------Structuri de date si tehnici de programare .Daca exista doi indici diferiti. 3.Insa i+j+1 ”m-1+m2+1=2m-2=2^{s+1}-2.«.5.1. La stergerea unei chei nu trebuie lasate pozitii libere deoarece aceste pozitii libere semnale aza absenta unei chei din tabel. i+j+1}. 5.ceea ce contrazice (1).«.deci cea mai mare putere a lui 2 in factorizarea in numere prime a produsului ( ij)(i+j+1) este mai mica sau egala cu cea gasita la factorizarea numerelor din multimea {1.

Dispersarea memoriei ------------------------------------------------------------------------------------------------------------------------ 5. 1973. Sahni.6. -------------------------------------------------------------------------------------------------------------------. Algorithms. Rezolv rile.înso i i programul de o documenta ie privind problema tratat . Tomescu. 5. . Data Structures. Mehlhorn. Rivest. E.introduce i în program un num r suficient de comentarii pentru buna în elegere a programelor. Editura Universitatii din Bucuresti. 2000. [2] D. modul de introducere a datelor i aspecte deosebite fo losite la elaborarea programului . [3] K. and Applications in C ++. The MIT Press. Mc Graw Hill. Editura Tehnica. Berlin. Lucrare de verificare pentru studen i Scrie i un program pentru realizarea algoritmului de cautare si insertie cu adresare deschisa folosind cautarea patratica.1998. Introduction to algorithms.5. Mc Graw Hill. Sahni. I.7. R. Leiserson. vor fi expediate prin mail tutorelui. McGraw-Hill. 2000. Bucuresti. 2008.53 Structuri de date si tehnici de programare . [4] [5] [6] S.1984. I. Springer-Verlag. and Applications in Java . Data Structures. retiparit. Data Structures and Algorithms. Cormen. Knuth. dar i dificult ile întâmpin ate. Algorithms. Tratat de programarea calculatoarelor . Data Structures. Indica ii de redactare: . Editura Teora. Vol. S. 2000 (tradusa de editura Teora). Bibliografie [1] T. C.

.... ............ y în elege i necesitatea demonstr rii validit ii algoritmilor elabora i prin metoda Greedy....... ..... ...... ..... Consider m mul imea finit A={a1................2... . Metoda Greedy ------------------------------------------------------------------------------------------------------------------------ Unitatea de înv are Nr............. ve i reu i s : y st pâni i o metod de programare pentru probleme de minim..... de aceea aplicarea metodei Greedy trebuie înso it neap rat de o demonstra ie......... 56 6. 58 6.... 62 6.... ........................ Dintre solu ii aleg una care optimizeaz o func ie p:P(A)pR dat ........... y delimita i exact care este cadrul de aplicativitate al metodei i de ce nu poate fi extins la probleme foarte pu in diferite.......... 54 6...................a n} i o proprietate p definit pe mul imea submul imilor lui A: p( ® J)! 1 p:P(A)p{0............. Lucrare de verificare pentru studen icontiunu a rucsacului ......... Nu este îns garantat ob inerea unei solu ii optime......... ....................... 6 Dup ce ve i parcurge aceast unitate de înv are... Introducere ........... ..... ..........................1................. .. mergându -se "direct" spre solu ia optim ..... 54 6............................ 54 -------------------------------------------------------------------------------------------------------------Structuri de date si tehnici de programare ....... ....... 6 METODA GREEDY Cuprins Obiectivele unit ii de înv are nr.......................... ...... . ....... 6... Bibliografie...............6........... Problema arborelui par ial de cost minim .............4....3............ .... 56 6............ 63 Obiectivele Unit ii de înv are nr................................1........... Introducere Metoda Greedy (greedy=lacom) este aplicabil problemelor de optim........ Metoda urm re te evitarea parcurgerii tuturor submul imilor (ceea ce ar necesita un timp de calcul exponen ial)... Y Ž X ° O submul ime SŽA se nume te solu ie dac p(S)=1............... Problema continu a rucsacului ...................................... ............6................... Memorarea textelor pe band .. 63 6..........................................7.......... Comentarii i r spunsuri la testele de autoevaluare .................1} cu ¯ p(X)  p(Y).5..... 6......................

dificultatea const în a concepe procedurile alege.7.a n} cu elemente pozitive. baza ni-k kn1.3.55 Structuri de date si tehnici de programare . -------------------------------------------------------------------------------------------------------------------.a n}.n if ai>sk then k nk+1. s knai write(s) Exemplul 2 Caut cel mai scurt ir cresc tor cu elemente din mul imea {a1..4.6. Apoi: kn1. Începem prin a ordona cresc tor elementele mul imii (corespunz tor procedurii prel)..4} cu suma egal cu 7. în care este "ascuns " func ia f.8) . vom ob ine succesiv: baza=1.1. s=(1... Caut submul imea de sum maxim . Vom parcurge mul imea i vom selecta numai elementele pozitive. s=(4. respectiv prel ..a n}.. lung=4. pentru A=(6.n if ai>0 then k nk+1.5.. baza n1 for i=2.n xnalege(A). Exemplul 1 Se consider mul imea de valori reale A={a 1.2) i M=7 ob in {6}... (Contra) Exemplul 3 Fie mul imea A={a1..7. s=(1) baza=2.6. Continu m cu prezentarea unor exemple clasice.6. s 1nai Astfel.8} .3.2.4. Se caut submul imea a c rei sum a elementelor este maxim . dar cel mult egal cu M dat.4.n if p(S Š{ai}) then S nSŠ{ai} Observa ii: în algoritm nu apare func ia f !! timpul de calcul este liniar (exceptând prelucr rile efectuate de procedurile prel i alege ). lung=5. lung=1.4) baza=6. Dar solu ia optim este {3. s k n ai else if k>lung then lung nk.3.. kn 0 for i=1.5. Dac procedez ca în exemplul 1. lung n 1.8. Metoda Greedy -----------------------------------------------------------------------------------------------------------------------Distingem dou variante generale de aplicare a metodei Greedy: SnJ for i=1. A nA\{x} if p(S Š{x})=1 then S nSŠ{x} prel(A) SnJ for i=1. s 1na1.. dac în urma ordon rii a rezultat a=(1.2.

..n )... Memorarea textelor pe band Textele cu lungimile L(1).2. 56 -------------------------------------------------------------------------------------------------------------Structuri de date si tehnici de programare . trebuie minimizat valoarea T(p)! S T(p)! n 1 n § Tp(k)..2... adic permutarea identic minimizeaz func ia de cost T....k (conform specificului accesului secven ial pe band ).. Conform strategiei Greedy.. Contradic ie.câ tigurile c1. Pentru o astfel de permutare (ordine de a ezare a textelor pe band ).g n.. începem prin a ordona cresc tor vectorul L.. 6. adic p minimizeaz func ia T. Pentru a citi textul de pe pozi ia k. Fie pSn optim . fiind Rezult c T(p¶)<T(p) .L(n) urmeaz a fi a ezate pe o band . timpul pentru a citi textul de pe pozi ie k este: Tp(k)=L(p 1)+.greut ile lor g1. n k !1 observ m c func ia T se mai poate scrie: 1 §(n  k  1)L(p k ) n k!1 (textul de pe pozi ia k este citit dac vrem s citim unul dintre textele de pe pozi iile k. Metoda Greedy ------------------------------------------------------------------------------------------------------------------------ 6. . Presupunând textele egal probabile. Problema continu a rucsacului Se consider un rucsac de capacitate (greutate) maxim G i n obiecte caracterizate prin: .3.c n ob inute la înc rcarea lor în totalitate în rucsac. Rezult c în continuare L(i)<L(j)..6.... O solu ie înseamn o permutare pSn... i<j. Demonstr m c în acest mod am ob inut modalitatea optim ... ambii factori pozitivi. Dac p este diferit de permutarea identic   i<j cu L(pi)>L(p j): p=( pi pj ) Consider m permutarea p' în care am interschimbat elementele de pe pozi iile i i j: p'=( pj pi ) Atunci n[T(p)-T(p¶)] = (n-i+1)L(p i) + (n-j+1)L(p j) = = (n-i+1)L(p j) + (n-j+1)L(p i) = = (j-i)L(p i)+(i-j)L(pj) = = (j-i)[L(p i)-L(pj)]>0.+L(p k). trebuie citite textele de pe pozi iile 1.

Metoda Greedy -----------------------------------------------------------------------------------------------------------------------Din fiecare obiect poate fi înc rcat orice frac iune a sa. x ® i [0.1]..1) ...«.. ± pentru k=j : dac yk>xk se dep e te G.1). atâta timp cât nu se dep e te greutatea G (ultimul obiect pote fi eventual înc rcat par ial): G1 n G { G1 reprezint greutatea disponibil } for i=1. fie k prima pozi ie pe care yk{xk.. for j=i+1..x n) cu ¯ § ± gi x i e G i °!1 O n i!1 solu ie optim este solu ie care maximizeaz func ia f(x)! § ci xi .Eyk+1...xk. u n g1 g 2 gn (*) Algoritmul const în înc rcarea în aceast ordine a obiectelor..y k-1.. Consider m solu ia: y¶=(y1.i ±n Prin solu ie în elegem un vector x=(x1.x j.+g n>G..n xj n 0 stop write(x) Am ob inut deci x=(1. Ar t m c solu ia astfel ob inut este optim . De aceea presupunem în continuare c g1+.. P strez greutatea total G...57 Structuri de date si tehnici de programare   n .0... yk<xk: ± pentru k<j : evident. ordonez obiectele descresc tor dup câ tigul la unitatea de greutate.) cu ¯i!1 n ± c y maxim § ±!1 i i i ° Dac y{x.0) cu xj[0.1.6. Se cere o modalitate de înc rcare de (frac iuni de) obiecte în rucsac.«. atunci încarc toate obiectele: x=(1. deci: -------------------------------------------------------------------------------------------------------------------. Dac suma greut ilor obiectelor este mai mic decât G. Observa ii:   kej: pentru k>j se dep e te G. astfel încât câ tigul total s fie maxim.. § ± gi y i ! G ± Fie y solu ia optim : y=(.. deci lucr m în situa ia: c1 c 2 c u u ....y k.n if gie G1 then x in1. G1 nG1-gi else x inG1/g i.. Conform strategiei Greedy. deoarece xk=1.«. E yn) cu E <1 (primele k-1 componente coincid cu cele din x).

4.. Rezult : gk(xk-yk)=(1-E)(gk+1yk+1+«+g nyn) (**) Compar performan a lui y' cu cea a lui y: f(y¶)-f(y) = c kxk +Eck+1yk+1 +.+c nyn) = ck(xk-yk) + ( E-1)(c k+1yk+1+.2).M) un graf neorientat cu muchiile etichetate cu costuri strict pozitive. Problema discret a rucsacului difer de cea continu prin faptul c fiecare obiect poate fi înc rcat numai în întregime în rucsac.....+ Ecnyn .. am putea îndep rta orice muchie din el. Vom aplica metoda Greedy: adaug mereu o muchie de cost minim dintre cele nealese i care nu formeaz un ciclu cu precedentele muchii alese. Exemplul 1 Consider m graful de mai jos i matricea mat ata at . c=(6.. Pentru fiecare dou ora e se cunoa te costul conect rii lor directe (consider m acest cost egal cu +g dac nu este posibil conectarea lor). cu p strarea conexit ii i mic orarea costului total).6.+c nyn) = = ck/gk[gk(xk-yk)+(E-1)(gk/ckck+1yk+1+. |M|=m.(ckyk+ck+1yk+1 +.. Începem prin a ordona liniile matricii cresc tor dup ultima coloan (a costurilor muchiilor). Într-adev r. aplicarea ei pentru: G=5. Problema arborelui par ial de cost minim Fie G=(V.. Vor fi alese deci n-1 muchii. n=3 i g=(4... Atunci f(y¶)-f(y) >ck/gk [gk(xk-yk)+(E -1)(gk+1yk+1+. Ce leg turi directe trebuie s aleag constructorul astfel încât costul total al lucr rii s fie minim? Este evident c graful par ial c utat este un arbore (dac ar exista un ciclu.2.. Ca exemplificare. s>k.+g nyn.+g k/ckcnyn)] Dar E-1>0 i gk/cke gs/cs. deci f(y')>f(y) . Contradic ie.5) are ca rezultat înc rcarea primul obiect.5. fie |V|=n. Metoda Greedy -----------------------------------------------------------------------------------------------------------------------gkxk+E(gk+1yk+1+.3. Acest algoritm poart numele de algoritmul lui Kruskal.4. s consider m n ora e ini ial nelegate între ele. câ tigul ob inut este 6. precum i costul acestei muchii.+g nyn)=gkyk+gk+1yk+1+. Dar înc rcarea ultimelor dou obiecte conduce la câ tigul superior 6. Se cere determinarea unui graf par ial de cost minim. Construim o matrice mat cu m linii i n coloane. 58 -------------------------------------------------------------------------------------------------------------Structuri de date si tehnici de programare . 6... S observ m c aplicarea metodei Greedy e ueaz în acest caz. Constructorul trebuie s conecteze ora ele astfel încât din oricare ora s se poat ajunge în oricare altul. Ca de obicei.+g nyn)]=0. Pe fiecare linie apar extremit ile i i j ale unei muchii.

(3. Muchia (1. -------------------------------------------------------------------------------------------------------------------. (1.n if rk=r2 then r k n r1 l n l+1 if nm<n-1 then write('Graf neconex') else write('Graf conex.cost) Demonstr m în continuare corectitudinea algoritmului lui Kruskal. . Costul=¶.j) vom pune rkn rj pentru orice vârf k cu rk=ri (unim doi arbori.M) un graf conex.j) va forma un ciclu cu precedentele  ri=rj.n l n 1. Atunci: .4). i2 n mat(l. iar cost este costul muchiilor alese ri n i. Plecând de la observa ia c orice solu ie par ial este o p dure. Fie G=(V. nm este num rul de muchii alese. cost n cost+mat(l. r2 n ri2 if r1{r2 then nm n nm+1. i=1.i2) for k=1.4) cu costul total egal cu 10.o muchie (i.59 Structuri de date si tehnici de programare . În algoritmul care urmeaz metoda descris . vor fi alese în ordine muchiile: (1. vom asocia fiec rui vârf i un reprezentant ri care identific componenta conex (arborele) din care face parte vârful în solu ia par ial .1). nm n 0.2). Metoda Greedy ------------------------------------------------------------------------------------------------------------------------ 1 3 5 2 2 5 2 2 5 3 4 4 1 1 4 1 3 2 3 2 4 5 5 4 5 5 2 2 2 3 4 5 5 Conform algoritmului lui Kruskal.5).3). write(i1. l este num rul liniei curente din matricea mat.la alegerea (ad ugarea) unei muchii (i.2) r1 n ri1. (4.5) nu a fost aleas deoarece formeaz cu precedentele un ciclu. cost n 0 while lem & nm<n-1 i1 n mat(l. Dificultatea principal const în verificarea faptului c o muchie formeaz sau nu cu precedentele un ciclu.6. deci vârfurile noului arbore trebuie s aib acela i reprezentant).

. 60 -------------------------------------------------------------------------------------------------------------Structuri de date si tehnici de programare . o mul ime promi toare cu n-1 muchii este chiar un arbore par ial de cost minim.. Rezult c mul imea de muchii PŠ{m} este promi toare. Pentru k=0 rezultatul este evident. Conform Propozi iei 1. Fie Y=V\{x | x extremitate a unei muchii din P} = mul imea punctelor izolate. nu con ine Propozi ia 1 Fie P promi toare i YŽV astfel încât nici un vârf din Y nu este extremitate a unei muchii din P. mul imea PŠ{muchia selectat la pasul k+1} este promi toare. Fie P arborele par ial de cost minim la care poate fi extins P.6. Dac m‘P. în afar de m. În final. O. Atunci PŠ{m} este promi toare. Ar t m prin induc ie c dup k=0. P' este de cost minim deoarece costul lui m este mai mic sau egal cu costul lui m'. Fie P'=P Š{m}\{m¶}.1. Fie m una dintre muchiile de cost minim cu cel pu in o extremitate în Y. Metoda Greedy -----------------------------------------------------------------------------------------------------------------------PŽM se nume te mul ime promi toare de muchii dac cicluri i poate fi extins la un arbore par ial P de cost minim. Observ m c PŠ{m}ŽP' pentru c PŽP.. Propozi ia 2 Arborele furnizat de metoda Kruskal este arbore par ial de cost minim. P Y m yi y j Dac mP . cele k muchii alese formeaz o mul ime promi toare.n-1 pa i. Fie P mul imea promi toare a muchiilor selectate la primii k pa i. o alt muchie m' adiacent lui Y..K. În el exist . atunci PŠ{m} are un ciclu.

a compara eficien a algoritmilor datora i lui Kruskal i Prim. R spunsurile la acest test se g sesc la pagina 62 a acestei unit i de înv are. Testul de autoevaluare nr. în continuarea enun urilor 2. a cunoa te un alt algoritm pentru problema arborelui par ial de cost minim. Care este esen a algoritmului lui Prim ? 5. numit algoritmul lui Prim. Metoda Greedy ------------------------------------------------------------------------------------------------------------------------ Tema de autoinstruire nr. Care este clasa de probleme pentru care se poate aplica metoda Greedy? R spunsurile la test se vor da în spa iul liber din chenar.6. 3.61 Structuri de date si tehnici de programare . Unde apare func ia de cost în schema general de rezolvare? 3. -------------------------------------------------------------------------------------------------------------------. De ce anume depinde eficien a metodei Greedy ? 4. 1 Consulta i bibliografia pentru: 1. 1 1. a demonstra validitatea acestui algoritm. 2. Urm ri i pe exemplul de mai sus care sunt muchiile alese de algoritmul lui Prim.

Propunem ca exerci iu demonstrarea faptului c dup n-1 pa i se ob ine un arbore par ial de cost minim. respectiv prel. 8. 7.j) de lungime minim cu i selectat.4). (3. 62 -------------------------------------------------------------------------------------------------------------Structuri de date si tehnici de programare . ordinea de alegere a muchiilor este urm toarea: (5. Comentarii i r spunsuri la testele de autoevaluare Testul 1. Dac pornim cu vârful 5. în rest timpul fiind liniar.5. Metoda Greedy este aplicabil problemelor de optim (minim i maxim). la fiecare pas aleg o muchie (i. Func ia de cost ce trebuie optimizat apare în procedurile alege. respectiv prel. respectiv prel.în procedurile alege. Algoritmul lui Prim. 6. (1.4). 5. Metoda Greedy ------------------------------------------------------------------------------------------------------------------------ 6. din cele dou variante de aplicare a metodei Greedy. dar j neselectat. 1.6.1). (4. care const în urm toarele: se începe prin selectarea unui vârf. Eficien a metodei Greedy depinde de asemenea de eficien a procedurilor alege.2).

Metoda Greedy ------------------------------------------------------------------------------------------------------------------------ 6. 2.6. Springer 1998 -------------------------------------------------------------------------------------------------------------------. dar i dificult ile întâmpinate. Editura Universit ii Bucure ti. Problems on Algorithms (2nd Edition). Se cere s determin m num rul maxim de spectacole ce pot fi programate f r a avea loc suprapuneri. H. Lucrare de verificare pentru studen i Scrie i câte un program ce folose te metoda Greedy pentru cele trei probleme de mai jos: 1. . S se interclaseze n vectori ordona i. 3. Introducere în algoritmi. 2000 [3] Parberry Ian. Tehnici de programare.înso i i programul de o documenta ie privind problema tratat . The Algoritm Design Manual. modul de introducere a datelor i aspecte deosebite folosite la elaborarea programelor.63 Structuri de date si tehnici de programare . 6. Indica ii de redactare: . vor fi expediate prin mail tutorelui. 2005 [2] Cormen T. et al. Rezolv rile. Computer Libris Agora. 2002 [4] Skiena Steven. Bibliografie [1] Georgescu Horia.introduce i în program un num r suficient de comentarii pentru buna în elegere a programelor. Gasarch William. Se dau orele de început i sfâr it a n spectacole ce pot fi programate într-o sal . ob inând un singur vector ce con ine toate elementele vectorilor ini iali. Se d o mul ime de perechi de nume de persoane cu proprietatea c între dou persoane dintr-o pereche exist o leg tur de rudenie direct .7.6. S se listeze grupele de persoane între care exist o leg tur de rudenie direct sau indirect .

............7.............. Introducere A a cum s-a subliniat în capitolele anterioare.......... ........................................4........... Metoda Backtracking ----------------------------------------------------------------------------------------------------------------------- Unitatea de înv are Nr...... Pentru a ne convinge de acet lucru.. ve i reu i s : y st pâni i cea mai utilizat metod de programare pentru probleme de c utare................................................................... ............ Varianta recursiv .....................7 zile 3855 secole 0.. Bibliografie......... ......... .................... 66 7................................... Lucrare de verificare pentru studen i ...... 7 METODA BACKTRACKING Cuprins Obiectivele unit ii de înv are nr.............. ..3... 70 7............... Metoda backtracking în plan ....... .. 72 7....2 sec 366 secole 1013 secole 64 -------------------------------------------------------------------------------------------------------------Structuri de date si tehnici de programare ............... ............... Descrierea metodei ................................................ 64 7.......1.......................................................... ....................... y în elege i semnifica ia condi iilor de continuare i importan a lor pentru reducerea timpului de calcul..... adic de ordinul O(nk) pentru un anumit k.... 74 7......................... ....... ...... 7 .......... Comentarii i r spunsuri la testele de autoevaluare ... 67 7......................... y aplica i atât varianta iterativ .... n=20 n 2n 3n 3 n=40 n=60  1 sec 58 min  12...9.. ......... Exemple ... 7 Dup ce ve i parcurge aceast unitate de înv are...................... cât i cea recursiv a metodei Backtracking......... ......8...... vom considera un calculator capabil s efectueze un milion de opera ii pe secund ............................6...2.... 69 7......... .......... În primul rând un algoritm este considerat "acceptabil" numai dac timpul s u de executare este polinomial......... Variante ....... ................ .. n reprezint num rul datelor de intrare........................ ..... complexitatea în timp a algoritmilor joac un rol esen ial.....5............ ... .... ........................................... ..... ......... 74 Obiectivele Unit ii de înv are nr....... ............ .............................. 68 7. O descriere succint a metodei backtracking ............ 65 7........... ...7...........

while k>0 if k=n+1 then retsol(x).. Vectorul x este construit progresiv.x k).«. { atribuie i avanseaz } else { încercare e uat } else C knˆ. kn1.) i fie opre te procesul (dac se dore te o singur solu ie).. knk-1. unde N:X p {0. { revenire dup ob inerea unei solu ii } else if C k{Xk then alege vXk\Ck. o compar cu alte solu ii etc.x k-1. Metoda backtracking încearc . încercându-se alegerea unei noi valori pentru xk. ele sunt strict necesare. 2) ´Încercare e uat ´: mai sunt valori neconsumate din Xk i valoarea xk aleas dintre acestea nu satisface Nk   se va relua. mic orarea timpului de calcul. knk+1. i. începând cu prima component . Distingem urm toarele cazuri posibile la alegerea lui xk: 1) ´Atribuie i avanseaz ´: mai sunt valori neconsumate din Xk i valoarea xk aleas satisface Nk   se m re te k. iar N sintetizeaz condi iile interne. { revenire } -------------------------------------------------------------------------------------------------------------------. v Xn. dar nu reu e te totdeauna. Descrierea metodei Fie X=X1 v . Not m prin CkŽXk mul imea valorilor consumate din Xk.. Algoritmul este urm torul: Cinˆ. Re inerea unei solu ii const în apelarea unei proceduri retsol care prelucreaz solu ia (o tip re te.. ideal fiind s fie i suficiente. Din cele de mai sus rezult c generarea tuturor elementelor produsului cartezian X nu este acceptabil . Caut xX cu N(x). Metoda Backtracking ----------------------------------------------------------------------------------------------------------------------Chiar dac în prezent calculatoarele performante sunt capabile de a efectua zeci de miliarde de opera ii pe secund .v) then x kn v. X este numit spa iul solu iilor posibile..1. Condi iile de continuare rezult de obicei din N.. k nk-1.7. 3) "Revenire": nu mai exist valori neconsumate din Xk (Xk epuizat )   întreaga Xk devine disponibil i knk-1. 7. 4) "Revenire dup determinarea unei solu ii" : este re inut solu ia. tabelul de mai sus arat c algoritmii exponen iali nu sunt acceptabili. fie prevede knk-1 (dac dorim s determin m toate solu iile).1} este o proprietate definit pe X. CknCkŠ{v}. Se avanseaz cu o valoare xk dac este satisf cut condi ia de continuare Nk(x1.65 Structuri de date si tehnici de programare . if N k(x1.

7. while b and (i<k) if vecin(i.. i=1. else if x k<s then x knxk+1.x k) then k n k+1.s} . 2) Problema celor n dame Se consider un caroiaj nv n. { revenire dup ob inerea unei solu ii } { atribuie i avanseaz } { încercare e uat } { revenire } 7. pe fiecare linie vom plasa exact o dam . Se cere colorarea ei folosind cel mult n culori. se dore te plasarea a n dame pe p tr elele caroiajului. ara k. else else x kn 0. knk-1. Damele de pe liniile i i k sunt: pe aceea i coloan : dac xi=xk . Evident.. Se aplic algoritmul de mai sus pentru diferite forme ale func iei 1) Colorarea h r ilor. k nk-1..«. xin0. pe aceea i diagonal : dac |xi-xk|=k-i. i n 1. Prin analogie cu o tabl de ah (n=8).«. b n true. de continuare.2.. algoritmul se simplific astfel: kn1. coloan sau diagonal ). Nk va fi notat în continuare prin cont(k)..=X n={1. Fie xk coloana pe care este plasat dama de pe linia k.n while k>0 if k=n+1 then retsol(x). Metoda Backtracking ----------------------------------------------------------------------------------------------------------------------Pentru cazul particular X1=. astfel încât oricare dou ri vecine (cu frontier comun de lungime strict pozitiv ) s fie colorate diferit. Se consider o hart . astfel încât s nu existe dou dame una în b taia celeilalte (adic s nu existe dou dame pe aceea i linie. Fie xk culoarea curent cu care este colora t function cont(k: integer): boolean.. 66 -------------------------------------------------------------------------------------------------------------Structuri de date si tehnici de programare . if N k(x1.k) & x i=xk then b n false else i n i+1 cont n b end. Exemple În exemplele care urmeaz .

x n}={2.3..x n) solu ie dac : x1=1 & {x 2. b n true..7. Metoda Backtracking ----------------------------------------------------------------------------------------------------------------------function cont(k:integer): boolean.. Un ciclu hamiltonian este un ciclu care trece exact o dat prin fiecare vârf al grafului. Vom considera c graful este dat prin matricea sa de adiacen .. atunci la parcurgerea în adâncime este evitat parcurgerea unui întreg subarbore. while b & (i<k) if xk=xi then b n false else i n i+1. if k=n then b n b › a(xn. while b and i<k if |x i-xk|=k-i or x i=xk then b n false else i n i+1.... Dac pentru xk este aleas o valoare ce nu satisface condi iile de continuare.x1)=1. O descriere succint a metodei backtracking Metoda backtracking poate fi descris astfel: Backtracking = parcurgerea limitat arbore *) *) în adâncime a unui conform condi iilor de continuare Rolul condi iilor de continuare este ilustrat în figura ce urmeaz . 7. Vom nota prin xi al i-lea vârf din ciclu.. -------------------------------------------------------------------------------------------------------------------.. i n 1. Pentru orice ciclu hamiltonian putem presupun e c el pleac din vârful 1.. cont n b end. function cont(k:integer): boolean.67 Structuri de date si tehnici de programare .n} & x n.. 3) Problema ciclului hamiltonian Se consider un graf neorientat. x=(x1.x1 vecine. cont n b end.xk)=0 then cont n false else i n 1. b n true. if a(xk-1..

4. Metoda Backtracking ----------------------------------------------------------------------------------------------------------------------- x1 x2 xk 7.. Aici.<x ken cu k maxim ax1 < ax2 <. Procedura retsol are forma: 68 -------------------------------------------------------------------------------------------------------------Structuri de date si tehnici de programare  .2.  Func ia cont are urm toarea form : function cont(k) cont n axk-1<ak end.7. Caut un sub ir cresc tor de lungime maxim .8) . Not m prin xf i kf solu ia optim i lungimea sa.6) va rezulta k=5.  Completez cu -g i +g : a0 n -g.4.5. Variante Variantele cele mai uzuale întâlnite în aplicarea metodei backtracking sunt urm toarele: solu ia poate avea un num r variabil de componente dintre ele alegem una care optimizeaz o func ie dat .an)Zn. Deci caut 1ex1<.3..«.. exemplu: (4. solu ia posibil : care nu poate fi continuat .7.. nnn+1.8.7.< a xk Pentru n=8 i a=(1. i/sau Exemplu Fie a=(a1. a n n +g.

x0n 0. Observa ie. procedure back(k) if k=n+1 then retsol else for i=1. Fie dif=nr ( . if cont(k) then if x k=n { an=+g } then retsol(k). kf nk. end. Se face tot o parcurgere limitat în adâncime a unui arbore. Exist solu ii  n par.  Algoritmul backtracking se modific astfel: kn1. Condi iile sunt : difu0 pentru k<n. while k>0 if xk<n then x knxk+1.. back(2). if cont(k) then back(k+1). kf n0.7. Procedura back are urm toarea form : -------------------------------------------------------------------------------------------------------------------. Exemplu Dorim s producem toate irurile de n paranteze ce se închid corect.. k n k-1 else k nk+1. dif=0 pentru k=n.. x knxk-1 else else k nk-1.. Varianta recursiv O descriem pentru început pentru X1=. dif n1. Apelul ini ial este: back(1).s xkni.=X n={1.nr).. revenire din recursivitate else end.s}. Metoda Backtracking ----------------------------------------------------------------------------------------------------------------------procedure retsol(k) if k>kf then xf nx.5. 7. x1n0.. Pornirea algoritmului backtracking se face prin: a1n¶( ¶.69 Structuri de date si tehnici de programare .

-  Mi c rile posibile sunt date printr -o matrice depl cu dou linii i ndepl coloane. În exemplul tratat backtracking -ul este optimal! : se avanseaz dac i numai dac exist anse de ob inere a unei solu ii.  Pentru refacerea drumurilor.j1) dat ? se cere determinarea componentelor conexe. end. Metoda backtracking în plan Prezent m o problem posibile i u abord ri posibile. Metoda Backtracking ----------------------------------------------------------------------------------------------------------------------procedure back(k) if k=n+1 then retsol {scrie solu ia} else a kn¶( ¶. 7. Cu alte cuvinte. Se caut toate drumurile care ies în afara matricii. akn¶)¶.ocupate: aij=1. . dar i suficiente. dif++. cu variante Se consider un caroiaj (matrice) A cu m linii i n coloane. trecând numai prin pozi ii libere.j0).6. Observa ie. pentru fiecare pozi ie atins memor m minte leg tura la precedenta. matricea are forma: ¨ 1 0  1 0¸ © © 0  1 0 1¹ ¹ ª º  Bordez matricea cu 2 pentru a nu studia separat ie irea din mat rice.7. pun aij=-1 (a fost atins ). if dif e n-k then back(k+1) dif--. dif--. Nord. De exemplu. Variante: cum pot ajunge într-o pozi ie (i1. condi iile de continuare nu sunt numai necesare. general de c utare în plan. continu m i apoi repunem aijn 0 (întoarcere din recursivitate).  Dac pozi ia e liber i pot continua. Vest i Sud. Se mai d o pozi ie (i0. 70 -------------------------------------------------------------------------------------------------------------Structuri de date si tehnici de programare . dac deplas rile permise sunt cele c tre pozi iile vecine situate la Est. if difu0 then back(k+1) dif++. Pozi ile pot fi: .libere: aij=0.

1 1. Care este clasa de probleme pentru care se poate aplica metoda Backtracking? R spunsurile la test se vor da în spa iul liber din chenar.7. 3. Care este esen a metodei Backtracking ? 4. -------------------------------------------------------------------------------------------------------------------.6. Discuta i importan a condi iile de c ontinuare. iterativ i recursiv ale metodei 5.71 Structuri de date si tehnici de programare . în continuarea enun urilor 2. Metoda Backtracking ----------------------------------------------------------------------------------------------------------------------Testul de autoevaluare nr. Compara i variantele Backtracking. cu marjele: condi ii necesare i condi ii suficiente. R spunsurile la acest test se g sesc la pagina 72 a acestei unit i de înv are. Scrie i un program în Java pentru rezolvarea problemei enun ate în 7.

1.n = ").j. static int[][] mat. class elem { int i.0}. 4.out.7. Prezent m în continuare un program în Java care rezolv problema propus : import java.7. static { ndepl = depl[0]. cu atât ele optimizeaz timpul de lucru.print("i0. i++) for(j=1.length. Metoda Backtracking ----------------------------------------------------------------------------------------------------------------------- 7.nextInt(). mat = new int[m][n]. // se introduc valorile m+2. mat[m-1][i]=2.out. j0 = sc.0.-1. j<n-1. -1. System.print("m. Parcurgerea este limitat de condi iile de continuare. for (i=0. j++) mat[i][j] = sc.j0 = ").i0.n+2 m = sc. 5. } 72 -------------------------------------------------------------------------------------------------------------Structuri de date si tehnici de programare . Metoda Backtracking este aplicabil problemelor de c tare. Varianta recursiv are o form mai simpl i mai concis .nextInt(). {0. Scanner sc = new Scanner(System. } for (j=0.j0. } System.*. for(i=1. } elem() { int i.util.nextInt().nextInt(). i<n. mat[j][n -1] = 2.n.ndepl.1} }. 2. i<m-1.j.in). Comentarii i r spunsuri la testele de autoevaluare Testul 1. Cu cât ele se apropie de condi ii suficiente (care s garanteze existen a unui optim cu prefixul curent). n = sc. j<m. Esen a metodei backtracking const în construirea dinami c a unui arbore în spa iul de solu ii i parcurgerea acestuia în adâncime. ce se reg se te în timpul de executare. Condi iile de continuare sunt necesare (în sensul c neverificarea lor face imposibil existen a unei solu ii cu prefixul curent).nextInt(). i++) { mat[0][i]=2. j++) { mat[j][0] = 2. 3. static int m. static int[][] depl = { {1. În schimb varianta iterativ aduce un plus de eficien .0. i0 = sc. elem prec.

x = new elem(ii.jj. else return prec. } String print() { if (prec == null) return "(" + i + ".this). else if (mat[ii][jj] == 2) System. prec=x. mat[i][j] = 0. if (mat[ii][jj] == 1)." + j + ")". } void back() { // backtracking pentru celula c urenta elem x. k++) { ii = i+depl[0][k].back(). Metoda Backtracking ----------------------------------------------------------------------------------------------------------------------elem(int ii. x. int ii. elem x) { i=ii.73 Structuri de date si tehnici de programare . jj = j+depl[1][k]. k<ndepl. else if (mat[ii][jj] == 0) { mat[i][j] = -1.print() + " " + "(" + i + ". in t jj. j=jj. } } } } -------------------------------------------------------------------------------------------------------------------.7.out.jj." + j + ")". for (int k=0.println(print()).

S ne imagin m urm torul joc: Fie x un num r natural în tre 0 i 1000 care este ascuns de o persoan . Pentru fiecare tip k = 1. negru. aceasta precizând dac num rul ascuns este mai mare sau mai mic decât num rul presupus. Plata sumei în monede. Computer Libris Agora. Ghicirea num rului ascuns. Tehnici de programare. et al. H. 2000 [3] Parberry Ian.7. 2002 [4] Skiena Steven. Lucrare de verificare pentru studen i Scrie i câte un program ce folose te metoda Backtracking pentru cele trei probleme de mai jos: 1. The Algoritm Design Manual. Problema drapelelor. Se consider n tipuri de monede. Se cere s se precizeze (eventual s se reprezinte grafic) toate dra pelele tricolore care se pot confec iona. ro u. Realiza i o strategie de alegere a încerc rilor astfel încât oricare ar fi num rul ascuns s se fac cât mai pu ine încerc ri.introduce i în program un num r suficient de comentarii pentru buna în elegere a programelor. Dat fiind o sum de bani p. verde. Bibliografie [1] Georgescu Horia. ± cele trei culori de pe drapel sunt distincte. O alt persoan va trebui s ghiceasc num rul ascuns prin cât mai pu ine încerc ri. Problems on Algorithms (2nd Edition). portocaliu. pe baza informa iilor date de persoana care a ascuns num rul. Metoda Backtracking ----------------------------------------------------------------------------------------------------------------------- 7. Gasarch William. galben.8. ± drapelul poate fi împ r it în trei zone egale vertical sau orizontal. se cer toate modalit ile în care ea poate fi achitat cu monedele disponibile. Indica ii de redactare: . Editura Universit ii Bucure ti. . Avem la dispozi ie pânz de apte culori: alb. Introducere în algoritmi. n valoarea unei monede este a(k) iar num rul de monede de acest tip este nr(k).9. tiind c trebuie respectate regulile: ± orice drapel are culoarea din mijloc alb.înso i i programul de o documenta ie privind problema tratat . galben sau portocaliu. Springer 1998 74 -------------------------------------------------------------------------------------------------------------Structuri de date si tehnici de programare . 2005 [2] Cormen T. 7. 2. albastru. Simula i un astfel de joc! 3.

..................................... Pentru fiecare subproblem proced m în acela i mod. Bibliografie . 77 8.....................................1.... 8 METODA DIVIDE ET IMPERA Cuprins Obiectivele unit ii de înv are nr................................... cu excep ia cazului în care dimensiunea ei este suficient de mic pentru a fi rezolvat direct. .............. y cunoa te i dou metode de sortare cu timp de executare optim............ ve i reu i s : y st pâni i o metod de programare bazat pe descompunerea problemelor în subprobleme...................4..................... 83 8.. .3............................................8 ..... ................75 Structuri de date si tehnici de programare ................................. Metoda Divide et Impera ----------------------------------------------------------------------------------------------------------------------- Unitatea de înv are Nr....... ..8... 76 8..... .. .......................................... -------------------------------------------------------------------------------------------------------------------..... Sortare prin inte rclasare .......... ................. ........................... C utarea binar ....... urmat de asamblarea rezultatelor............... .... ................. Problema turnurilor din Hanoi ......... ...... 78 8........... 83 8..................... ... .............................. ...... .......8.............2..... Metoda Quicksort ........................... y în elege i caracterul recursiv al metodei i modul de calcul al timpului de executare................................ ..................7.... Lucrare de verificare pentru studen i .......................................... 76 8.......5.................................... 84 Obiectivele Unit ii de înv are nr...... 79 8.. ............6.. Introducere Metoda Divide et Impera ("desparte i st pâne te") const în împ r irea repetat a unei probleme de dimensiuni mari în mai multe subprobleme de acela i tip........... Comentarii i r spunsuri la testele de autoevaluare ... 8 Dup ce ve i parcurge aceast unitate de înv are...................... ........... urmat de rezolvarea acestora i combinarea rezultatelor ob inute pentre a determina rezultatul corespunz tor problemei ini iale.................. Este evident caracterul recursiv al acestei metode.... Schema general .................. 7 5 8............. ...

r1 DivImp(p. 8.. r2 DivImp(m+1. p u unde: . algoritm ul se încheie. C utarea binar Se consider vectorul a=(a1. dac aceasta este suficient de mic .func ia Prel este capabil s întoarc rezultatul subsecven ei p.8. r Combin(r1.1. fie în cea din dreapta. an+1=+ ’ .u) if u±p< then r Prel(p. în caz contrar vom c uta fie în "jum tatea" din stânga.2. Problema enun at constituie un exemplu pentru cazul în care problema se reduce la o singur subproblem . inordine i postordine ale u nui arbore binar.i) dat de: (true.a u.u).func ia Interm întoarce un indice în intervalul p.. function DivImp(p. Exemple:  Calculul maximului elementelor unui vector.u).n ). Metoda Divide et Impera ----------------------------------------------------------------------------------------------------------------------- 8. .. inând cont de faptul c a este ordonat cresc tor. C ut m perechea (b. vom compara pe x cu elementul din "mijlocul" vectorului.u) else m Interm(p..i) dac ai=x. (false. . .i) dac ai-1<x<ai.. Se cere s se determine dac x apare printre componentele vectorului.u (de obicei m=­(p+u)/2 ½ ). Func ia DivImp. Schema general Descriem schema general pentru cazul în care aplic m metoda pentru o prelucrare oarecare as upra elementelor unui vector.  Parcurgerile în preordine..func ia Combin întoarce rezultatul asambl rii rezultatelor par iale r1 i r2.u . Dac avem egalitate.r2) return r end.  Sortarea folosind arbori de sortare.a n) ordonat cresc tor i o valoare x.m). Vom ad uga a 0 =-’.. care întoarce rezultatul prelucr rii asupra unei subsecven e ap.   76 -------------------------------------------------------------------------------------------------------------Structuri de date si tehnici de programare .. va fi apelat prin DivImp(1.

al c rei num r este evident 6-i-j.1. Se observ c este satisf cut rela ia: H(m.i. folosind i a treia tij .i). u n while p”u i ­(p+u)/2 ½ case a i>x : u i-1 ai=x : write(true.i.i.  pentru un element. al c ror rezultat este asamblat conform (*). Fie H(m. 8. nu mai Algoritmul necesit o mic analiz .j) H(m-1. Se presupune c mutarea este corect (vezi condi ia de mai sus). O mutare este notat prin (i. Se cere s se mute aceste discuri pe tija 2. Se observ c se iese din ciclul while i ai-1<x<a i=ap.2) . legat de corectitudinea sa par ial . Ini ial pe tija 1 se afl n discuri cu diametrele decresc toare privind de la baz c tre vârf.j) irul de mut ri prin care cele m discuri din vârful tijei i sunt mutate peste cele de pe tija j. unde procedura Hanoi are forma: -------------------------------------------------------------------------------------------------------------------. Problema const în a determina H(n. Mai precis. Deci p roblema pentru m discuri a fost redus la dou probleme pentru m-1 discuri. iar pe tijele 2 i 3 nu se afl nici un disc.  pentru 2 elemente.2) .i.77 Structuri de date si tehnici de programare . Dac x<ai atunci unp-1. atunci un p-1. Problema turnurilor din Hanoi Se consider 3 tije. vom executa apelul Hanoi(n. respectând condi ia ca în permanen pe orice tij sub orice disc s se afle baza tijei sau un disc de diametru mai mare.8. Algoritmul este urm torul: procedure CautBin p u. Corespunz tor. în ambele cazuri se p r se te ciclul while i tip re te un rezultat corect.p) end subproblem . iar dac x>ai atunci pnu+1.j) i semnific deplasarea discului din vârful tijei i deasupra discurilor aflate pe tija j.3.j)= H(m-1. adic p=u: se alege i=p=u .j) (i. Dac x<ai.j) (*) respectându-se condi ia din enun . adic pentru u=p+1 : se alege i=p. ajutându -ne i de tija 3. Metoda Divide et Impera ----------------------------------------------------------------------------------------------------------------------Deoarece problema se reduce la o singur este necesar s folosim recursivitatea. ne întreb m: când se ajunge la p>u?  pentru cel pu in 3 elemente : nu se poate ajunge la p>u.1. stop ai<x : p i+1 write(false.

.k.. k3 np. k3 nk3+1 else { au fost epuizate elementelei primei subsecven e } for i=k1. k3 nk3+1 for i=p. ordon m cresc tor fiecare subvector i asambl m rezultatele prin interclasare..m bk3nai.. Se observ c este aplicat tocmai metoda Divide et Impera.a m) i (am+1. k2n m+1. while k1 em & k2eu if ak1<ak2 then k1 n k1+1. Hanoi(n -1.n) . Hanoi(1. Hanoi(n-1.j) else k n6-i-j.. Programul principal urmeaz întocmai strategia Divide et Impera.... Fie secven a de indici p..a u).. b k3nak2 k3n k3+1 if k1>m { au fost epuizate elementelei primei subsecven e } then for i=k2.u) k1np.4. b k3nak1 else k2 nk2+1. vom folosi nota iile: k1 = indicele curent din prima secven .j). unde procedura recursiv SortInter are forma: 78 -------------------------------------------------------------------------------------------------------------Structuri de date si tehnici de programare . Sortare prin interclasare Fie a=(a1. Începem cu procedura de interclasare..u bk3nai. Mai precis. adic liniar în lungimea secven ei analizate. Num rul de mut ri este 2n-1. procedure Inter(p. Metoda Divide et Impera ----------------------------------------------------------------------------------------------------------------------procedure Hanoi(n..j) end Observa ie.a u) sunt ordona i cresc tor.8. procedura Inter va ordona cresc tor întreaga secven (ap...a n) vectorul care trebuie ordonat cresc tor. 8..m.j) if n=1 then write(i. deci se face apelul SortInter(1.i..u ai n b i end Timpul de calcul este de ordinul O(u-p)..u i fie m un indice intermediar. k3 = pozi ia pe care va fi plasat cel mai mic dintre ak1 i ak2 într-un vector auxiliar b. Ideea este urm toarea: împ r im vectorul în doi subvectori.i.k). Presupunând c (ap. k2 = indicele curent din a doua secven .i.

adic printr-o permutare a elementelor secven ei:  x=ap va trece pe o pozi ie k. = 2iT(2k-i) + i a 2k = .a u). . SortInter(m+1.. r mânând apoi s ordon m cresc tor elementele aflate la stânga sa. . dar nu va mai fi necesar combinarea (asamblarea) rezultatelor rezolv rii subproblemelor..8. iar combinarea rezultatelor s-a f cut în timp liniar (prin interclasare).m).a u) secven a curent care trebuie sortat . Fie (ap.u) if p=u then else m n­(p+u)/2 ½..a n). Vom pozi iona pe ap în secven a (ap..log n). Va fi aplicat tot metoda Divide et Impera.u).m. pentru n>1.5.. Se observ c s-a ob inut acela i timp ca i pentru sortarea cu ansamble.  toate elementele aflate la stânga pozi iei k vor fi mai mici decât x. Metoda Divide et Impera ----------------------------------------------------------------------------------------------------------------------procedure SortInter(p. pen tru n=1. . i de aceast dat fiecare problem va fi descompus în dou subprobleme mai mici de aceea i natur . precum i pe cele aflate la dreapta sa.79 Structuri de date si tehnici de programare .. SortInter(p. y 2T(n/2)+an . Presupunem c n=2k.. Metoda Quicksort Prezent m înc o metod de sortare a unui vector a=(a 1.. Men iune.u) end Calcul m în continuare timpul de executare T(n). În acest mod ap va ap rea pe pozi ia sa final . 8. . unde a este o constant : problema de dimensiune n s-a descompus în dou subprobleme de dimensiune n/2.. unde T(n) se poate scrie: y t0 (constant). Rezult c T(n)=0(n .. -------------------------------------------------------------------------------------------------------------------. Inter(p.. Atunci: T(n) = T(2 k) =2 T(2k-1) + a 2k = =2[2T(2 k-2) + a 2k-1] + a 2k = 22T(2k-2) + 2 a 2k = =22[T(2k-3) + a 2k-2] + 2 a 2k = 2 3 T(2k-3) + 3 a 2k = . Se poate demonstra c acest timp este optim. =2kT(0) + k a 2k = nt0 + a n log 2 n.  toate elementele aflate la dreapta pozi iei k vor fi mai mari decât x..

ii n0.. Vom num ra câte compar ri se efectueaz (componentele vectorului nu sunt neap rat numere.  6 va fi comparat succesiv cu 3..9. Trecem la calculul timpul mediu de executare al algoritmului Quicksort..7 ). QuickSort(k+1. în care la stânga lui 6 apar valori mai mici.a u). (ii.8..2. j nu... valoare întoars de func ia poz.a n rezultând c el se afl pe pozi ia final etc. Se ob ine astfel (1. ci elemente dintr -o mul ime ordonat oarecare).... pân când g sim un element mai mic.8.n) . Acesta este a8=8. QuickSort(p...3..2.3..k -1).5.1. Cazul cel mai defavorabil pentru metoda Quicksort este cel în care vectorul este deja ordonat cresc tor: se compar a1 cu a2..a10. Atunci sortarea se realizeaz prin apelul QuickSort(1.2.a 11)=(6.jj) n (-ii.5.5.6) ..9.7)  se compar 6 cu a11. iar la dreapta lui 6 apar valori mai mari. Se interschimb 6 cu 1.u)..-jj) ini+ii.. Acum secven a este (1.u) inp.2. jj n-1 while i<j if ai<aj then else a i<aj.. deci l-am pozi ionat pe 6 pe pozi ia 8. Se interschimb 6 cu 8.u care întoarce indicele k pe care va fi pozi ionat ap în cadrul secven ei (ap. schimbând direc ia de comparare conform (*)..8..2.9.8.7) i vom lucra în continuare pe subsecven a (3. apoi se compar a2 cu a3.6. Observa ie. unde procedura QuickSort are forma: procedure QuickSort(p. Metoda Divide et Impera ----------------------------------------------------------------------------------------------------------------------Fie poz func ia cu parametrii p.5. j nj+jj (*) poz i end S urm rim cum decurg calculele pentru secven a: (a4.6.8. Timpul mediu este dat de formulele: 1 n ® T(n)! n  1  §[T(k  1) T(n  k)] ± n k !1 ¯ ± T(1)! T . Acesta este a9=1.a n rezultând c el se afl pe pozi ia final .n) end Func ia poz lucreaz astfel: function poz(p.u) if p=u then else k n poz(p..3. pân când g sim un element mai mare..

!0 0 ° deoarece: 80 -------------------------------------------------------------------------------------------------------------Structuri de date si tehnici de programare .

. rezult : T(n) n 1 1 n e ´ dx ! 2lnx| 1 ” 2 ln(n+1) 2 n 1 x 2 (am folosit o inegalitate bazat pe sumele Rieman pentru func ia f(x)=ln x).. Deci T(n)=0(n ...8.. metoda Divide et Impera are o larg -------------------------------------------------------------------------------------------------------------------..  T(k-1) este timpul (num rul de compar ri) necesar ordon rii elementelor aflate la stânga pozi iei k....log n)... nT(n) = n(n-1)+2[T(0) +T(1)+«..  ¹  1 3º n 1 n 1 ª n 1 n Cum suma ultimilor doi termeni este negativ .. Încheiem cu men iunea c aplicativitate în calculul paralel.+T(n -1)] (n-1)T(n-1) = (n-1)(n-2)+2[T(0)+«.... consider m aceste cazuri echiprobabile..n .+T(n -2)] Sc zând cele dou rela ii ob inem: nT(n)±(n-1)T(n-1) = 2(n-1)+ 2T(n-1).. dci: nT(n) = (n+1)T(n -1)+2(n-1) . T(2) T(1) ¨ 2 1 ¸ !  2©  ¹ 3 2 ª 3 2º f(x)=ln x 2 3 n n+1 Prin adunarea rela iilor de mai sus ob inem: 1¸ 2 1 T(n) ¨ 1 ! 2©  .2. Metoda Divide et Impera ---------------------------------------------------------------------------------------------------------------------- în cazul cel mai defavorabil a1 se compar cu celelalte n-1 elemente. iar T(n-k) este timpul necesar ordon rii elementelor aflate la drea pta pozi iei k..... Împart cu n(n+1): T(n) T(n  1) 2(n  1) !  n 1 n n(n  1) 1¸ T(n) T(n  1) ¨ 2 !  2©  ¹ n 1 T(n) ª n 1 n º 1 ¸ T(n  1) T(n  2) ¨ 2  2©  ! ¹ n T(n  1) ª n n  1 º .....  a1 poate fi pozi ionat pe oricare dintre pozi iile k=1.........81 Structuri de date si tehnici de programare .

în continuarea enun urilor 2. a cunoa te defini ia arborilor de decizie. 2. bazat pe arbori. Da i o descriere succint a metodei Divide et Impera. Care este facorul cu care se reduce timpul de executare a unei probleme prin aplicarea metodei Divide et Impera ? R spunsurile la acest test se g sesc la pagina 83 a acestei unit i de înv are. a cunoa te leg tura între arbo ri i metoda Divide et Impera. necesar oric rui algoritm bazat pe compara ii.8. pentru sortarea unui tablou cu n elemente . a cunoa te timpul optim. 3. Testul de autoevaluare nr. 1 Consulta i bibliografia pentru: 1. Metoda Divide et Impera ----------------------------------------------------------------------------------------------------------------------- Tema de autoinstruire nr. 3. De ce este aplicabil metoda Divide et Impera în calculul paralel ? 4. 1 1. Ce leg tur presupune metoda Divide et Impera între tipul problemei i tipul subproblemelor? R spunsurile la test se vor da în spa iul liber din chenar. 82 -------------------------------------------------------------------------------------------------------------Structuri de date si tehnici de programare .

8. 4.dup ce se ob in rezultatele subp roblemelor. Metoda Divide et Impera presupune c tipul unei probleme coincide totdeauna cu tipul subproblemelor în care este descompus (de care depinde). . 2.construirea dinamic a unui arbore (prin împ r irea în subprobleme). Lucrare de verificare pentru studen i -------------------------------------------------------------------------------------------------------------------. procesorul care se ocup de problem asambelaz aceste rezultate.sunt delegate procesoare pentru rezolvarea subproblemelor. dac timpul necesar execut rii unui algoritm este O(nk). transformarea sa prin aplicarea metodei Divide et Impera conduce la un timp de ordinul O(n k-1 .7.83 Structuri de date si tehnici de programare . Metoda Divide et Impera ----------------------------------------------------------------------------------------------------------------------- 8. În general. 1.8. Metoda Divide et Impera const în: . Rezolvarea unei probleme poate fi f cut în modul urm tor: . Comentarii i r spunsuri la testele de autoevaluare Testul 1. .parcurgerea în postordine a arborelui (prin asamblarea rezultatelor par iale). 3.6. log n).

2005 [2] Cormen T. elementul din mijloc este eliminat. et al. Se d o plac dreptunghiular în care sunt f cute n g uri i pozi iile lor sunt date prin coor donatele (x. y) ale acestora. Problems on Algorithms (2nd Edition). 2002 [4] Skiena Steven. modul de introducere a datelor i aspecte deosebite folosite la elaborarea programelor. Gasarch William. În acest mod se ajunge la un sub ir ale c rui elemente au numerotarea corespunz toare jum t ii receptoare. Bibliografie [1] Georgescu Horia. 2. H. cu ajutorul unui cal.. Editura Universit ii Bucure ti. Se cer urm toarele: .S se precizeze toate elementele finale posibile. Tehnici de programare. Metoda Divide et Impera ----------------------------------------------------------------------------------------------------------------------- Scrie i câte un program ce folose te metoda Divide et Impera pentru cele trei probleme de mai jos: 1. . S se parcurg o tabl de ah pornind dintr -un col .. Definim plierea vectorului prin suprapunerea unei jum t i numit donatoare peste cealalt jum tate numit receptoare cu precizarea c dac num rul de elemente este impar. n} s se determine dac elementul i poate fi element final ca rezultat al unor plieri succesive. 8. Placa cu g uri ..8. 3.Fiind dat i{1.înso i i programul de o documenta ie privind problema tratat . . S ritura calului. Se consider un vector de lungime n. The Algoritm Design Manual. Problema plierii . Introducere în algoritmi. Indica ii de redactare: . 2000 [3] Parberry Ian. Computer Libris Agora.8. tiind c g urile sunt considerate punctiforme s se determine placa de arie maxim care se poate decupa din placa ini ial i care nu con ine în interior nici o gaur . . Springer 1998 84 -------------------------------------------------------------------------------------------------------------Structuri de date si tehnici de programare . 2.introduce i în program un num r suficient de comentarii pentru buna în elegere a programelor. Se va trece prin toate p tratele tablei de ah f r a trece de dou ori prin acela i p trat.

.... 9. 93 9...................................................................... care evident este final (nu are descenden i)....... ...... Prezentare general Metoda Branch and Bound se aplic problemelor care care pot fi reprezentate pe un arbore: se începe prin a lua una dintre mai multe decizii posibile....... Algoritmul Branch & Bound pentru probleme de optim .. Metoda Branch and Bound ----------------------------------------------------------------------------------------------------------------------- Unitatea de înv are Nr.9...............1.......... ve i reu i s : y st pâni i o metod complex de programare.... ce îmbin parcurgerea în adâncime a unui arbore cu parcurgerea sa pe l ime.. 95 Obiectivele Unit ii de înv are nr.... Exemplul 1 Jocul 15 (Perspico).......................... Prezentare general .... 94 9............ vom alege una dintre ele etc.................4.....3.......................... 9 METODA BRANCH AND BOUND Cuprins Obiectivele unit ii de înv are nr... 9 Dup ce ve i parcurge aceast unitate de înv are.. Vârfurile arborelui corespund st rilor posibile în dezvoltarea solu iei.............. .......2. Fiecare pl cu este etichetat cu unul dintre -------------------------------------------------------------------------------------------------------------------....... o pozi ie fiind liber ... dintre care c ut m de exemplu pe cel care optimizeaz o anumit func ie.1................... Deosebim dou tipuri de probleme: 1) Se caut un anumit vârf.................5....... care reprezint solu ii posibile...... Un num r de 15 pl cu e p trate sunt incorporate într -un cadru 4 v4. .... ......... 9.. Bibliografie .......... ......... 8 5 9................. Comentarii i r spunsuri la testele de autoevaluare ................. numit vârf rezultat................................ dup care suntem pu i în situa ia de a alege din nou între mai multe decizii.................... 89 9..... 2) Exist mai multe vârfuri finale...... 85 9. ...85 Structuri de date si tehnici de programare .. ....... . ........ y s aplica i metoda Branch and Bound problemelor de optim.............. .. Lucrare de verificare pentru studen i .........................

9. Metoda Branch and Bound ----------------------------------------------------------------------------------------------------------------------numerele 1,2,...,15. Prin configura ie în elegem o plasare oarecare a pl cu elor în cadru. Orice pl cu adiacent cu locul liber poate fi mutat pe acest loc liber. Dându-se o configura ie ini ial i una final , s e cere o succesiune de mut ri prin care s ajungem din configura ia ini ial în cea final . Configura iile ini ial i final pot fi de exemplu: 1 5 9 13 2 6 14 3 7 10 15 4 8 11 12 1 5 9 13 2 6 10 14 3 7 11 15 4 8 12

unde locul liber mai poate fi considerat drept con inând pl cu a imaginar cu eticheta 16. Prezent m întâi o condi ie de existen a unei succesiuni de mut ri prin care se poate trece de la configura ia ini ial în cea final . Cele 16 loca uri sunt considerate ca fiind ordonate de la stânga la dreapta i de jos în sus. Pentru pl cu a etichetat cu i definim valoarea n(i) ca fiind num rul loca urilor care urmeaz celei pe care se afl pl cu a i care con in o pl cu a c rei etichet este mai mic decât i. De exemplu pentru configura ia ini ial de mai sus avem: n(8)=1 ; n(4)=0 ; n(16)=10 ; n(15)=1 etc. Fie l i c linia i coloana pe care apare locul liber. Fie x{0,1} definit astfel: x=0 dac i numai dac l+c este par. Se poate demonstra urm torul rezultat:
Propozi ie.

Fiind dat o configura ie ini ial , putem trece din ea la configura ia final de mai sus  n(1)+n(2)+...+n(16)+x este par. În continuare vom presupune c putem trece de la configura ia ini ial la cea final . Cum locul liber poate fi mutat spre N, S, E, V (f r a ie i din cadru), rezult c fiecare configura ie (stare) are cel mult 4 descenden i. Se observ c arborele astfel construit este infinit. St rile finale sunt st ri rezultat i corespund configura iei finale.

Exemplul 2

Circuitul hamiltonian de cost minim. Se consider un graf orientat cu arcele etichetate cu costuri pozitive. Inexisten a unui arc între dou vârfuri este identificat prin "prezen a" sa cu costul +g. Presupunem c graful este dat prin matricea C a costurilor sale. Se cere s se determine, dac exist , un circuit hamiltonian de cost minim. S consider m de exemplu graful dat de matricea de costuri:

¨g 3 7 2 ¸ ¹ © ©5 g 1 9¹ C !© 4 8 g 3¹ ¹ © © 6 2 6 g¹ º ª 86 -------------------------------------------------------------------------------------------------------------Structuri de date si tehnici de programare

9. Metoda Branch and Bound ----------------------------------------------------------------------------------------------------------------------Arborele spa iului de st ri, în care vârfurile corespund vârfurilor din graf, iar muchiile reprezint arce din graf, este urm torul:

1

(1,2)
2

(1,3)
3

(1,4)
4

(2,3)
5

(2,4)
6

(3,2)
7

(3,4)
8

(4,2)
9

(4,3)
10

(3,4)
11

(4,5)
12

(2,4)
13

(4,2)
14

(2,3)
15

(3,2)
16

subîn elegându-se c se pleac din vârful 1 i c din frunze se revine la acest vârf. Revenim la descrierea metodei Branch and Bound . tim c i metoda backtracking este aplicabil pr oblemelor reprezentabile pe arbori. Exist îns multe deosebiri, dintre care men ion m urm toarele: - ordinea de parcurgere a arborelui; - modul în care sunt elimina i subarborii care nu pot conduce la o solu ie; - faptul c arborele poate fi infinit (prin natur a sa sau prin faptul c mai multe vârfuri pot corespunde la o aceea i stare). În general arborele de st ri este construit dinamic. Este folosit o list L de vârfuri active, adic de st ri care sunt susceptibile de a fi dezvoltate pentru a ajunge la solu ie (solu ii). Ini ial, lista L con ine r d cina arborelui, care este vârful curent. La fiecare pas, din L alegem un vârf (care nu este neap rat un fiu al vârfului curent!), care devine noul vârf curent. Când un vârf activ devine vârf curent, sunt genera i to i fiii s i, care devin vârfuri active (sunt inclu i în L). Apoi din nou este selectat un vârf curent.

-------------------------------------------------------------------------------------------------------------------- 87 Structuri de date si tehnici de programare

9. Metoda Branch and Bound ----------------------------------------------------------------------------------------------------------------------Legat de modul prin care alegem un vârf activ drept vârf curent, deci implicit legat de modul de parcurgere a arborelui, facem urm toarele remarci:  parcurgerea DF nu este adecvat , deoarece pe de o parte arborele poate fi infinit, iar pe de alt parte solu ia c utat poate fi de exemplu un fiu al r d cinii diferit de primul fiu i parcurgerea în adâncime ar fi ineficient : se parcurg inutil st ri, în lo c de a avansa direct spre solu ie;  parcurgerea pe l ime conduce totdeauna la solu ie (dac aceasta exist ), dar poate fi ineficient dac vârfurile au mul i fii. Metoda Branch and Bound încearc un "compromis" între cele dou parcurgeri men ionate mai su s, ata ând vârfurilor active câte un cost pozitiv, ce inten ioneaz s fie o m sur a gradului de "apropiere" a vârfului de o solu ie. Alegerea acestui cost este decisiv pentru a ob ine un timp de executare cât mai bun i depinde atât de problem , dar mai ales de abilitatea programatorului. Observa ie. Totdeauna costul unui vârf va fi mai mic decât cel al descenden ilor (fiilor). De fiecare dat drept vârf curent este ales cel de cost minim (cel considerat ca fiind cel mai "aproape" de solu ie). De a ceea L va fi în general un min-ansamblu: costul fiec rui vârf este mai mic decât costul descenden ilor. Din analiza teoretic a problemei deducem o valoare lim care este o aproxima ie prin adaos a minimului c utat: atunci când costul unui vârf dep e te lim, atunci vârful curent este ignorat: nu este luat în considerare i deci este eliminat întregul subarbore pentru care este r d cin . Dac nu cunoa tem o astfel de valoare lim, o ini ializ m cu +’. Se poate defini o func ie de cost ideal , pentru care c(x) este dat de:  nivelul pe care se afl vârful x dac x este vârf rezultat;  +g dac x este vârf final, diferit de vârf rezultat;  min {c(y) | y fiu al lui x } dac x nu este vârf final. Aceast func ie este ideal din dou puncte de vedere: - nu poate fi calculat dac arborele este infinit; în plus, chiar dac arborele este finit, el trebuie parcurs în întregime, ceea ce este exact ce dorim s evit m; - dac totu i am cunoa te aceast func ie, solu ia poate fi determinat imediat: plec m din r d cin i coborâm mereu spre un vârf cu acela i cost, pân ajungem în vârful rezultat. Neputând lucra cu func ia ideal de mai sus, vom alege o aproxima ie a lui c, care trebuie s satisfac condi iile: 1) în continuare, dac y este fiu al lui x avem (x)< (y) ; 88 -------------------------------------------------------------------------------------------------------------Structuri de date si tehnici de programare

pentru o valoare natural k. chiar dac arborele este infinit. i final n j elimin din L vârfurile k cu (k)•min (*) else if (j)<min then j   L if min=+lim then write('Nu exist solu ie') else writeln(min). (x) s O prim modalitate de a asigura compromisul între parcurgerile în adâncime i pe l ime este de a alege func ia astfel încât. s fie îndeplinit condi ia: pentru orice vârf x situat pe un nivel nx i orice vârf situat pe un nivel nyu nx+k. calculez (rad). alegând: (x) = suma dintre lungimea drumului de la r d cin la x i num rul de pl cu e care nu sunt la locul lor (aici k=15). L ž {i}. tata(i) n 0 while L { ˆ i ž L {este scos vârful i cu (i) minim din min-ansamblul L} for to i j fii ai lui i calculez (j). 3) este indicat ca ”c pentru a ne asigura c dac (x)>lim .2. indiferent dac y este sau nu descendent al lui x. i n ifinal while i { 0 write(i). adic nu putem merge "prea mult" în adâncime. i n tata(i) -------------------------------------------------------------------------------------------------------------------. deci x nu va mai fi dezvoltat. Algoritmul Branch & Bound pentru probleme de optim S presupunem c dorim s determin m vârful final de cost minim i drumul de la r d cin la el. Fie lim aproximarea prin adaos considerat mai sus.9. 9. s avem (x)> (y) . este valabil urm toarea propozi ie: Propozi ie . Dac exist solu ie. calcule locale asupra lui j. ea va fi atins într-un timp finit. min n lim. Putem aplica cele de mai sus pentru jocul Perspico.89 Structuri de date si tehnici de programare . atunci i c(x)>lim . Dac aceast condi ie este îndeplinit . Metoda Branch and Bound ----------------------------------------------------------------------------------------------------------------------2) poat fi calculat doar pe baza informa ilor din drumul de la r d cin la x . Condi ia de mai sus spune c niciodat nu poate deveni activ un vârf aflat pe un nivel nyunx+k dac în L apare un vârf situat pe nivelul nx. tata(j) n i if j este vârf final then if (j)<min then min n (j). Algoritmul este urm torul ( rad este r d cina arborelui. iar ifinal este vârful rezultat): i n rad.

Vom aplica algoritmul de mai sus pentru problema circuitului hamiltonia n de cost minim. În general. 1. Concret.j). iar matricea M1 este: oar astfel: Observa ie.  în caz contrar. Metoda Branch and Bound ----------------------------------------------------------------------------------------------------------------------- Observa ie. vom lucra cu matrici de costuri reduse (în care pe orice linie sau coloan apare cel pu in un zero. adic costul real al circuitului. deoarece mergem sigur c tre vârful j din graf.j):  dac y este vârf terminal. exceptând cazul când linia sau coloana con ine numai ’). Dac mic or m toate elementele unei linii sau coloane cu E.1) n g. 2. 4 90 -------------------------------------------------------------------------------------------------------------Structuri de date si tehnici de programare ¡ 5 0 ¡ ¡ ¨ © ©3 M1 ! © 0 © ©3 ª ¡ 1 5 0 0¸ ¹ 8¹ 0¹ ¹ ¹ º . elementele coloanei j devin g. pentru a nu reveni prematur în r d cina 1. deoarece în orice circuit hamiltonian din orice vârf pleac exact un arc i în orice vârf sose te exact un arc. La (*) am inut cont de faptul c dac j este descendent al lui i. (x) va fi chiar c(y). reduc prima coloan cu 1. reducem noua matrice Mx i ob inem My. iar (1) = cantitatea cu care s-a redus C.y) este etichetat cu (i. atunci (i)< (j) . Conform acestei observa ii. Mx(j. deoarece am ajuns sigur în vârful j din graf. pentru un vârf y oarecare al c rui tat este x i muchia (x. Pentru orice vârf x din arborele de st ri.9. Pentru r d cina rad= 1 plec m de la matricea de costuri C. Vom lua (y) n (x)+r+M x(i. Fiec rui vârf x îi vom ata a o matrice de costuri Mx (numai dac nu este frunz ) i valoarea (x). calculele se desf  Pentru r d cin : reduc liniile în ordine cu 2. pentru exemplul dat. pe exemplul considerat mai sus. orice circuit hamiltonian va avea costul mic orat cu E. în acest mod ob in (1)=9 . Matricea ata at va fi matricea redus ob inut din C. valoarea c(x) dat de func ia de cost ideal este:  lungimea circuitului corespunz tor lui x dac x este frunz  min {c(y) | y fiu al lui x } altfel. 3. plecând de la Mx i (x) proced m astfel: elementele liniei i devin g. fie r cantitatea cu care s-a redus Mx.

Devine activ vârful 4.  - Pentru vârful 2: plec de la M1 i pun g pe linia 1 i coloana 2.91 Structuri de date si tehnici de programare ¢ ¢ ¢ ¢ ¢ ¢ ¢ ¢ ¢ ¢ 0 1 ¸ ¹ 8¹ 0¹ ¹ ¹ º ¢ ¢ ¢ ¢ ¢ ¢ ¢ ¢ ¢ ¢ 5 0 0 5 0 4 ¸ ¹ ¹ ¹ ¹ ¹ º ¸ ¹ 5¹ 0¹ ¹ ¹ º ¢ ¢ ¢ ¢ ¢ ¢ ¢ ¢ ¢ ¢ ¢ ¢ ¢ ¢ ¢ ¢ ¢ ¢ ¢ ¢ ¢ ¢ ¢ ¢ 0 ¸ ¹ ¹ ¹ ¹ ¹ º . iar matricea M2 este: ¨ © © M2 ! © 0 © ©0 ª  - Pentru vârful 3: plec de la M1 i pun g pe linia 1 i coloana 3.4} cu (2)=13. nu este necesar vreo reducere.  - Pentru vârful 9: plec de la M4 i pun g pe linia 4 i coloana 2.9. în acest mod ob in (9)=0+9+0=9 . în acest mod ob in (4)=0+9+0=9 . (4)=9. nu este necesar vreo reducere. iar matricea M4 este ¨ © ©3 M4 ! © 0 © © ª j Acum L={2.3. (3)=17. iar matricea M9 este: ¨ © © M9 ! © 0 © © ª -------------------------------------------------------------------------------------------------------------------. Metoda Branch and Bound ----------------------------------------------------------------------------------------------------------------------- j Acum minn 9. în acest mod ob in (2)=3+9+1=13 . reduc linia 3 cu 3. L={1}. iar matricea M3 este: ¨ © ©0 M3 ! © © ©3 ª  - Pentru vârful 4: plec de la M1 i pun g pe linia 1 i coloana 4. reduc linia 2 cu 3. Este extras vârful 1 i sunt considera i fiii s i. în acest mod ob in (3)=3+9+5=17 .

Care este clasa de probleme pentru care se poate aplica metoda Branch and Bound? R spunsurile la test se vor da în spa iul liber din chenar. deci L devine vid . Care este rela ia între o func ie de cost oarecare i func ia de cost ideal ? R spunsurile la acest test se g sesc la pagina 93 a acestei unit i de înv are. reduc linia 2 cu 3. (15)=c(15)=9 (costul real al circuitului).3.2 .9. iar matricea M10 este: ¨ © ©0 M10 ! © © © ª 0 j Acum L={2. (9)=9 . în acest mod ob in (10)=8+9+4=21 . Sunt eliminate din L vârfurile cu costurile mai mari decât 9.3. iar linia 3 cu 5. 1 1. Singurul s u descendent este 15. Metoda Branch and Bound ---------------------------------------------------------------------------------------------------------------------- Pentru vârful 10: plec de la M4 i pun g pe linia 4 i coloana 3. min r mâne egal cu 9.1) i algoritmul se opre te. (3)=17 .4.9. Cum se alege func ia de cost i care rolul ei? 3. va fi produs la ie ire circuitul c utat (1. care este frunz .10} cu (2)=13 . în continuarea enun urilor 2. Care este criteriul prin care din mul imea vârfurilor active este ales vârful curent ? 4. Testul de autoevaluare nr. (10)=21 . Devine activ vârful 9. 92 -------------------------------------------------------------------------------------------------------------Structuri de date si tehnici de programare £ £ £ £ £ £ £ £ £ £ £ £ £ £ ¸ ¹ ¹ ¹ ¹ ¹ º .

Comentarii i r spunsuri la testele de autoevaluare Testul 1. . 3. 1. pentru problemele de minim.3. de c tare. Metoda Branch and Bound ----------------------------------------------------------------------------------------------------------------------- 9. Pentru problemele de minim. Rolul ei este de a aproxima func ia de cost ideal .9. Orice func ie de cost c trebuie s îndeplineasc condi iile: .93 Structuri de date si tehnici de programare . 4. 2. vârful curent este ales din mul imea vârfurilor active i anume este ales ca fiind cel de cost minim. -------------------------------------------------------------------------------------------------------------------.dac y este fiu al lui x avem c(x)<c(y).c(x) s poat fi calculat doar pe baza informa ilor din drumul de la r d cin la x . Metoda Branch and Bound este aplicabil problemelor care se pot reprezenta pe un arbore (finit sa infinit). func ia de cost aleas trebuie s aib valori mai mici decât func ia de cost ideal . În general.

introduce i în program un num r suficient de comentarii pentru buna în elegere a programelor. Indica ii de redactare: . Problema aloc rii resurselor. modul de introducere a datelor i aspecte deosebite folosite la elaborarea programelor. Un exemplu de configura ie este urm toarea: col mijloc col mijloc centru mijloc col mijloc col în care câmpurile negre apar înt rite. am bele date. dar i dificult ile întâmpinate. fiecare câmp putând fi alb sau negru.9. Metoda Branch and Bound ----------------------------------------------------------------------------------------------------------------------- 9.înso i i programul de o documenta ie privind pro blema tratat . ± ac ionarea centrului alb schimb culorile lui i ale mijloacelor vecine. Repartizarea unei resurse i obiectivului j impune un cost cij. ± ac ionarea unui mijloc alb schimb culorile lui i ale col urilor vecine. Se pune problema re partiz rii fiec rei resurse a câte unui obiectiv astfel încât costul total al repartiz rii s fie minim. Rezolv rile.4. ± ac ionarea unui col alb schimb c ulorile lui. Se consider n resurse care concur la realizarea a n obiective. Scopul jocului este de a trece dintr -o configura ie ini ial într-o configura ie final . 2. Jocul Perspico. i un centru. 3. ale mijloacelor vecine i a centrului. Regulile de joc sunt urm toarele: ± ac ionarea unui câmp negru are efect nul. QUAD se joac pe o tabl având nou câmpuri: patru col uri. vor fi expediate prin mail tutorelui. . Lucrare de verificare pentru studen i Scrie i câte un program ce folose te met oda Branch and Bound pentru rezolvarea celor trei probleme de mai jos: 1. 94 -------------------------------------------------------------------------------------------------------------Structuri de date si tehnici de programare . patru mijloace. Jocul Quad. Enun ul este prezentat mai sus.

Bibliografie [1] Georgescu Horia. 2005 [2] Cormen T. The Algoritm Design Manual. Tehnici de programare. Editura Universit ii Bucure ti. Gasarch William. 2002 [4] Skiena Steven. Problems on Algorithms (2nd Edition). H. et al. Metoda Branch and Bound ----------------------------------------------------------------------------------------------------------------------- 9. Computer Libris Agora. Springer 1998 -------------------------------------------------------------------------------------------------------------------. 2000 [3] Parberry Ian.95 Structuri de date si tehnici de programare . Introducere în algoritmi.9.5.

..... 96 10.................... Metoda program rii dinamice...... Metoda irului cresc tor de mul im i ... ... Metoda program rii dinamice ----------------------------------------------------------------------------------------------------------------------- Unitatea de înv are Nr...... ... ......... 99 10........................109 Obiectivele Unit ii de înv are nr................. 107 10......................1........... Comentarii i r spun suri la testele de autoevaluare . ........ ................2........................................ ...10. Introducere Vom începe prin a enun a o problem general i a trece în revist mai mul i algoritmi de rezolvare........................ ......................6.. ve i reu i s cunoa te i: y no iunea de graf de dependen e..........3... Bibliografie ..7. 100 10............................ y parcurgerea în postordine a unui PD -arbore ca solu ie final pentru metoda program rii dinamice..4....... ... 10 METODA PROGRAM RII DINAMICE Cuprins Obiectivele unit ii de înv are nr............... Solu ie final ........................ O problem general ........ 98 10... 10 Dup ce ve i parcurge aceast unitate de înv are.................... ................... ............................... Lucrare de verificare pentru studen i .......... .............................. y no iunea de PD-arbore. ........ 108 10........ Exemple reprezentative .. 10 ........................................... 10..... 96 -------------------------------------------------------------------------------------------------------------Structuri de date si tehnici de programare ........................1..... ......... ........ Abia dup aceea vom descrie metoda program rii dinamice................5..... 96 10........ ............. y exemple reprezentative de probleme rezolvate prin metoda program rii dinamice........ ...... 100 10.8........................ Sortarea topologic ....................................... ........................... . ... y metode de rezolvare precum cea a irului cresc tor de mul imi i cea a sort rii topologice............................. O problem general Fie A i B dou mul imi oarecare....... .....

1.5. Metoda program rii dinamice ----------------------------------------------------------------------------------------------------------------------Fiec rui element xA urmeaz s i se asocieze o valoare v(x)B.2.7. Elementele din X au asociat valoarea 1.9}. A11={8.8. problema are solu ie dac i numai dac z este accesibil.12}. a a cum se vede pe graful de dependen e de mai jos. z=5..11.. z=3..10. 3 1 2 Observa ii: - 4 A poate fi chiar infinit .6. Lucrurile devin mai clare dac reprezent m problema pe un graf de dependen e.1. fx func ie care specific dependen a de mai sus.2}. un maxim. fx poate fi un minim.. poate fi calculat valoarea v(x).1.97 Structuri de date si tehnici de programare .1} sau un produs cartezian.4. Fiec rui xA\X îi asociem: Ax Ž A : mul imea elementelor din A de a c ror valoare depinde v(x). spunem c x este accesibil dac . Evident.10.2.12. O ordine posibil de a considera elementele lui A\X astfel încât s putem calcula valoarea asociat lor este: 3.2.8}. Pentru orice xA.. A5={1. Ini ial v este cunoscut doar pe XŽA.. 5 4 3 6 10 1 2 11 12 7 8 10 9 Problema enun at nu are totdeauna solu ie. Fiecare func ie fx calculeaz v(x) ca fiind suma valorilor elementelor din Ax. X={1.1. X{ Ø.. Este evident c vom ob ine v=(1.. dac este posibil.1. R.4. Z. A3={1.2. B este de obicei N.9}. -------------------------------------------------------------------------------------------------------------------..3}. Vârfurile corespund elementelor din A. Se cere s se calculeze.a k}. A10={7..2. în care exist un circuit.4}. iar descenden ii unui vârf x sunt vârfurile din Ax.11}. valoarea v(z).2. A12={10. Vârfurile din X apar îngro ate. {0.2. atunci v(x)=f x(v(a 1). Exemplul 1 A={1. Dac : Ax={a1... Se mai d zA.4). plecând de la X. A4={1.1.v(a k)). o sum etc.

unde U este mul imea curent de vârfuri a c ror valoare asociat este cunoscut . Ž Xk Ž Xk+1 Ž . X0 Ž X1 Ž . V nV\{x} calculeaz v(x) conform func iei fx if x=z then write v(x)... k>0 Evident. Problema enun at are solu ie dac i numai dac : 1) Oz nu are circuite. 'nu este accesibil¶) 98 -------------------------------------------------------------------------------------------------------------Structuri de date si tehnici de programare . Prezent m în continuare mai multe metode de rezolvare a problemei enun ate. V n A\X repeat W nV for to i xV if AxŽU then U n U Š{x}. Definim urm torul ir X0 = X Xk+1 = Xk Š {x  AAx Ž Xk}. atunci Xk+i=Xk . defini iei irului de mul imi = = = = Xk+i Š {x  A  AxŽXk+i} = cf. Vom lucra cu o parti ie A=UŠV. Presupunem Xk+i=Xk i demonstr m c Xk+i+1=Xk : Xk+i+1 = cf. stop until V=W { nu s-a avansat! } write(z. dac aplic m cele de mai sus pentru problema general aceasta are solu ie dac i numai dac zXk. U n X. Metoda program rii dinamice ----------------------------------------------------------------------------------------------------------------------Pentru orice xA. Pentru i=1 rezultatul este evident. ipotezei de induc ie Xk Š {x  A  AxŽXk} = cf.10.iN. adic mul imea vârfurilor y pentru care exist un drum de la y la x. ipotezei de induc ie X k.. not m prin Ox mul imea vârfurilor observabile din x.2. Propozi ie Dac Xk+1=Xk.. defini iei irului de mul imi Xk+1 = cf. 10. ne oprim cu construc ia irului cresc tor de mul imi la primul k cu enun at . Consecin e - Xk=Xk+1 (A este finit !). Facem demonstra ia prin induc ie dup i. 2) vârfurile din Oz în care nu sosesc arce fac parte din X. Metoda irului cresc tor de mul imi Fie A o mul ime finit cresc tor de mul imi: i X o submul ime a sa.

atunci i apare la ie ire înaintea lui j. Este evident c problema se transpune imediat la grafurile de dependen : se cere o parcurgere a vârfurilor grafului astfel încât dac exist un arc de la i la j. notat prin "<".3. nrpred in0. . consider m: Si = lista succesorilor lui i. Se cere s se listeze elementele 1. -------------------------------------------------------------------------------------------------------------------.j) cu i<j. dac exist solu ie..determin i care nu are predecesori. .. i C n Ø.n ale mul imii într-o ordine ce satisface cerin a: dac i<j. nr n 0 { nr este num rul elementelor produse la ie ire } for k=1. Etapa de ini ializare const în urm toarele: Si n Ø.n} o mul ime finit ..m { m este num rul perechilor din rela ia "<" } read(i.. Metoda program rii dinamice ----------------------------------------------------------------------------------------------------------------------Metoda irului cresc tor de mul imi este larg folosit limbajelor formale.n if nrpred i=0 then i   C S observ m c timpul cerut de etapa de ini ializare este de ordinul O(m+n) .. atunci i trebuie vizitat înaintea lui j. În esen . algoritmul care urmeaz repet urm torii pa i: .99 Structuri de date si tehnici de programare . Pentru fiecare iA. în teoria existen a 10. Rela ia este dat prin mul imea perechilor (i. nrpred j n nrpred j+1 for i=1.. Ini ial M=A. Fie M mul imea curent de vârfuri. nrpred i = num rul predecesorilor lui i din mul imea M curent . ea nu este neap rat unic ..j) Si ž j.îl scrie. Sortarea topologic Fie A={1. Fie C coada elementelor din M care nu au predecesori. Observa ii: - problema are solu ie dac i numai dac graful este aciclic. Problema enun at apare de exemplu la înscrierea unor termeni într-un dic ionar astfel încât explica iile pentru orice termen s con in numai termeni ce apar anterior. Pe A este dat o rela ie tranzitiv .elimin perechile pentru care sursa este i. unde de cele mai multe ori ne intereseaz unui algoritm i nu performan ele sale.10.

calculeaz v(x) conform func iei fx if i=z then write v(i). rezult c timpul total este de ordinul O(m+n) . unde procedura DF este: procedure DF(x) x   Xz for to i yAx if y‘Xz then (y. Dar |S1|+. Observa ie. 100-------------------------------------------------------------------------------------------------------------Structuri de date si tehnici de programare .. Fie Gz=(Xz.x. deci liniar.. Timpul este liniar.5. Mz=Ø. xOz (exist drum de la x la z). 10. 10. Metoda program rii dinamice.10. ceea ce face ca timpul de executare s fie de ordinul O(m). Ini ial Xz=Ø.Identific m Gz = subgraful asociat lui Oz .+|S n|=m.4. Metoda program rii dinamice ----------------------------------------------------------------------------------------------------------------------while C {Ø i ž C. este urm torul: Fiecare executare a lui while necesit un timp propor ional cu Si .Aplic m sortarea topologic . Pentru a ob ine graful Gz execut m apelul DF(z). adaptat la problema general . - Ar fi totu i mai bine dac : am cunoa te de la inceput Gz. . stop for to i jSi nrpred j n nrpred j-1 if nrpred j=0 then j   C if nr<n then write('Nu) Algoritmul propriu-zis. inând cont i de etapa de ini ializare.Mz). forma grafului ar permite o parcurgere mai simpl . Solu ie final Etapele sunt urm toarele: .x)   Mz. write(i). . DF(y) end.X={xgrad-(x)=0} . Exemplul Urm torul graf este un PD-arbore de r d cin z=5. Exemple reprezentative Definim un PD±arbore de r d cin z ca fiind un graf de dependen e î n care: .

Metoda program rii dinamice ----------------------------------------------------------------------------------------------------------------------- 5 4 5 4 3 3 2 1 1 2 Un PD-arbore nu este neap rat un arbore. vârfurile apar sortate topologic.poate fi pus pe niveluri: fiecare vârf x va fi pus pe nivelul egal cu lungimea celui mai lung drum de la x la z. Mai pe scurt. problema se reduce la determinarea valorii asociate lui z (r d cina arborelui). parcurs(x) ntrue end Timpul de executare a algoritmului este evident liniar. Prin parcurgerea în postordine. Algoritmul de parcurgere în postordine folose te un vector parcurs pentru a ine eviden a vârfurilor vi zitate. putem spune: Metoda program rii dinamice const în iden tificarea unui PD-arbore i parcurgerea sa în postordine .10.poate fi parcurs (cu mici modific ri) în postordine. Este ini ializat vectorul parcurs i se începe parcurgerea prin apelul postord(z) : for toate vârfurile x parcurs(x) n xX postord(z) unde procedura postord are forma: procedure postord(x) for to i jAx cu parcurs(j)=false postord(j) calculeaz v(x) conform func iei fx. În multe probleme este util s c utam în PD-arbore regularit i care s evite memorarea valorilor tuturor vârfurilor. . 2) În graf este pus în eviden un PD -arbore. 3) Se parcurge în postordine PD-arborele. Metoda program rii dinamice se aplic problemelor care urm resc calcularea unei valori i const în urm toarele: 1) Se asociaz problemei un graf de dependen e. dar: . --------------------------------------------------------------------------------------------------------------------101 Structuri de date si tehnici de programare .

fk(a..+a j.+a n Este evident c trebuie calculate anumite sume par iale.j} cu ie j i cu valoarea ata at si... dar care pun în eviden anumite caracteristici ale metodei program rii dinamice. Dorim s calcul m valoarea vârfului z=(1:n) ..a+b) write(b) Exemplul 2 Calculul sumei a1+ ...n}. b n1 for i=2.i k} a lui {1.....2..b)n (b. Vom nota un astfel de vârf prin (i:j) . cu valoarea asociat ai1+...i+1. A={1. F 1=1.k-2}. v(k)=(F k-1. ku2 Un prim graf de dependen e este urm torul: S observ m c o mai bun alegere a mul imii B simplific structura BDarborelui.n} .j=ai+. Fn = Fn-1 + Fn-2 .. n-1 1 2 3 n i ob inem algoritmul binecunoscut: an0. X={0. O a doua posibilitate este ca vârfurile corespund mul imilor Putem considera mai mul i PD-arbori: 102-------------------------------------------------------------------------------------------------------------Structuri de date si tehnici de programare .1} ...+a ik.. {i. B=N. Aceast abordare este nerealizabil : num rul de vârfuri ar fi exponen ial.. nu2 Dorim s calcul m Fn pentru un n oarecare.n} .. Aici A={0. B=N vN.a+b) v(0)=(0....«. O prim posibilitate este s consider m un graf în care fiecare vârf s fie o submul ime {i1.b)=a+b. Fk). Metoda program rii dinamice ----------------------------------------------------------------------------------------------------------------------Vom începe cu câteva exemple foarte simple.2. iar Ak={k-1. Exemplul 1 irul lui Fibonacci tim c acest ir este definit astfel: F0=0.1).n (a..10. ku2 v(k)=F k . f k(a.b)=(b.

ind nind-1 end. Metoda program rii dinamice ---------------------------------------------------------------------------------------------------------------------- Arborele liniar constituit din vârfurile cu i=1.. nr = lungimea maxim c utat .-1 lung(i) n1+max{lung(j) j>i & a i<aj} nr nmax{nr. Ai={i+1. precum i toate sub irurile cresc toare de lungime maxim .. s(ind) na(j).. --------------------------------------------------------------------------------------------------------------------103 Structuri de date si tehnici de programare . X={n}.((a 1+a2)+a3)+.j=s1. s1.  Arborele liniar constituit din vârfurile cu j=n. Introducem nota iile: i<n. Sub irurile se ob in în vectorul s..a n).. A={1. lung(i) = lungimea maxim a sub irului cresc tor ce începe cu ai..1=a1. fi=lung(i) Evident.10. s(1) nai. Determinarea lui nr se face astfel: nr n1.. Exemplul 3 Deteminarea sub irului cresc tor de lungime maxim . Ob inem rela iile de recuren : s1...lung(i)} Determinarea tuturor sub irurilor cresc toare de lungime maxim se face printr-un backtracking recursiv optimal.n if ai<aj & lung(i)=1+lung(j) then ind++.. jui care corespund asociativit ii la stânga: (.2. suntem în prezen a unui PD -arbore de r d cin 1..n} ..j-1+aj . scrie(j).. Se consider vectorul a=(a 1.n} .1. Acest arbore corespunde asociativit ii la dreapta a sumei.. for i=1.n if lung(i)=nr then ind n1. scrie(i) unde procedura scrie are forma: procedure scrie(i) if ind=nr then write(s) else for j=i+1.).. Se cer lungimea celui mai lung ir cresc tor. lung(n) n1 for i=n-1. iar ind reprezint ultima pozi ie completat din s..

j) cu ie k. tiind c înmul irea matricilor este asociativ . Dac dorim s ob inem un singur sub ir cresc tor de lungime nr.. i de cele de deasupra.dn+1).10.k)+cost(k+1. ob inem rela iile: cost(i. unde dimensiunile matricilor sunt respectiv (d1.i) Forma particular a PD-arborelui nu face necesar aplicarea algoritmului general de parcurgere în postordine: este suficient s parcurgem coloanele 2. Pentru ordinea de înmul ire (A1v A2)v(A3v A4) sunt necesare 1.j). Pentru a pune în eviden importan a ordinii de înmul ire. adic produsul matricilor A(m.000 de înmul iri elementare..v An. A4(1.1) .j) = min {cost(i..i) = 0 cost(i.j)+d ivdk+1v dj+1 | ie k<j}. se pune problema ordinii în care trebuie înmul ite matricile astfel încât num rul de înmul iri elementare s fie minim. 104-------------------------------------------------------------------------------------------------------------Structuri de date si tehnici de programare .j) i n j Vârfurile grafului de dependen i (i..(dn. j 1 (i.. Presupunem c înmul irea a dou matrici se face în modul uzual. (d2.. Valoarea cerut este cost(1. .j) depinde de vârfurile din stânga sunt perechile (i. A3(100.n) .200 de înmul iri elementare . În schimb.j) (j.100) . Metoda program rii dinamice ----------------------------------------------------------------------------------------------------------------------Observa ie.d3).d2)..... Fie cost(i. Avem de calculat produsul de matrici A1v A2v.n) i B(n. Exemplul 4 cost(i. pentru ordinea de înmul ire (A1v(A2vA3))vA4 sunt necesare doar 10. s consider m produsul de matrici A1vA2vA3v A4 unde A1(100.p) necesit mvnvp înmul iri elementare. Punând în eviden ultima înmul ire de matrici.vAj. Înmul irea optim a unui ir de matrici. iar pe fiecare coloan s mergem de la diagonal pân la (i. .1). n. este suficient s elimin m instruc iunea indnind-1.100) .020. Se observ u or c suntem în prezen a unui PD-arbore.j) num rul minim de înmul iri elementare pentru calculul produsului Aiv . A2(1.

u). respectiv n unit i (m<n). Se cere num rul minim de p trate în care poate fi descompus dreptung hiul. nu este nevoie s memor m întreaga matrice.n) . write(')') end.n for i=j-1.p) write('('). ci este suficient s folosim un vector. write('. Asupra sa se pot face t ieturi complete pe orizontal sau vertical . Metoda program rii dinamice ----------------------------------------------------------------------------------------------------------------------for j=2. Aceste este: j!2i!1 (j1)(j2) ! O(n 3) § §(j  i  1)! § j(j  1) 2 j!2 n j1 n ? A Exemplul 5 Descompunerea unui dreptunghi în p trate Se consider un dreptunghi cu laturile de m.k). unde procedura sol are forma: procedure sol(p.u) if p=u then write(p) else k ncost(u. Dac dorim s producem i o ordine de înmul ire optim . Dac dorim numai costul final. fie k valoarea pentru care se realizeaz minimul cost(j.10. Pentru evaluarea timpului de lucru. Vom apela sol(1. sol(k+1. --------------------------------------------------------------------------------------------------------------------105 Structuri de date si tehnici de programare . sol(p.-1 cost(i.'). avem nevoie de întreaga matrice. vom calcula num rul de compar ri efectuate.1.j) calculat ca mai sus.i) nk write cost(1.n) (se observ c am folosit partea inferior triunghiular a matricii pentru a memora indicii pentru care se realizeaz minimul).

106-------------------------------------------------------------------------------------------------------------Structuri de date si tehnici de programare . Care sunt limitele metodei irului cresc tor de mul imi? 3. Care sunt limitele metodei sort rii topologice? 4. Cum poate fi aplicat metoda program rii dinamice la descompunerea unui dreptunghi în p trate ? R spunsurile la acest test se g sesc la pagina 107 a acestei unit i de înv are. în continuarea enun urilor 2. Care este defini ia unui PD-arbore? 5. Care este defini ia unui graf de dependen e? R spunsurile la test se vor da în spa iul liber din chenar. Metoda program rii dinamice ----------------------------------------------------------------------------------------------------------------------Testul de autoevaluare nr. 1 1.10.

5.6. a vedea cum metoda program rii dinamice poate fi util i pentru calculul paralel. metod s nu fie 3.j). a în elege limitele unei încerc ri de a rezolva problema program rii dinamice prin metoda Divide et Impera. Fie aij = num rul minim de p trate în care poate fi descompus un dreptunghi de laturi i i j. a studia aplicativitatea metodei program rii dinamice în teoria limbajelor formale . Comentarii i r spunsuri la testele de autoevaluare Testul 1. Metoda irului cresc tor de mul imi are dou deficien e majore: . Sortarea topologic aplicat problemei generale . adic neobservabile din z. de exemplu chiar pentru problema sumei a n numere. k j-k k i i-k j Pentru calculul lui aij avem de ales între a face: --------------------------------------------------------------------------------------------------------------------107 Structuri de date si tehnici de programare . Evident aij=aji. 1 Consulta i bibliografia pentru: 1.nu este precizat o ordine de considerare a elementelor. 10. iar valorile asociate sunt aij . 2. 5. Rezultatul c utat este amn. prezint un dezavantaj: sunt calculate i valori ale unor vârfuri "neinteresante". Metoda program rii dinamice ----------------------------------------------------------------------------------------------------------------------- Tema de autoinstruire nr. . Aceste deficien e fac ca aceast performant .10.la fiecare reluare se parcurg toate elementele lui V. 4. de i necesit un timp liniar. Vârfurile grafului sunt (i.

Dup ini ializ rile date de primele 3 dependen e de mai sus.j-k. iar pe fiecare linie mergem de la stânga la dreapta.n calculul lui aij conform celei de a patra dependen e de mai sus if je m then a jin aij 10.j.j) Dependen ele pot fi exprimate astf el: ai.j+ai-k. j=1. De exemplu putem coborâ pe linii.j+ai-k.m a1.1=i.j-k | ke ­j/2½} . ke ­j/2½ .7.. Metoda program rii dinamice ----------------------------------------------------------------------------------------------------------------------- o t ietur pe vertical .m for j=i+1..j) depinde de valorile vârfurilor din stânga sa i de cele aflate deasupra sa.n aii=1. Forma particular a PD-arborelui permite o parcurgere mai u oar decât aplicarea algoritmului general de postordine.j.10. Se observ c graful de dependen e este un PD -arbore.j=j. j i (i. iar F=min{ ak. ke ­i/2½ . costurile sunt: ak.m aij = min{E.. Rezult c valoarea aij a unui vârf (i.«..F}. =1. Lucrare de verificare pentru studen i 108-------------------------------------------------------------------------------------------------------------Structuri de date si tehnici de programare .. unde E=min{aik+ai. costurile sunt: aik+ai... o t ietur pe orizontal . efectu m calculele: for i=2. i=1.. | k e ­i/2½ }.

Se cere s se rezolve problema circuitului hamiltonian folosind metoda program rii dinamice. Se dau dou nume ( iruri de caractere) E i F formate din n. 3. vor fi expediate prin mail tutorelui. Introducere în algoritmi. et al. . G) un graf orientat cu |X| = n vârfuri. Problems on Algorithms (2nd Edition). 2002 [4] Skiena Steven. respectiv m litere. j) lungimea drumului minim de la i la j. 2. Numele transformate . Asupra irului E sunt permise urm toarele opera ii: S ( tergerea unui caracter). modul de introducere a datelor i aspecte deosebite folosite la elaborarea programelor. 10. Tehnici de programare. Fie G = (X. Springer 1998 --------------------------------------------------------------------------------------------------------------------109 Structuri de date si tehnici de programare . Cele mai scurte drumuri într-un graf. j) i se pune în coresponden o lungime (cost) cij.introduce i în program un num r suficient de comentarii pentru buna în elegere a programelor. Se cere s se transforme irul E în irul F folosind un num r minim de opera ii admise . M (modificarea unui caracter). Editura Universit ii Bucure ti.8. Rezolv rile.10. Fiec rui arc (i. Bibliografie [1] Georgescu Horia.înso i i programul de o documenta ie privind problema tratat . Computer Libris Agora. 2000 [3] Parberry Ian. 2005 [2] Cormen T. The Algoritm Design Manual. I (inserarea unui caracter). Metoda program rii dinamice ----------------------------------------------------------------------------------------------------------------------- Scrie i câte un program ce folose te metoda program rii dinamice pentru cele trei probleme de mai jos: 1. Indica ii de redactare: . dar i dificult ile întâmpinate. Gasarch William. H. Problema circuitului hamiltonian . Determina i pentru fiecare pereche ( i.

Problems on Algorithms (2nd Edition). Introducere în algoritmi. [2] K. Sahni. Editura Teora. 2000 [8] Parberry Ian. Data Structures and Algorithms. 2005 [7] Cormen T. and Applications in C ++. Gasarch William. 2000. Vol. Mc Graw Hill. Mc Graw Hill. Computer Libris Agora. Tomescu. Data Structures. Algorithms. H. 2008. Springer 1998 110-------------------------------------------------------------------------------------------------------------Structuri de date si tehnici de programare . Sahni.1984. [4] S. Springer-Verlag.Mehlhorn. Berlin. The Algoritm Design Manual.1998. and Applications in Java . 2002 [9] Skiena Steven. E. Algorithms. et al. [5] I.Editura Tehnica.Bibliografie ----------------------------------------------------------------------------------------------------------------------- BIBLIOGRAFIE [1] D. Data Structures. Editura Universit ii Bucure ti. I. Knuth. Bucuresti. [3] S. retiparit. 2000. Tehnici de programare. [6] Georgescu Horia. Editura Universitatii din Bucuresti. Tratat de programarea calculatoarelor . Data Structures. 1973.

Sign up to vote on this title
UsefulNot useful