This shows you the differences between two versions of the page.
sd-ca:laboratoare:lab-06 [2022/04/06 12:34] maximilian.banu |
sd-ca:laboratoare:lab-06 [2024/04/12 12:13] (current) iarina_ioana.popa [Bibliografie] |
||
---|---|---|---|
Line 2: | Line 2: | ||
Responsabili | Responsabili | ||
- | * [[maximilian.banu@stud.acs.upb.ro|Maximilian Banu]] | + | * [[popaiarina13@gmail.com|Iarina-Ioana Popa]] |
- | * [[becheanudaniela04@gmail.com|Daniela Becheanu]] | + | * [[stef.dascalu@gmail.com|Ștefan-Teodor Dascălu]] |
===== Obiective ===== | ===== Obiective ===== | ||
Line 229: | Line 229: | ||
De remarcat faptul că, pentru ambele tipuri de parcurgeri, complexitatea este cea menționată ''O(|E|+|V|)'' **numai în cazul în care grafurile sunt reținute ca liste de adiacență**. În acest caz, lista corespunzătoare nodului x reține numai vecinii nodului x. | De remarcat faptul că, pentru ambele tipuri de parcurgeri, complexitatea este cea menționată ''O(|E|+|V|)'' **numai în cazul în care grafurile sunt reținute ca liste de adiacență**. În acest caz, lista corespunzătoare nodului x reține numai vecinii nodului x. | ||
În cazul matricei de adiacență, pentru a parcurge vecinii unui nod x, trebuie să parcurgem toate nodurile. Această limitare duce la o complexitate de ''O(|V|^2)'' | În cazul matricei de adiacență, pentru a parcurge vecinii unui nod x, trebuie să parcurgem toate nodurile. Această limitare duce la o complexitate de ''O(|V|^2)'' | ||
- | </note> | + | </note> |
+ | |||
+ | ===== Algoritmul Floyd-Warshall ===== | ||
+ | Algoritmul Floyd-Warshall este un algoritm folosit pentru căutarea celor mai scurte căi într-un graf orientat ce are cost pe fiecare muchie (costul poate fi pozitiv sau negativ, dar nu pot exista cicli negativi). | ||
+ | Algortimul compară toate căile posibile din graf între toate perechile de noduri. | ||
+ | |||
+ | === Pseudocod === | ||
+ | <code> | ||
+ | |||
+ | dist[V][V] // Matricea de distanțe minime, inițializate cu INFINIT | ||
+ | pentru fiecare nod v | ||
+ | dist[v][v] = 0 | ||
+ | |||
+ | pentru fiecare pereche de noduri (u, v) | ||
+ | dist[u][v] = cost(u, v) | ||
+ | |||
+ | pentru k între 0 și |V| – 1 | ||
+ | pentru i între 0 și |V| – 1 | ||
+ | pentru j între 0 și |V| – 1 | ||
+ | dacă (dist[i][k] + dist[k][j]) < dist[i][j] | ||
+ | dist[i][j] = dist[i][k] + dist[k][j] | ||
+ | </code> | ||
===== Schelet ===== | ===== Schelet ===== | ||
- | {{:sd-ca:laboratoare:lab06_graph_1_skel.zip|}} | + | <note important> |
+ | Daca folositi **Github Classroom**, va rugam sa va actualizati scheletul cu cel de mai jos. Cel din repo-ul clonat initial nu este la cea mai recenta versiune. | ||
+ | </note> | ||
+ | {{:sd-ca:laboratoare:lab6_skel_v2.zip|Scheletul de laborator}} | ||
===== Exerciţii ===== | ===== Exerciţii ===== | ||
- | <note important> | + | <note> |
- | Daca folositi Github Classroom, va rugam sa va actualizati scheletul cu cel de mai jos. Cel din repo-ul clonat initial nu este la cea mai recenta versiune. | + | Trebuie să vă creați cont de [[https://lambdachecker.io | Lambda Checker]], dacă nu v-ați creat deja, pe care îl veți folosi la SD pe toată durata semestrului. Aveti grija sa selectati contestul corect la submit, si anume **[[https://beta.lambdachecker.io/contest/72/problems?page=1 |SDA-Lab-6]]** |
</note> | </note> | ||
- | 1) [**2.5p**] Implementați, plecând de la scheletul de cod, graful reprezentat prin matrice de adiacență (**Matrix Graph Implementation** pe Lambda). | + | 1) [**2.5p**] Implementați, plecând de la scheletul de cod, graful reprezentat prin matrice de adiacență (**Graph implementation using list** pe Lambda Checker). |
- | 2) [**2.5p**] Implementați, plecând de la scheletul de cod, graful reprezentat prin liste de adiacență (**List Graph Implementation** pe Lambda). | + | 2) [**2.5p**] Implementați, plecând de la scheletul de cod, graful reprezentat prin liste de adiacență (**Graph implementation using matrix** pe Lambda Checker). |
- | 3) [**1p**] Implementați parcurgerea in adâncime (DFS) a unui graf implementat cu matrice de adiacență (**Matrix Graph DFS** pe Lambda). | + | 3) [**1p**] Implementați parcurgerea in adâncime (DFS) a unui graf implementat cu matrice de adiacență (**DFS** pe Lambda Checker). |
- | 4) [**1p**] Implementați parcurgerea in lățime (BFS) a unui graf implementat cu listă de adiacență (**List Graph BFS** pe Lambda). | + | 4) [**1p**] Implementați parcurgerea in lățime (BFS) a unui graf implementat cu listă de adiacență (**BFS** pe Lambda Checker). |
- | 5) [**2p - bonus**] Implementați algoritmul Floyd-Warshall pe un graf reprezentat printr-o matrice de adiacență. (pentru a primi punctajul, implementați soluția local, apoi urcați codul pe GitHub) | + | 5) [**2p - bonus**] Implementați algoritmul Floyd-Warshall pe un graf reprezentat printr-o matrice de adiacență (**FloydWarshall** pe Lambda Checker). |
===== Interviu ===== | ===== Interviu ===== | ||
Line 264: | Line 289: | ||
- [[http://en.wikipedia.org/wiki/Depth-first_search | DFS ]] | - [[http://en.wikipedia.org/wiki/Depth-first_search | DFS ]] | ||
- [[https://en.wikipedia.org/wiki/Floyd%E2%80%93Warshall_algorithm | Algoritmul Floyd-Warshall ]] | - [[https://en.wikipedia.org/wiki/Floyd%E2%80%93Warshall_algorithm | Algoritmul Floyd-Warshall ]] | ||
- | - [[https://ro.wikipedia.org/wiki/Algoritmul_lui_Kruskal | Algoritmul lui Kruskal ]] |