Algoritmi Si Structuri de Date (structura)

10
ALGORITMI SI STRUCTURI DE DATE PROBLEME PROPUSE I. Elemente de teoria analizei algoritmilor I.1. Aspecte generale privind analiza şi complexitatea unui algoritm; I.2. Evaluarea complexităţii. Exemple de analiză a unor algoritmi. Clase de complexitate. I.3. Algoritmi iterativi si algoritmi recursivi. Avantaje si dezavantaje. I.4. Introducere in proiectarea algoritmilor. 1. Complexitatea algoritmului pentru determinarea minimului/maximului separat/simultan dintr-un tablou nevid. 2. Complexitatea algoritmului de cautare liniara a unui element intr-un tablou unidimensional cu n elemente. 3. Complexitatea algoritmului de cautare binara a unui element intr-un tablou unidimensional cu n elemente sortate. 4. Complexitatea algoritmilor de explorare a tablourilor bidimensionale 5. Sa se rezolve urmatoarele relatii de recurenta: a) f(n) = nf(n-1), f(0)=1, n>0. b) f(n) = f(n-1)+1, f(0)=0, n>0. c) f(n) = cf(n-1), c constanta, f(0) = k, n>0. d) f(n) = f(n-1) + f(n-2), f(0)=0, f(1) = 1, n>1. e) f(n)=b n f(n-1), n>0, (b n ) este un sir dat, iar f(0) = k. f) Sa se determine f(n), daca (f(n)) 2 = c (f(n-1)) 2 , unde c este o constanta data, iar f(0) = k. g) f(n) = f(n-1) + 9n 2 , f(0) = 0, n>0. h) f(n) = 7f(n-1) + 9 (5 n ), f(0) = 3, n>0. i) f(n) = 7f(n-1) +9 (7 n ), f(0) = 3, n>0. j) f(n) = 6f(n-1) – 9f(n-2), f(0) = 1, f(1) = 2, n>1. k) f(n) = 2f(n-1) -4f(n-2), f(0)=1, f(1) = 3, n>1. 6. Complexitatea algoritmului pentru simularea unui circuit combinational cu n intrari (Evaluarea unei functii booleene simple pentru toate cele 2 n combinatii posibile). 7. Complexitatea algoritmilor pentru calculul determinantului unei matrice patratica. 8. Complexitatea algoritmilor pentru generarea tuturor permutarilor. 9. Complexitatea algoritmului pentru evaluarea functiei Ackermann. 10. Complexitatea algoritmilor de sortare: selectie, insertie (directa/ prin cautare binara), interclasare, partitionare binara (qsort), heapsort (sortarea folosind structuri heap). II. Metode de sortare: interschimbare, interclasare, insertie, sortare rapida, alte metode Metoda interschimbarii (Bubble sort) [1, pag 11], [3, pag. 64-69]; 11. Scrieti o functie C sau metoda C++/Java care implementeaza metoda de sortare pentru o structura de date tablou alocat static 12. Scrieti o functie C sau metoda C++/Java care implementeaza metoda de sortare pentru o structura de date tablou alocat dinamic (folosind malloc). 13. Implementati metoda de sortare folosind numai structuri de control for.

description

subiecte propuse, teme largi

Transcript of Algoritmi Si Structuri de Date (structura)

Page 1: Algoritmi Si Structuri de Date (structura)

ALGORITMI SI STRUCTURI DE DATE

PROBLEME PROPUSE I. Elemente de teoria analizei algoritmilor I.1. Aspecte generale privind analiza şi complexitatea unui algoritm; I.2. Evaluarea complexităţii. Exemple de analiză a unor algoritmi. Clase de complexitate. I.3. Algoritmi iterativi si algoritmi recursivi. Avantaje si dezavantaje. I.4. Introducere in proiectarea algoritmilor. 1. Complexitatea algoritmului pentru determinarea minimului/maximului separat/simultan dintr-un tablou nevid. 2. Complexitatea algoritmului de cautare liniara a unui element intr-un tablou unidimensional cu n elemente. 3. Complexitatea algoritmului de cautare binara a unui element intr-un tablou unidimensional cu n elemente sortate. 4. Complexitatea algoritmilor de explorare a tablourilor bidimensionale 5. Sa se rezolve urmatoarele relatii de recurenta:

