This shows you the differences between two versions of the page.
|
sda-aa:laboratoare:10 [2021/02/28 23:31] 127.0.0.1 external edit |
sda-aa:laboratoare:10 [2021/05/23 21:21] (current) cristian.rusu [7. Referințe] |
||
|---|---|---|---|
| Line 1: | Line 1: | ||
| - | ===== Laboratorul 9: Grafuri - Drumuri de cost minim ===== | + | ===== Laboratorul 9: Arbori minimi de acoperire ===== |
| + | ==== 1. Obiectivele laboratorului ==== | ||
| + | |||
| + | * Înțelegerea conceptului de arbore minim de acoperire | ||
| + | * Înțelegerea implementării algoritmilor care determină acest arbore | ||
| + | * Înțelegere aplicațiilor practice în: | ||
| + | * rețele de calculatoare: obținerea unui cost redus la interconectarea mai multor stații (ex: protocolul STP folosit în LAN-uri) | ||
| + | * prelucrarea de imagine: segmentarea cadrelor (ex: folosită în analiza medicală) | ||
| + | * în clustere: determinarea unei topologii de comunicare, în cazul în care topologia nu era una regulată(arbore, inel) | ||
| + | |||
| + | ==== 2. Introducere ==== | ||
| + | |||
| + | === 2.1 Conexitate în grafuri === | ||
| + | |||
| + | **Componentă conexă** | ||
| + | O componentă conexă a unui graf neorientat este un subgraf cu următoarele proprietăţi: | ||
| + | |||
| + | - oricare două noduri din acest subgraf sunt conectate(există un lanţ între ele) | ||
| + | - orice nod din acest subgraf NU este conectat cu niciun nod din afara subgrafului(nodurile din componentă fac muchii numai cu alte noduri din componentă) | ||
| + | |||
| + | <note important>Orice graf neorientat are cel puţin o componentă conexă.</note> | ||
| + | |||
| + | **Graf neorientat conex** | ||
| + | |||
| + | Un graf neorientat este numit conex dacă are o singură componentă conexă. | ||
| + | |||
| + | <note tip>Putem explora toate nodurile dintr-un graf neorientat conex dintr-o singură parcurgere a grafului(DFS sau BFS).</note> | ||
| + | |||
| + | **Graf orientat slab conex** | ||
| + | |||
| + | Fie graful neorientat asociat unui graf orientat obţinut prin înlocuirea tuturor arcelor cu muchii. Atunci un graf orientat este slab conex dacă graful neorientat asociat acestuia este conex. | ||
| + | |||
| + | **Graf orientat tare conex** | ||
| + | |||
| + | Un graf orientat este tare conex dacă există drum între oricare două noduri, atât într-un sens, cât şi în celelalt. | ||
| + | |||
| + | Se pot defini similar componentele slab conexă şi tare conexă. | ||
| + | |||
| + | |||
| + | === 2.2 Arborele văzut ca graf === | ||
| + | |||
| + | Folosind noţiunile de mai sus, putem spune că un arbore este un graf(pentru simplitate, fie neorientat) conex şi cu număr minim de muchii, prin urmare, aciclic. | ||
| + | |||
| + | |||
| + | === 2.3 Arbore vs. pădure de acoperire === | ||
| + | |||
| + | Pentru un graf neorientat, construirea unui arbore de acoperire(nu neapărat de cost minim) presupune construirea unui arbore care să fie graf parţial(să acopere toate nodurile). | ||
| + | |||
| + | Acest lucru este posibil numai dacă graful este conex. În caz contrar, se poate construi câte un arbore de acoperire pentru fiecare componentă conexă a grafului, spunând că se construieşte o pădure de acoperire pentru graf. | ||
| + | |||
| + | === 2.4 Arbore de cost minim === | ||
| + | |||
| + | Dacă fiecare muchie dintr-un arbore are un cost(o pondere), atunci costul arborelui este dat de suma costurilor muchiilor ce formează arborele. | ||
| + | |||
| + | Dacă, pe acelaşi principiu, fiecare muchie dintr-un graf are un cost, atunci alegerea unui arbore minim de acoperire presupune alegerea unui arbore care să acopere toate nodurile şi care să folosească muchiile ce dau suma costurilor minimă. | ||
| + | |||
| + | |||
| + | ==== 3. Algoritmul lui Kruskal ==== | ||
| + | |||
| + | Algoritmul lui Kruskal este un algoritm în teoria grafurilor care găsește arborele parțial de cost minim pentru un graf conex ponderat. | ||
| + | |||
| + | Cu alte cuvinte, găsește submulțimea muchiilor care formează un arbore care include toate vârfurile și care este minimizat din punct de vedere al costului. | ||
| + | |||
| + | Dacă graful nu este conex, atunci algoritmul găsește o pădure parțială de cost minim (un arbore parțial de cost minim pentru fiecare componentă conexă). Algoritmul lui Kruskal este un exemplu de algoritm greedy. | ||
| + | |||
| + | |||
| + | <note tip>Algoritmul funcționează în felul următor: | ||
| + | * creează o pădure F (o mulțime de arbori), unde fiecare vârf din graf este un arbore separat | ||
| + | * creează o mulțime S care conține toate muchiile din graf | ||
| + | * atât timp cât S este nevidă | ||
| + | * elimină o muchie de cost minim din S | ||
| + | * dacă acea muchie conectează doi arbori distincți, atunci adaugă muchia în pădure, combinând cei doi arbori într-unul singur | ||
| + | * altfel, ignoră muchia | ||
| + | </note> | ||
| + | |||
| + | |||
| + | {{:sda-aa:laboratoare:kruskal.gif?600|}} | ||
| + | |||
| + | ==== 4. Exerciții laborator ==== | ||
| + | |||
| + | - Vi s-a asignat rolul de nou coordonator al departamentul de rețelistică al companiei Koka Kola (Pebsi petru cei cărora nu le place Kola). Sediul companiei are arondate N-1 sucursale, iar voi trebuie să asigurați conectivitate între toate locațiile folosind o lungime minimă de fibră optică, lucru care duce implicit la reducerea costurilor totale.<code> | ||
| + | # explicatii format | ||
| + | # n=numar varfuri m=numar muchii | ||
| + | # m randuri, cate unul pentru fiecare muchie: start end cost | ||
| + | 8 13 | ||
| + | 1 2 4 | ||
| + | 1 3 9 | ||
| + | 1 4 1 | ||
| + | 1 6 7 | ||
| + | 2 3 12 | ||
| + | 2 4 4 | ||
| + | 3 8 13 | ||
| + | 4 5 7 | ||
| + | 4 6 8 | ||
| + | 5 6 3 | ||
| + | 5 7 6 | ||
| + | 5 8 5 | ||
| + | 7 8 2 | ||
| + | </code> | ||
| + | - Rulați algoritmul Kruskal pe graful cu trenuri. | ||
| + | |||
| + | ==== 5. Probleme opționale, de interviu ==== | ||
| + | |||
| + | - Se dă un graf care coincide cu un arbore minim de acoperire. Verificaţi dacă, introducând o nouă muchie în graf, costul arborelui minim de acoperire se schimbă şi, dacă da, găsiţi muchia ce va fi scoasă. | ||
| + | - Se dă un graf care coincide cu un arbore minim de acoperire şi un vector(V) cu K noduri din graf. Care este costul minim al muchiilor pe care trebuie să le eliminaţi din graf pentru ca fiecare nod din vectorul V să se afle în altă componentă conexă. (Să nu existe drum între oricare două noduri din vectorul V). | ||
| + | - Se dă un graf care coincide cu un arbore minim de acoperire şi un nod auxiliar care formează doar două muchii. Verificaţi dacă folosirea nodului auxiliar pentru a conecta nodurile duce la un arbore de acoperire cu un cost mai mic. | ||
| + | |||
| + | ==== 6. Referințe ==== | ||
| + | |||
| + | - https://en.wikipedia.org/wiki/Minimum_spanning_tree | ||
| + | - https://en.wikipedia.org/wiki/Kruskal%27s_algorithm | ||
| + | - http://www.bogdanturcanu.ro/spanning-tree-protocol-stp/ | ||
| + | - https://en.wikipedia.org/wiki/Image_segmentation | ||