Differences

This shows you the differences between two versions of the page.

Link to this comparison view

pa:curs-optional:sd-si-debugging [2016/03/26 04:27]
cosmin.dragomir [Problema 2]
pa:curs-optional:sd-si-debugging [2022/03/07 16:13] (current)
darius.neatu [Debugging]
Line 1: Line 1:
 ====== Crash course: Debugging și Structuri de Date ====== ====== Crash course: Debugging și Structuri de Date ======
  
 +===== Debugging =====
 +Pe parcursul semestrului,​ vă poate fi util să știți cum se folosește un debugger pentru a găsi probleme într-un mod rapid. Vă recomandăm articolul [[https://​ocw.cs.pub.ro/​courses/​programare/​tutoriale/​debugging | PC@Debugging]] pentru a vă reaminti de cum folosim GDB atât din CLI cât și prin intermediul unui IDE.
 ===== Obiective crash course ===== ===== 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   *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   *Însușirea abilităților de folosire a unor structuri de date din STL, respectiv Java API
 +  *Însușirea unor deprinderi de bază legate de procesul de debugging, incluzând ințelegerea principalelor surse de erori din Java și C++
 +
 +===== Curs structuri de date =====
 +<​HTML>​
 +  <iframe src="​https://​docs.google.com/​file/​d/​1htowLsDHuURZVaSsTzfOTgeYnGezCVppJiWRFw_Lrhk/​preview"​ width="​640"​ height="​480"></​iframe>​
 +</​HTML>​
 +===== Curs debugging =====
 +<​HTML>​
 +  <iframe src="​https://​docs.google.com/​file/​d/​1qfagP_JEoR5mpyIaZ-YWcGrfj7v3zh43VY_22cUMe-w/​preview"​ width="​640"​ height="​480"></​iframe>​
 +</​HTML>​
  
-===== Probleme ​Structuri de Date ======+===== Structuri de Date ======
  
 ==== Problema 1 ==== ==== Problema 1 ====
Line 18: Line 29:
  
 ==== Problema 2 ==== ==== Problema 2 ====
-Asupra unui sir de numere se pot aplica ​tipuri de operatii:+Asupra unui șir de numere se pot aplica ​două tipuri de operații:
    
-**1** Update x: Adauga elementul ​in sir+**1.** Update x: Adaugă numărul ​în șir
  
-**2** Query y: Returneaza ​cel mai mic element ​din sir care este mai mare decat numarul ​y.+**2.** Query y: Returnează ​cel mai mic număr ​din șir care este mai mare decat numărul ​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''​.+Dându-se o serie de operații ​''​Update'' ​și ''​Query''​ asupra unui șir inițial ​vid, să se returneze o listă ​cu răspunsurile ​pentru ​operațiile ​de ''​Query''​. Se garantează că va exista un răspuns ​valid pentru fiecare ​operație ​''​Query''​. 
 + 
 +<note tip> 
 +Exemplu: Pentru seria de operații: ''​Update 2; Update 5; Update 7; Query 1; Query 5; Update 10; Query 3; Update 4; Query 3'',​ rezultatele operațiilor de ''​Query''​ vor fi, în ordine: ''​2,​ 7, 5, 4''​. 
 +</​note>​
 ==== Problema 3 ==== ==== Problema 3 ====
  
Line 33: Line 48:
 </​note>​ </​note>​
  
-  +Soluția constă în crearea unui min-heap (priority queue) de dimensiune N, unde la început vom adăuga perechi formate din primul element din fiecare vector, șnumarul vectorului din care l-am extras. Apoi, atata timp cât mai avem elemente in heap, vom extrage minimul din acestavom adăuga valoarea în vectorul rezultat șvom trece la următorul element din vectorul în care se afla elementul scos. Apoi, vom insera din acel vector următorul element în heap, împreuna cu indicele vectorului din care e selectat.
-===== Exerciții Debugging ===== +
- +
-<note tip> +
-Recomandăm ca pentru un exercițiu să încercațfolosirea debuggeruluiiar pentru celălalt exercițiu să încercațsa faceți debugging folosindu-vă de loguri. +
-</​note>​+
  
 +Complexitate:​ Fie numărul total de elemente din cei N vectori egal cu K. Pentru că în min-heap vom avea maxim N elemente simultan și vom adăuga toate elementele în heap, pe rând, complexitatea este O(KlogN). O abordare mai simplă, în care copiam toți vectorii inițiali într-un alt vector, pe care apoi îl sortăm, ar fi avut complexitatea (KlogK). Totuși, K este mult mai mare decât N, astfel că soluția optimă este cea cu heap-ul.
 + 
 +===== Debugging =====
 ==== Exercițiul 1 ==== ==== Exercițiul 1 ====
  
Line 51: Line 64:
 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''​. 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''​.
 </​note>​ </​note>​
-==== Exercițiul 2 ====+ 
 +===== Extra ===== 
 +<note tip> 
 +Pentru aceste probleme nu există schelet de cod. Vă încurajăm să discutați cu asistenții despre soluția lor. 
 +</​note>​ 
 + 
 +==== Problema 1 ==== 
 +Dându-se un vector de N elemente, se dorește să se afle dacă există duplicate aflate la distanța maxim K. Două elemente se află la distanța maxim K dacă ele se află la pozițiile i și j, iar ''​|i - j| ≤ K''​. 
 + 
 +<note tip> 
 +Exemplu: Pentru vectorul ''​{1,​ 4, 1, 6, 4, 6, 1}''​ și ''​K = 2'',​ avem duplicatele ''​(1,​1) (pe pozițiile 0 și 2) și (6, 6) (la pozițiile 3 și 5)''​. 
 +</​note>​ 
 + 
 +Hint: Complexitate dorită O(N). Extra hint: Gandiți-vă cum puteți extinde problema aflării duplicatelor dintr-un vector. 
 + 
 +==== Problema 2 ==== 
 +Dându-se un vector de N elemente, se dorește să se afle dacă există duplicate fuzzy aflate la distanța maxim K. Două elemente se află la distanța maxim K dacă ele se află la pozițiile i și j, iar ''​|i - j| ≤ K''​. Două elemente A și B sunt duplicate fuzzy dacă |A - B| < 3. 
 + 
 +<note tip> 
 +Exemplu: Pentru vectorul ''​{1,​ 4, 1, 6, 4, 6, 1}''​ și ''​K = 2'',​ avem duplicatele fuzzy ''​(1,​1) (pe pozițiile 0 și 2), (6, 4) (pe pozițiile 3 și 4), (4, 6) (pe pozițiile 3 și 4) și (6, 6) (la pozițiile 3 și 5)''​. 
 +</​note>​ 
 + 
 +Hint: Complexitate dorită O(N). Extra hint: Folosiți ideea de bază din Bucket Sort :). 
 + 
 +===== Feedback ===== 
 +Pentru a îmbunatăți crash course-ul, ne-ar fi de ajutor feedback-ul vostru. Mulțumim! 
 +[[http://​goo.gl/​forms/​Q1a8pkpyJR|Trimite feedback]] 
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