a) f(n) = nf(n-1), f(0)=1, n>0. b) f(n) = f(n-1)+1, f(0)=0, n>0. c) f(n) = cf(n-1), c constanta, f(0) = k, n>0. d) f(n) = f(n-1) + f(n-2), f(0)=0, f(1) = 1, n>1. e) f(n)=bn f(n-1), n>0, (bn) este un sir dat, iar f(0) = k. f) Sa se determine f(n), daca (f(n))2 = c (f(n-1))2, unde c este o constanta data, iar f(0) = k. g) f(n) = f(n-1) + 9n2, f(0) = 0, n>0. h) f(n) = 7f(n-1) + 9 (5n), f(0) = 3, n>0. i) f(n) = 7f(n-1) +9 (7n), f(0) = 3, n>0. j) f(n) = 6f(n-1) – 9f(n-2), f(0) = 1, f(1) = 2, n>1. k) f(n) = 2f(n-1) -4f(n-2), f(0)=1, f(1) = 3, n>1.

6. Complexitatea algoritmului pentru simularea unui circuit combinational cu n intrari (Evaluarea unei functii booleene simple pentru toate cele 2n combinatii posibile). 7. Complexitatea algoritmilor pentru calculul determinantului unei matrice patratica. 8. Complexitatea algoritmilor pentru generarea tuturor permutarilor. 9. Complexitatea algoritmului pentru evaluarea functiei Ackermann. 10. Complexitatea algoritmilor de sortare: selectie, insertie (directa/ prin cautare binara), interclasare, partitionare binara (qsort), heapsort (sortarea folosind structuri heap). II. Metode de sortare: interschimbare, interclasare, insertie, sortare rapida, alte metode

• Metoda interschimbarii (Bubble sort) [1, pag 11], [3, pag. 64-69]; 11. Scrieti o functie C sau metoda C++/Java care implementeaza metoda de sortare pentru o structura de date tablou alocat static 12. Scrieti o functie C sau metoda C++/Java care implementeaza metoda de sortare pentru o structura de date tablou alocat dinamic (folosind malloc). 13. Implementati metoda de sortare folosind numai structuri de control for.

Page 2: Algoritmi Si Structuri de Date (structura)

14. Implementati metoda de sortare folosind numai structuri de control while si do…while. 15. Analizati complexitatea metodei in cazul cel mai defavorabil. 16. Aplicati metoda de sortare asupra unui sir specificat si pe baza functiei C descrise vedeti ce rezultat se obtine la pasul k (k fiind cel putin 2).

• Metoda selectiei (min, max, min-max, heap) [3, pag. 69-74], [1, pag. 97-98, 192-196];

17. Scrieti o functie C sau metoda C++/Java care implementeaza metoda de sortare sel_min pentru o structura de date tablou alocat static 18. Scrieti o functie C sau metoda C++/Java care implementeaza metoda de sortare sel_min pentru o structura de date tablou alocat dinamic (folosind malloc). 19. Implementati metoda de sortare sel_min folosind numai structuri de control for. 20. Implementati metoda de sortare sel_min folosind numai structuri de control while si do…while. 21. Analizati complexitatea metodei sel_min in cazul cel mai defavorabil. 22. Aplicati metoda de sortare sel_min asupra unui sir specificat si pe baza functiei C descrise vedeti ce rezultat se obtine la pasul k (k fiind cel putin 2). 23. Scrieti o functie C sau metoda C++/Java care implementeaza metoda de sortare sel_max pentru o structura de date tablou alocat static 24. Scrieti o functie C sau metoda C++/Java care implementeaza metoda de sortare sel_max pentru o structura de date tablou alocat dinamic (folosind malloc). 25. Implementati metoda de sortare sel_max folosind numai structuri de control for. 26. Implementati metoda de sortare sel_max folosind numai structuri de control while si do…while. 27. Analizati complexitatea metodei sel_max in cazul cel mai defavorabil. 28. Aplicati metoda de sortare sel_max asupra unui sir specificat si pe baza functiei C descrise vedeti ce rezultat se obtine la pasul k (k fiind cel putin 2). 29. Scrieti o functie C sau metoda C++/Java care implementeaza metoda de sortare sel_min_max pentru o structura de date tablou alocat static 30. Scrieti o functie C sau metoda C++/Java care implementeaza metoda de sortare sel_min_max pentru o structura de date tablou alocat dinamic (folosind malloc). 31. Implementati metoda de sortare sel_min_max folosind numai structuri de control for. 32. Implementati metoda de sortare sel_min_max folosind numai structuri de control while si do…while. 33. Analizati complexitatea metodei sel_min_max in cazul cel mai defavorabil. 34. Aplicati metoda de sortare sel_min_max asupra unui sir specificat si pe baza functiei C descrise vedeti ce rezultat se obtine la pasul k (k fiind cel putin 2). 35. Scrieti o functie C sau metoda C++/Java care implementeaza metoda de sortare sel_heap pentru o structura de date tablou alocat static 36. Scrieti o functie C sau metoda C++/Java care implementeaza metoda de sortare sel_heap pentru o structura de date tablou alocat dinamic (folosind malloc). 37. Implementati metoda de sortare sel_heap folosind numai structuri de control for. 38. Implementati metoda de sortare sel_heap folosind numai structuri de control while si do…while. 39. Analizati complexitatea metodei sel_heap in cazul cel mai defavorabil. 40. Aplicati metoda de sortare sel_heap asupra unui sir specificat si pe baza functiei C descrise vedeti ce rezultat se obtine la pasul k (k fiind cel putin 2).

