This shows you the differences between two versions of the page.
|
sd-ca:laboratoare:lab-07 [2026/05/11 21:24] valentin.carauleanu [Algoritmul Floyd-Warshall] |
sd-ca:laboratoare:lab-07 [2026/05/12 18:39] (current) roberto_giulio.pal [Exerciţii] |
||
|---|---|---|---|
| Line 4: | Line 4: | ||
| * [[alexiaops2014@gmail.com|Oprisan Alexia-Ioana]] | * [[alexiaops2014@gmail.com|Oprisan Alexia-Ioana]] | ||
| * [[-@gmail.com|Macovei Nicolae-Cristian]] | * [[-@gmail.com|Macovei Nicolae-Cristian]] | ||
| + | * [[valentin.carauleanu@stud.fim.upb.ro|Cărăuleanu Valentin Gabriel]] | ||
| ===== Obiective ===== | ===== Obiective ===== | ||
| Line 235: | Line 236: | ||
| </note> | </note> | ||
| - | ===== Algoritmul Floyd-Warshall ===== | ||
| - | Algoritmul **Floyd-Warshall** este un algoritm folosit pentru găsirea **celor mai scurte căi** între toate perechile de noduri dintr-un graf orientat cu costuri pe muchii. Costurile pot fi pozitive sau negative, însă algoritmul nu funcționează corect în prezența **ciclurilor negative**. | ||
| - | |||
| - | Ideea de bază a algoritmului este simplă: pentru fiecare pereche de noduri ''(i, j)'', se verifică dacă există un nod intermediar ''k'' prin care calea de la ''i'' la ''j'' devine mai scurtă. Algoritmul iterează prin toate nodurile posibile ca intermediari, îmbunătățind progresiv matricea de distanțe. | ||
| - | |||
| - | **Complexitate:** | ||
| - | * **Timp**: ''O(|V|³)'' — trei bucle imbricate peste toate nodurile | ||
| - | * **Spațiu**: ''O(|V|²)'' — matricea de distanțe | ||
| - | |||
| - | === Pseudocod === | ||
| - | |||
| - | <code> | ||
| - | dist[V][V] // Matricea de distanțe minime, inițializată cu INFINIT | ||
| - | |||
| - | pentru fiecare nod v | ||
| - | dist[v][v] = 0 | ||
| - | |||
| - | pentru fiecare muchie (u, v) din E | ||
| - | dist[u][v] = cost(u, v) | ||
| - | |||
| - | pentru k între 0 și |V| – 1 // nodul intermediar | ||
| - | pentru i între 0 și |V| – 1 // nodul sursă | ||
| - | pentru j între 0 și |V| – 1 // nodul destinație | ||
| - | dacă dist[i][k] + dist[k][j] < dist[i][j] | ||
| - | dist[i][j] = dist[i][k] + dist[k][j] | ||
| - | </code> | ||
| - | ===== Schelet ===== | ||
| - | <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> | <note> | ||
| - | Trebuie să vă creați cont de [[https://lambdachecker.io | Devmind]], 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-10]]** | + | Trebuie să vă creați cont de [[https://lambdachecker.io | Devmind]], dacă nu v-ați creat deja, pe care îl veți folosi la SD pe toată durata semestrului. |
| </note> | </note> | ||
| Line 281: | Line 251: | ||
| 4) [**1p**] Implementați parcurgerea in lățime (BFS) a unui graf implementat cu listă de adiacență (**BFS** pe Devmind). | 4) [**1p**] Implementați parcurgerea in lățime (BFS) a unui graf implementat cu listă de adiacență (**BFS** pe Devmind). | ||
| - | 5) [**2p - bonus**] Implementați algoritmul Floyd-Warshall pe un graf reprezentat printr-o matrice de adiacență. | ||
| ===== Interviu ===== | ===== Interviu ===== | ||
| - | Această secțiune nu este punctată și încearcă să vă facă o oarecare idee a tipurilor de întrebări pe care le puteți întâlni la un job interview (internship, part-time, full-time, etc.) din materia prezentată în cadrul laboratorului. | + | Această secțiune nu este punctată și încearcă să vă ofere o idee despre tipurile de întrebări pe care le puteți întâlni la un job interview (internship, part-time, full-time, etc.) din materia prezentată în cadrul laboratorului. |
| + | |||
| + | Multe dintre companiile mari folosesc date stocate sub formă de grafuri (Facebook Open Graph, Google Social Graph și Page Rank, etc.), astfel că la angajare vor dori să vadă că știți să lucrați cu grafuri: | ||
| + | * cum se reprezintă grafurile (liste de adiacență vs. matrice de adiacență) | ||
| + | * cum funcționează și cum se implementează parcurgerile (BFS, DFS) | ||
| + | * când este preferată o reprezentare față de cealaltă | ||
| + | * complexitatea timp și spațiu a algoritmilor de parcurgere | ||
| + | |||
| + | === Probleme recomandate === | ||
| - | Cum multe din companiile mari folosesc date stocate sub formă de grafuri (Facebook Open Graph, Google Social Graph şi Page Rank, etc.) la angajare vor dori să vadă ca ştiţi grafuri: | + | **Ușoare:** |
| + | * [[https://leetcode.com/problems/find-if-path-exists-in-graph/description|1971. Find if Path Exists in Graph]] - verificarea existenței unui drum între două noduri (BFS/DFS) | ||
| + | * [[https://leetcode.com/problems/flood-fill/description|733. Flood Fill]] - parcurgere BFS/DFS pe o matrice | ||
| + | * [[https://leetcode.com/problems/number-of-islands/description|200. Number of Islands]] - identificarea componentelor conexe | ||
| - | * cum se reprezintă grafurile | + | **Medii:** |
| - | * cum funcţionează şi cum se implementează parcurgerile (BFS, DFS) | + | * [[https://leetcode.com/problems/clone-graph/description|133. Clone Graph]] - clonarea unui graf folosind BFS/DFS |
| + | * [[https://leetcode.com/problems/rotting-oranges/description|994. Rotting Oranges]] - BFS multi-sursă | ||
| + | * [[https://leetcode.com/problems/course-schedule/description|207. Course Schedule]] - detectarea ciclurilor într-un graf orientat | ||
| + | * [[https://leetcode.com/problems/number-of-provinces/description|547. Number of Provinces]] - componente conexe cu BFS/DFS | ||
| + | * [[https://leetcode.com/problems/shortest-path-in-binary-matrix/description|1091. Shortest Path in Binary Matrix]] - cel mai scurt drum cu BFS | ||
| - | Puteţi căuta mai multe întrebări pe https://leetcode.com/, http://www.careercup.com/ şi http://www.glassdoor.com/ | + | **Grele:** |
| + | * [[https://leetcode.com/problems/word-ladder/description|127. Word Ladder]] - BFS pe graf implicit | ||
| + | * [[https://leetcode.com/problems/find-the-city-with-the-smallest-number-of-neighbors-at-a-threshold-distance/description|1334. Find the City with the Smallest Number of Neighbors at a Threshold Distance]] - Floyd-Warshall aplicat | ||
| ===== Bibliografie ===== | ===== Bibliografie ===== | ||