Differences

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

Link to this comparison view

pa:skel_graph [2018/04/17 17:41]
darius.neatu
pa:skel_graph [2021/05/04 17:59] (current)
miruna_elena.banu
Line 1: Line 1:
 === skel_graph === === skel_graph ===
-In continuare vom mentiona cateva conventii/​sfaturi/​reguli pe care trebuie ​sa le aveti in vedere pentru restul semestrului. Unele precizari ​sunt specifice laboratoarelor de grafuri, altele sunt generale.+În continuarevom menționa câteva convenții/​sfaturi/​reguli pe care trebuie ​să le aveți în vedere pentru restul semestrului. Unele precizări ​sunt specifice laboratoarelor de grafuri, altele sunt generale.
  
  
 <note warning> <note warning>
-Pentru **TOATE** laboratoarele de grafuri, vom face conventia ca nodurile sunt indexate de la 1 (1, 2, 3, ..., n).+Pentru **TOATE** laboratoarele de grafuri, vom face convenția că nodurile sunt indexate de la 1 (1, 2, 3, ..., n). Justificare:​ În unele probleme vom adăuga un nod fictiv 0 (și înca unul n + 1), de aceea este indicat să avem acest index nefolosit.
  
-n = numar de noduri+$nnumăr ​de noduri
  
-m = numar de muchii+$mnumăr ​de muchii/arce (în funcție de tipul grafului)
  
-adj[node] = lista de adiacenta ​a nodului node+$adj[node]= lista de adiacență ​a nodului node 
 + 
 +$adj\_trans[node]$ = lista de adiacență a nodului node în graful ** transpus** 
 + 
 + 
 +În general, când vorbim de muchii/​arce,​ putem folosi următoarele notații: 
 + 
 +- în grafuri **fără** costuri pe muchii: 
 +  * $(node, neigh)$: muchie/arc de la nodul node la neigh. Notație uzuală în parcurgeri, când vrem să evidențiem relația între noduri: în parcugere se trece din nodul curent (node) în vecin (neigh). 
 +  * $(x, y)$ - muchie/arc de la nodul x la y. Notație uzuală când cele 2 noduri nu au **neapărat** o semnificație anume (exemplu: o dinamică unde x și y sunt 2 noduri oarecare din graf). Notația se poate extinde intuitiv și pentru 3 noduri (adică la triplet) $(x, y, z)$. 
 +  * $(i, j)$ - muchie/arc de la nodul i la j. Notație uzuală când facem foruri pentru initițializări,​ iar x și y sunt rezervate. Se poate extinde intuitiv și la triplet $(i, j, k)$. 
 + 
 +- în grafuri cu costuri pe muchii: 
 +  * putem nota costul cu c / w / c[x][y] / w[x][y] 
 +  * exemple: 
 +    * (node, neigh, c): muchie/arc de la nodul node la neigh de cost c 
 +    * w[x][y]: muchie/arc de la nodul x la w de cost w[x][y]
 </​note>​ </​note>​
  
  
 <​note>​ <​note>​