Page 3: Algoritmi Si Structuri de Date (structura)

• Metoda insertiei directe [3, pag. 63, 64], [1, pag. 64-65]. O varianta mai rapida

a metodei foloseste cautarea binara [1, pag. 98] pentru a stabili locul insertiei. Se obtine algoritmul descris in [1, pag. 136];

41. Scrieti o functie C sau metoda C++/Java care implementeaza metoda de sortare ins_dir pentru o structura de date tablou alocat static 42. Scrieti o functie C sau metoda C++/Java care implementeaza metoda de sortare ins_dir pentru o structura de date tablou alocat dinamic (folosind malloc). 43. Implementati metoda de sortare ins_dir folosind numai structuri de control for. 44. Implementati metoda de sortare ins_dir folosind numai structuri de control while si do…while. 45. Analizati complexitatea metodei ins_dir in cazul cel mai defavorabil. 46. Aplicati metoda de sortare ins_dir asupra unui sir specificat si pe baza functiei C descrise vedeti ce rezultat se obtine la pasul k (k fiind cel putin 2). 47. Scrieti o functie C sau metoda C++/Java care implementeaza metoda de sortare ins_bin pentru o structura de date tablou alocat static 48. Scrieti o functie C sau metoda C++/Java care implementeaza metoda de sortare ins_bin pentru o structura de date tablou alocat dinamic (folosind malloc). 49. Implementati metoda de sortare ins_bin folosind numai structuri de control for. 50. Implementati metoda de sortare ins_bin folosind numai structuri de control while si do…while. 51. Analizati complexitatea metodei ins_bin in cazul cel mai defavorabil. 52. Aplicati metoda de sortare ins_bin asupra unui sir specificat si pe baza functiei C descrise vedeti ce rezultat se obtine la pasul k (k fiind cel putin 2).

• Sortare prin numarare [3, pag. 61-62]; 53. Scrieti o functie C sau metoda C++/Java care implementeaza metoda de sortare sort_num pentru o structura de date tablou alocat static 54. Scrieti o functie C sau metoda C++/Java care implementeaza metoda de sortare sort_num pentru o structura de date tablou alocat dinamic (folosind malloc). 55. Implementati metoda de sortare sort_num folosind numai structuri de control for. 56. Implementati metoda de sortare sort_num folosind numai structuri de control while si do…while. 57. Analizati complexitatea metodei sort_num in cazul cel mai defavorabil. 58. Aplicati metoda de sortare sort_num asupra unui sir specificat si pe baza functiei C descrise vedeti ce rezultat se obtine la pasul k (k fiind cel putin 2).

• Sortare prin interclasare [3, pag. 74-77], [1, pag. 213-214]; 59. Scrieti o functie C sau metoda C++/Java care implementeaza metoda de sortare isort pentru o structura de date tablou alocat static 60. Scrieti o functie C sau metoda C++/Java care implementeaza metoda de sortare isort pentru o structura de date tablou alocat dinamic (folosind malloc). 61. Implementati metoda de sortare isort folosind numai structuri de control for. 62. Implementati metoda de sortare isort folosind numai structuri de control while si do…while. 63. Analizati complexitatea metodei isort in cazul cel mai defavorabil.

Page 4: Algoritmi Si Structuri de Date (structura)

