This is an old revision of the document!


Crash course: Debugging și Structuri de Date

Obiective crash course

  • Însușirea unor deprinderi de bază legate de procesul de debugging, incluzând ințelegerea principalelor surse de erori din Java și C++
  • Reacomodarea cu structuri de date esențiale implementării algoritmilor
  • Însușirea abilităților de folosire a unor structuri de date din STL, respectiv Java API

Probleme Structuri de Date

Problema 1

Să se afle numărul de elemente distincte dintr-un vector.

Soluția optimă pentru această problemă folosește un Set în care sunt introduse elementele din vector unul câte unul. Întrucat set-ul va conține numai elemente distincte, răspunsul va fi numărul de elemente din set la finalul parcurgerii vectorului. Complexitatea temporală a algoritmului este O(N), inserarea și căutarea în Set fiind în O(1) amortizat, iar parcurgerea vectorului fiind în O(N). Complexitatea spațială este tot O(N), pentru că în cazul cel mai defavorabil vectorul va conține numai elemente distincte, iar set-ul va ajunge să conțină toate elementele vectorului. Totuși, pentru vectori mari cu multe duplicate, importanța set-ului în soluție este evidentă.

Exemplu: În vectorul {2 4 5 4 2 1 4}, avem elementele distincte {2 4 5 1}, în numar de 4.

Problema 2

Asupra unui sir de numere se pot aplica 2 tipuri de operatii:

1 Update x: Adauga elementul x in sir.

2 Query y: Returneaza cel mai mic element din sir care este mai mare decat numarul y.

Dandu-se o serie de operatii Update si Query asupra unui sir initial vid, sa se returneze o lista cu raspunsurile pentru operatiile de Query. Se garanteaza ca va exista un raspuns valid pentru fiecare operatie Query.

Problema 3

Dându-se N vectori ce conțin numere întregi sortate crescător, să se afișeze vectorul sortat crescător obținut prin interclasarea vectorilor inițiali. Hint: În vectorul final, elementele din același vector inițial trebuie să își păstreze ordinea relativă.

Exemplu: Pentru vectorii A = {5, 14, 25, 77}, B = {3, 8, 9}, C = {10, 10}, D = {2, 20, 30} , vectorul sortat crescător obținut prin interclasare este {2, 3, 5, 8, 9, 10, 10, 14, 20, 25, 30, 77}.

Exerciții Debugging

Recomandăm ca pentru un exercițiu să încercați folosirea debuggerului, iar pentru celălalt exercițiu să încercați sa faceți debugging folosindu-vă de loguri.

Exercițiul 1

Se dorește generarea tuturor permutărilor numerelor de la 1 la N, în ordine lexicografică, unde N este variabil. Hint: numărul soluțiilor este N!.

Problema este o aplicație clasică a metodei backtracking. În cadrul rezolvării se menține un vector cu soluția parțială, iar când se aleg valorile pentru toate cele N variabile, soluția este afișată. Pentru că în cadrul permutării trebuie sa existe numai numere distincte, se menține un vector pentru a marca numerele alese deja în soluția parțială.

Sursa furnizată ar trebui să rezolve problema, însă are două buguri. Pentru a rezolva exercițiul, găsiți bugurile și corectați-le.

Exemplu: Pentru N = 3, avem următoarele 6 permutări în ordine lexicografică: 1 2 3, 1 3 2, 2 1 3, 2 3 1, 3 1 2, 3 2 1.

Exercițiul 2

pa/curs-optional/sd-si-debugging.1458959220.txt.gz · Last modified: 2016/03/26 04:27 by cosmin.dragomir
CC Attribution-Share Alike 3.0 Unported
www.chimeric.de Valid CSS Driven by DokuWiki do yourself a favour and use a real browser - get firefox!! Recent changes RSS feed Valid XHTML 1.0