-Un tool care poate fi folosit pentru a desena grafuri se gaseste ​pe [[https://​csacademy.com/​app/​graph_editor/​|csacademy]].+Un tool care poate fi folosit pentru a desena grafuri se găsește ​pe [[https://​csacademy.com/​app/​graph_editor/​|csacademy]].
 </​note>​ </​note>​
  
  
 <note warning> <note warning>
-Orice tablou (vector/​matrice/​multidimensional etc) se va aloca folosind una din urmatoarele ​variante: +Orice tablou (vector/​matrice/​multidimensional etc) se va aloca folosind una din următoarele ​variante: 
-  * pe ** heap **: se poate folosi ** vector ** / ** ArrayList ** sau ** new **. ** [C++] observatie ​** : adj[NMAX] este alocat tot pe heap, intrucat ​Task-ul este alocat pe heap (vezi in main) +  * pe ** heap **: se poate folosi ** vector ** / ** ArrayList ** sau ** new **. ** [C++] observație ​** : adj[NMAX] este alocat tot pe heap, întrucât ​Task-ul este alocat pe heap (vezi în main) 
-  * **[C++] global static**: ** int v[NMAX]; ** +Recomandăm ​varianta cu **vector/​ArrayList**.
-Recomandam ​varianta cu **vector/​ArrayList**.+
  
  
-Precizari+Precizări
-  * Orice **abatere** de la aceste reguli va fi penalizata ​de checker, lucru asigurat prin testele mari (ultimele), care vor genera SEGFAULT ​daca nu se respecta ​alocarea.  +  * Orice **abatere** de la aceste reguli va fi penalizată ​de checker, lucru asigurat prin testele mari (ultimele), care vor genera SEGFAULT ​dacă nu se respectă ​alocarea.  
-  * La **problemele bonus** care **NU au checker**, asistentul va depuncta manual astfel de probleme grave. ​In pricipiu, este permisa ​orice forma de alocare care suporta ​dimensiunile indicate in enunt.+  * La **problemele bonus** care **NU au checker**, asistentul va depuncta manual astfel de probleme grave. ​În principiu, este permisă ​orice formă ​de alocare care suportă ​dimensiunile indicate in enunț.
  
-Exemplu de **problema grava**:  +Exemplu de **problemă gravă**:  
-[C++]: ** void f() { int v[n]; } ** (alocare de dimensiune variabila pe stiva), poate crapa stiva! (n poate fi mare). **Interzicem** folosirea acestui tip de alocare **la PA**. Pentru acest exemplu, scheletul va genera ​si o eroare de compilare, pentru a va atrage ​atentia ca **NU** ar trebui ​sa folositi ​acest tip de alocare, ​daca n poate sa fie mare! (grafuri mari) +[C++]: ** void f() { int v[n]; } ** (alocare de dimensiune variabila pe stiva), poate crăpa ​stiva! (n poate fi mare). **Interzicem** folosirea acestui tip de alocare **la PA**. Pentru acest exemplu, scheletul va genera ​și o eroare de compilare, pentru a vă atrage ​atenția că **NU** ar trebui ​să folosiți ​acest tip de alocare, ​dacă n poate să fie mare! (grafuri mari) 
  
-ObservatiePrecizarile mentionate ​sunt valabile doar pentru contextul PA, unde facem algoritmi ​eficienti si care dorim sa mearga ​pe dimensiuni ​cat mai mari! Asta nu inseamna ca in alte contexte (ex. multi-threaded) nu poti folosi [[https://​stackoverflow.com/​questions/​16672322/​malloced-array-vs-variable-length-array/​16672438#​16672438 | VLA]] (variable length array on stack). ​+ObservațiePrecizările menționate ​sunt valabile doar pentru contextul PA, unde facem algoritmi ​eficienți și care dorim să meargă ​pe dimensiuni ​cât mai mari! Asta nu înseamnă că în alte contexte (ex. multi-threaded) nu se va putea folosi [[https://​stackoverflow.com/​questions/​16672322/​malloced-array-vs-variable-length-array/​16672438#​16672438 | VLA]] (variable length array on stack). ​
  
-Scopul acestui paragraf este sa va atraga atentia ​asupra ​alocarii corespunzatoare ​a datelor **la PA **, astfel ​incat sa evitati ​erori de **run time** pe care sa nu vi le puteti ​explica.+Scopul acestui paragraf este să va atragă atenția ​asupra ​alocării corespunzătoare ​a datelor **la PA **, astfel ​încât să evitați ​erori de **run time** pe care să nu vi le puteți ​explica.
 </​note>​ </​note>​
  
pa/skel_graph.1523976092.txt.gz · Last modified: 2018/04/17 17:41 by darius.neatu
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