64. Aplicati metoda de sortare isort asupra unui sir specificat si pe baza functiei C descrise vedeti ce rezultat se obtine la pasul k (k fiind cel putin 2).

• Sortare prin partitionare (numita si sortare rapida… qsort) [1, pag. 214-215], [3, pag. 65-69].

65. Scrieti o functie C sau metoda C++/Java care implementeaza metoda de sortare qsort pentru o structura de date tablou alocat static 66. Scrieti o functie C sau metoda C++/Java care implementeaza metoda de sortare qsort pentru o structura de date tablou alocat dinamic (folosind malloc). 67. Implementati metoda de sortare qsort folosind numai structuri de control for. 68. Implementati metoda de sortare qsort folosind numai structuri de control while si do…while. 69. Analizati complexitatea metodei qsort in cazul cel mai defavorabil, pivotul fiind elementul de la mijloc al secventei de partitionat. 70. Analizati complexitatea metodei qsort in cazul cel mai defavorabil, pivotul fiind intotdeauna primul element al secventei de partitionat. 71. Analizati complexitatea metodei qsort in cazul cel mai defavorabil. 72. Aplicati metoda de sortare ins_dir asupra unui sir specificat si pe baza functiei C descrise vedeti ce rezultat se obtine la pasul k (k fiind cel putin 2). III. Structuri de date fundamentale - Tablouri. a) Tablouri alocate static 73. [Transpusa unei matrice-1] Fie A un tablou patratic, alocat static, care contine elementele unei matrice cu n randuri si n coloane (acestea fiind de tip float). Sa se construiasca tabloul B care contine elementele transpusei matricei stocate in A. 73. [Transpusa unei matrice-2] Fie A un tablou patratic, alocat static, care contine elementele unei matrice cu n randuri si n coloane (acestea fiind de tip float). Sa se modifice tabloul A pentru a contine elementele transpusei matricei A, fara a folosi un tablou suplimentar. 74. [Explorare pe linii] Fie A un tablou patratic, alocat static, care contine elementele unei matrice cu n randuri si n coloane (acestea fiind de tip float). Sa se parcurga elementele tabloului, linie cu linie, si sa se calculeze, pentru fiecare linie suma elementelor. Sa se memoreze elementele tabloului A, in ordinea vizitarii, in tabloul unidimensional B. 75. [Explorare pe coloane] Fie A un tablou patratic, alocat static, care contine elementele unei matrice cu n randuri si n coloane (acestea fiind de tip float). Sa se parcurga elementele tabloului, coloana cu coloana, si sa se calculeze, pentru fiecare coloana, suma elementelor. Sa se memoreze elementele tabloului A, in ordinea vizitarii, in tabloul unidimensional B. 76. [Explorare Dia] Fie A un tablou patratic, alocat static, care contine elementele unei matrice cu n randuri si n coloane (acestea fiind de tip float). Sa se calculeze suma elementelor de pe diagonala tabloului. Sa se memoreze elementele de pe diagonala tabloului A in tabloul unidimensional B. 77. [Explorare TriD] 76. Fie A un tablou patratic, alocat static, care contine elementele unei matrice cu n randuri si n coloane (acestea fiind de tip float). Sa se calculeze suma elementelor din regiunea TriD. Sa se memoreze elementele din

Page 5: Algoritmi Si Structuri de Date (structura)

