Differences

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

Link to this comparison view

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
  
sda-aa/laboratoare/10.1614547919.txt.gz · Last modified: 2021/03/01 15:22 (external edit)
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