regiunea TriD a tabloului A (intai elementele situate deasupra diagonalei principale, apoi elementele de pe diagonala principala, iar in final cele situate sub diagonala principala) in tabloul unidimensional B. 78. [Explorare Banda(r,s)] Fie A un tablou patratic, alocat static, care contine elementele unei matrice cu n randuri si n coloane (acestea fiind de tip float). Sa se calculeze suma elementelor din regiunea Banda(r, s), pentru r si s specificate. Sa se memoreze elementele din regiunea Banda(r, s) a tabloului A (incepand din partea superioara) in tabloul unidimensional B. 79. [Explorare Inf3] Fie A un tablou patratic, alocat static, care contine elementele unei matrice cu n randuri si n coloane (acestea fiind de tip float). Sa se calculeze suma elementelor din regiunea Inf3. Sa se memoreze elementele din regiunea Inf3 a tabloului A (incepand din partea superioara) in tabloul unidimensional B. 80. [Explorare Sup3] Fie A un tablou patratic, alocat static, care contine elementele unei matrice cu n randuri si n coloane (acestea fiind de tip float). Sa se calculeze suma elementelor din regiunea Sup3. Sa se memoreze elementele din regiunea Sup3 a tabloului A (incepand din partea superioara) in tabloul unidimensional B. b) Tablouri alocate dinamic 81. [Transpusa unei matrice-3] Fie A un tablou patratic, alocat dinamic, care contine elementele unei matrice cu n randuri si n coloane (acestea fiind de tip float). Sa se construiasca tabloul B care contine elementele transpusei matricei stocate in A. 82. [Transpusa unei matrice-4] Fie A un tablou patratic, alocat dinamic, care contine elementele unei matrice cu n randuri si n coloane (acestea fiind de tip float). Sa se modifice tabloul A pentru a contine elementele transpusei matricei A, fara a folosi un tablou suplimentar. 83. [Explorare pe linii] Fie A un tablou patratic, alocat dinamic, care contine elementele unei matrice cu n randuri si n coloane (acestea fiind de tip float). Sa se parcurga elementele tabloului, linie cu linie, si sa se calculeze, pentru fiecare linie suma elementelor. Sa se memoreze elementele tabloului A, in ordinea vizitarii, in tabloul unidimensional B, alocat dinamic. 84. [Explorare pe coloane] Fie A un tablou patratic, alocat dinamic, care contine elementele unei matrice cu n randuri si n coloane (acestea fiind de tip float). Sa se parcurga elementele tabloului, coloana cu coloana, si sa se calculeze, pentru fiecare coloana, suma elementelor. Sa se memoreze elementele tabloului A, in ordinea vizitarii, in tabloul unidimensional B, alocat dinamic. 85. [Explorare Dia] Fie A un tablou patratic, alocat dinamic, care contine elementele unei matrice cu n randuri si n coloane (acestea fiind de tip float). Sa se calculeze suma elementelor de pe diagonala tabloului. Sa se memoreze elementele de pe diagonala tabloului A in tabloul unidimensional B, alocat dinamic. 86. [Explorare TriD] 76. Fie A un tablou patratic, alocat dinamic, care contine elementele unei matrice cu n randuri si n coloane (acestea fiind de tip float). Sa se calculeze suma elementelor din regiunea TriD. Sa se memoreze elementele din regiunea TriD a tabloului A (intai elementele situate deasupra diagonalei principale, apoi elementele de pe diagonala principala, iar in final cele situate sub diagonala principala) in tabloul unidimensional B, alocat dinamic. 87. [Explorare Banda(r,s)] Fie A un tablou patratic, alocat dinamic, care contine elementele unei matrice cu n randuri si n coloane (acestea fiind de tip float). Sa se calculeze suma elementelor din regiunea Banda(r, s), pentru r si s specificate. Sa se

Page 6: Algoritmi Si Structuri de Date (structura)

memoreze elementele din regiunea Banda(r, s) a tabloului A (incepand din partea superioara) in tabloul unidimensional B, alocat dinamic. 88. [Explorare Inf3] Fie A un tablou patratic, alocat dinamic, care contine elementele unei matrice cu n randuri si n coloane (acestea fiind de tip float). Sa se calculeze suma elementelor din regiunea Inf3. Sa se memoreze elementele din regiunea Inf3 a tabloului A (incepand din partea superioara) in tabloul unidimensional B, alocat dinamic. 89. [Explorare Sup3] Fie A un tablou patratic, alocat dinamic, care contine elementele unei matrice cu n randuri si n coloane (acestea fiind de tip float). Sa se calculeze suma elementelor din regiunea Sup3. Sa se memoreze elementele din regiunea Sup3 a tabloului A (incepand din partea superioara) in tabloul unidimensional B, alocat dinamic. - Liste simple, duble, liniare, circulare, generalizate: operatii, implementari, aplicatii a) Liste simple in alocare statica 90. Scrieti functia C sau metoda C++/Java pentru concatenarea a n liste simple, alocate static. 91. Scrieti functia C sau metoda C++/Java pentru cautarea unui element dupa cheie, intr-un grup de liste simple, alocate static. 92. Scrieti functia C sau metoda C++/Java pentru inserarea unui element dupa cheie (inaintea primului element mai mic/mare decit cel specificat, dupa primul element mai mic/mare decat cel specificat), intr-o lista simpla, alocata static. 93. Scrieti functia C sau metoda C++/Java pentru inserarea unui element dupa pozitie (inaintea unui element, dupa un element, la inceput, la sfarsit), intr-o lista simpla, alocata static. 94. Scrieti functia C sau metoda C++/Java care realizeaza interclasarea a doua liste simple, sortate crescator, alocate static, astfel incat lista rezultat sa ocupe acelasi spatiu. b) Liste simple in alocare dinamica 95. Scrieti functia C sau metoda C++/Java pentru concatenarea a n liste simple, alocate dinamic. 96. Scrieti functia C sau metoda C++/Java pentru cautarea unui element dupa cheie, intr-un grup de liste simple, alocate dinamic. 97. Scrieti functia C sau metoda C++/Java pentru inserarea unui element dupa cheie (inaintea primului element mai mic/mare decit cel specificat, dupa primul element mai mic/mare decat cel specificat), intr-o lista simpla, alocata dinamic. 98. Scrieti functia C sau metoda C++/Java pentru inserarea unui element dupa pozitie (inaintea unui element, dupa un element, la inceput, la sfarsit), intr-o lista simpla, alocata dinamic. 99. Scrieti functia C sau metoda C++/Java care realizeaza interclasarea a doua liste simple sortate crescator, alocate dinamic, astfel incat lista rezultat sa ocupe acelasi spatiu. c) Liste duble 100. Scrieti functia C sau metoda C++/Java pentru concatenarea a n liste duble, alocate static/dinamic.

Page 7: Algoritmi Si Structuri de Date (structura)

101. Scrieti functia C sau metoda C++/Java pentru cautarea unui element dupa cheie, intr-un grup de liste duble, alocate static/dinamic. 102. Scrieti functia C sau metoda C++/Java pentru inserarea unui element dupa cheie (inaintea primului element mai mic/mare decit cel specificat, dupa primul element mai mic/mare decat cel specificat), intr-o lista dubla, alocata static/dinamic. 103. Scrieti functia C sau metoda C++/Java pentru inserarea unui element dupa pozitie (inaintea unui element, dupa un element, la inceput, la sfarsit), intr-o lista dubla, alocata static/dinamic. 104. Scrieti functia C sau metoda C++/Java care realizeaza interclasarea a doua liste duble, sortate crescator, alocate static/dinamic, astfel incat lista rezultat sa ocupe acelasi spatiu. d) Liste circulare 105. Scrieti o functie C sau metoda C++/Java corespunzatoare pentru transformarea unei liste liniare inlantuite intr-o lista circulara. Se vor considera implementari statice/dinamice pentru liste liniare simple/duble. 106. Scrieti o functie C sau metoda C++/Java corespunzatoare care verifica daca lista este sortata. Se vor considera implementari statice/dinamice pentru liste circulare simple/duble, pentru sortare de tip crescator/descrescator. 107. [Problema lui Josephus] In Masada (Galileea) s-a decis ca erau prea multi prizonieri si ei trebuie executati. 1000 prizonieri (numerotati de la 1 la 1000) au fost asezati in cerc, iar celui cu numarul 1 i s-a dat o sabie. El a fost instruit sa omoare cu ea prizonierul situat la stanga, dupa care sa dea sabia urmatorului prizonier viu (din stanga); acesta va trebui sa faca aceleasi operatii. Procedeul se repeta pana ramane un singur prizonier, care va fi eliberat. Din Masada a iesit Josephus. a) Ce pozitie ocupa el in cercul celor 1000 prizonieri ? b) Deoarece ultima miscare genereaza controverse (raman doi prizonieri si unul ii da sabia celuilalt sa il omoare), se decide sa fie lasati liberi ultimii doi prizonieri. Pe ce loc era camaradul lui Josephus, care a scapat din Masada ? Sa se implementeze algoritmul pentru rezolvarea acestei probleme folosind liste circulare simple/duble in alocare statica/dinamica, in cazul in care fiecare nod al listei contine un numar intreg de la 1 la n, n fiind numarul nodurilor initiale. - Stive si cozi : operatii, implementari, aplicatii. 108. Sa se implementeze, folosind o stiva in alocare statica, metoda de evaluare a functiei lui Ackermann [1, pag. 209]. 109. Sa se implementeze, folosind o stiva in alocare statica, metoda de evaluare a functiei Manna-Pnueli [1, pag. 210] 110. Se se implementeze metodele de inserare/stergere intr-o coada alocata static in maniera circulara. 111. Sa se implementeze algoritmului de rezolvare a problemei turnurilor din Hanoi1 indicand evolutia continutului celor trei stive.

1 Se dă un număr de trei turnuri, identificate cu a, b si c. Turnul a contine n discuri de dimensiuni diferite aranjate în ordine crescatoare în raport cu dimensiunea lor.

Page 8: Algoritmi Si Structuri de Date (structura)

- Arbori : clase de arbori (oarecare, binari, de sortare/cautare, AVL, heap, B si

B+), metode de reprezentare, metode de explorare, aplicatii. 112. Sa se scrie o functie C sau o metoda C++/Java pentru parcurgerea in inordine a unui arbore binar in reprezentare statica/dinamica folosind o implementare iterativa/recursiva. 113. Sa se scrie o functie C sau o metoda C++/Java pentru parcurgerea in preordine a unui arbore binar in reprezentare statica/dinamica folosind o implementare iterativa/recursiva. 114. Sa se scrie o functie C sau o metoda C++/Java pentru parcurgerea in postordine a unui arbore binar in reprezentare statica/dinamica folosind o implementare iterativa/recursiva. 115. Sa se scrie o functie C sau o metoda C++/Java pentru a determina inaltimea unui arbore binar. 116. Sa se scrie o functie C sau o metoda C++/Java pentru a determina frunzele (nodurile terminale ale) unui arbore binar. 117. Se considera un arbore oarecare in reprezentare dinamica folosind legaturile FIU, FRATE, PARINTE. Sa se scrie o functie C sau o metoda C++/Java pentru a traversa arborele in adancime cu vizitarea intai a radacinii si apoi a descendentilor (A-preordine). 118. Se considera un arbore oarecare in reprezentare dinamica folosind legaturile FIU, FRATE, PARINTE. Sa se scrie o functie C sau o metoda C++/Java pentru a traversa arborele in adancime cu vizitarea intai a descendentilor si apoi a radacinii (A-postordine). 119. Se considera un arbore oarecare in reprezentare dinamica folosind legaturile FIU, FRATE, PARINTE. Sa se scrie o functie C sau o metoda C++/Java pentru a traversa arborele in latime (pe niveluri – breath first). 120. Sa se scrie o functie C sau o metoda C++/Java care insereaza un nou nod intr-un arbore binar de sortare. 121. Sa se scrie o functie C sau o metoda C++/Java care sterge un nod intr-un arbore binar de sortare, cu pastrarea proprietatii arborelui. 122. Construiti un arbore de decizie pentru problema cautarii binare in cazul unui n dat.

Problema consta în a transfera discurile de pe a pe c pastrând ordinea de asezare a discurilor. Discurile se pot transfera de pe un turn pe altul dupa urmatoarele reguli:

1. Transferul consta din mai multe mutari de discuri. La o mutare se ia un singur disc de pe un turn si se muta pe altul.

2. Nu poate fi plasat un disc de dimensiune mare pe unul de dimensiune mai mica.

3. Pentru transferarea discurilor de pe un turn pe altul se poate folosi cel de-al treilea turn pentru manevra.

http://www.ginfo.ro/8_3/hanoi.shtml

Page 9: Algoritmi Si Structuri de Date (structura)

123. Sa se scrie o functie C sau o metoda C++/Java care insereaza un nou nod intr-un arbore echilibrat2 (AVL). 124. Sa se scrie o functie C sau o metoda C++/Java care sterge un nod intr-un arbore echilibrat (AVL), cu pastrarea proprietatii arborelui. 125. Sa se scrie o functie C sau o metoda C++/Java care insereaza unei chei noi intr-un arbore heap cu pastrarea proprietatii arborelui. 126. Sa se scrie o functie C sau o metoda C++/Java care sterge o cheie dintr-un arbore heap cu pastrarea proprietatii arborelui. 127. Pentru un sir de chei se cere sa se verifice daca este un heap (ansamblu). 128. Pentru o expresie aritmetica se cere forma poloneza prefix (parcurgerea arborelui binar asociat in preordine) 129. Pentru o expresie aritmetica se cere forma poloneza inversa (parcurgerea arborelui binar asociat in postordine) 130. Pentru un text cu n caractere se cere sa se construiasca arborele Huffman si codul sirului (algoritmul de compresie Huffman). IV. Algoritmi de cautare : liniara, binara, arborescenta, functii hash, cautare in siruri 131. Sa se scrie o functie sau metoda C++/Java pentru cautarea unei chei intr-un arbore oarecare specificat prin legaturi FIU, FRATE, PARINTE. 132. Sa se scrie o functie sau metoda C++/Java pentru cautarea unei chei intr-un arbore binar de sortare. 133. Sa se scrie o functie sau metoda C++/Java pentru cautarea unei chei intr-un arbore echilibrat (AVL). 134. Sa se scrie o functie sau o metoda C++/Java pentru inserare unei chei intr-o tabela de dispersie. 135. Sa se scrie o functie sau o metoda C++/Java pentru stergerea unei chei dintr-o tabela de dispersie. 136. Pentru o anumita functie se cere verificarea proprietatilor acesteia pentru a vedea daca poate fi folosita ca functie de dispersie (hash). a) Functii hash simple: Cormen (h(k) = k mod m), Knuth (h(k) = k(k+3) mod m) b) Functii de dispersie pentru siruri 137. Sa se scrie o functie sau metoda C++/Java pentru implementarea algoritmului Knuth-Morris-Pratt. V. Clase speciale de algoritmi: probabilisti, evolutionisti 138. Generarea unui sir de numerelor pseudo-aleatoare pentru a fi utilizat in testarea complexitatii algoritmilor de sortare, pentru a se studia timpul mediu de sortare. 139. Generarea unui sir de numerelor pseudo-aleatoare pentru a fi utilizat in testarea complexitatii algoritmilor de cautare liniara, pentru a se studia timpul mediu de cautare. 140. Generarea unui sir de numerelor pseudo-aleatoare pentru a fi utilizat in testarea complexitatii algoritmului de cautare/sortare bazat pe arbori AVL. 141. Sa se scrie functii sau metode C++/Java pentru implementarea operatiilor de baza cu care lucreaza algoritmii genetici (selectie, incrucisare, mutatie).

2 http://frankeman.sitesfree.com/licenta/tdaarbori1.html

Page 10: Algoritmi Si Structuri de Date (structura)

142. [Jocul vietii] Se consideră o matrice de dimensiune NxM (N linii, M coloane). Matricea are în total NxM celule. În unele din aceste celule se găsesc viruşi, maxim un virus în celulă. O celulă se învecinează cu 8 alte celule. Celulele de pe marginea matricii se învecinează doar cu 5 alte celule, iar celulele din colţurile matricii se învecinează doar cu 3 alte celule. Populaţia de viruşi evoluează în etape, după următoarele reguli:

1. O celulă care la etapa K este goală şi are exact trei viruşi vecini, va da naştere unui virus în etapa K+1. 2. O celulă care la etapa K conţine un virus şi are doi sau trei vecini viruşi, va păstra virusul şi la etapa K+1. 3. În orice altă situaţie o celulă care la etapa K conţine sau nu virus, la etapa K+1 va deveni goală.

Scrieţi un program C care citeşte de la tastatură dimensiunea matricii (N şi M), generează o configuraţie iniţială aleatoare a populaţiei de viruşi şi pe urmă afişează evoluţia populaţiei de viruşi, aşteptând afişarea unei taste după fiecare etapă. Programul îşi va încheia execuţia în momentul când utilizatorul va apăsa tasta 'x'. VI. Structuri de date multidimensionale3

143. Sa se scrie functii C sau metode C++/Java pentru parcurgerea masivelor tridimensionale pe inaltime, lungime, respectiv latime. 144. Sa se stocheze intr-un tablou unidimensional datele stocate intr-un tablou tridimensional respectand ordinea lexicografica a indicilor. 145. Sa se realizeze un program C/C++/Java pentru manipularea imaginilor cu ajutorul arborilor cu 0 sau 4 descendenti (quad tree). 146. Sa se realizeze un program C/C++/Java pentru manipularea structurilor spatiale cu ajutorul arborilor cu 0 sau 8 descendenti (oct tree). Bibliografie

1. G. Albeanu, Algoritmi si limbaje de programare, Editura FRM 2000. 2. S. Barză, Luciana-Maria Morogan, Structuri de date, Ed. FRM., Bucureşti,

2007 3. I. Tomescu, Data Structures, Editura Universitatii din Bucuresti, 1997. 4. A. Carabineanu, Structuri de date, Editura Universitatii din Bucuresti, Editura

MATRIX ROM, Bucuresti, 2006: (disponibila in format electronic la http://ebooks.unibuc.ro/informatica/carabineanu/CARA_STR.pdf )

3 Numai pentru proiecte de laborator