logo

Ce este Minimum Spanning Tree (MST)

A arbore de întindere minim (MST) este definit ca a copac spanning care are greutatea minimă dintre toți copacii spanning posibili

A copac spanning este definit ca un subgraf sub formă de arbore al unui graf conectat, nedirecționat, care include toate vârfurile grafului. Sau, pentru a spune în cuvintele lui Layman, este un subset de margini ale graficului care formează un arbore ( aciclic ) unde fiecare nod al graficului este o parte a arborelui.



Arborele de întindere minim are toate proprietățile unui arbore de întindere cu o constrângere suplimentară de a avea greutățile minime posibile între toți arborii de întindere posibili. La fel ca un arbore care se întinde, pot exista și multe MST-uri posibile pentru un grafic.

Arborele de întindere minim (MST)

Proprietățile unui arbore întindere:

Arborele spanning deține principiile de mai jos :



  • Numărul de vârfuri ( ÎN ) în grafic și arborele de întindere este același.
  • Există un număr fix de muchii în arborele care se întinde, care este egal cu unul mai mic decât numărul total de vârfuri ( ȘI = V-1 ).
  • Arborele spanning nu ar trebui să fie deconectat , deoarece ar trebui să existe doar o singură sursă de componentă, nu mai mult de atât.
  • Arborele spanning ar trebui să fie aciclic, care înseamnă că nu ar exista niciun ciclu în copac.
  • Costul total (sau greutatea) arborelui de întindere este definit ca suma greutăților marginilor tuturor marginilor arborelui de întindere.
  • Pot exista mulți arbori de acoperire posibili pentru un grafic.

Arborele de întindere minim:

A arbore de întindere minim (MST) este definit ca a copac spanning care are greutatea minimă dintre toți copacii spanning posibili.

Arborele de întindere minim are toate proprietățile unui arbore de întindere cu o constrângere suplimentară de a avea greutățile minime posibile între toți arborii de întindere posibili. La fel ca un arbore care se întinde, pot exista și multe MST-uri posibile pentru un grafic.

o matrice în java
  • Să ne uităm la MST al exemplului de grafic de mai sus,

Arborele de întindere minim



Algoritmi pentru a găsi arborele de întindere minim:

Există mai mulți algoritmi pentru a găsi arborele de acoperire minim dintr-un grafic dat, unii dintre ei sunt enumerați mai jos:

Algoritmul arborelui de întindere minim al lui Kruskal:

Acesta este unul dintre algoritmii populari pentru găsirea arborelui de acoperire minim dintr-un grafic conectat, nedirecționat. Acesta este un În primul rând, sortează toate marginile graficului după greutatea lor,

  • Apoi începe iterațiile de găsire a arborelui spanning.
  • La fiecare iterație, algoritmul adaugă una câte una următoarea muchie cu cea mai mică greutate, astfel încât muchiile alese până acum să nu formeze un ciclu.
  • Acest algoritm poate fi implementat eficient folosind o structură de date DSU (Disjoint-Set) pentru a ține evidența componentelor conectate ale graficului. Acesta este utilizat într-o varietate de aplicații practice, cum ar fi proiectarea rețelei, clustering și analiza datelor.

    scanner.next java

    Urmăriți articolul de pe Algoritmul arborelui de întindere minimă al lui Kruskal pentru o mai bună înțelegere și implementare a algoritmului.

    Algoritmul arborelui de întindere minim al lui Prim:

    Acesta este, de asemenea, un algoritm lacom. Acest algoritm are următorul flux de lucru:

    • Începe prin selectarea unui vârf arbitrar și apoi adăugarea lui la MST.
    • Apoi, verifică în mod repetat greutatea minimă a muchiei care conectează un vârf al MST la un alt vârf care nu este încă în MST.
    • Acest proces este continuat până când toate nodurile sunt incluse în MST.

    Pentru a selecta în mod eficient marginea minimă de greutate pentru fiecare iterație, acest algoritm folosește priority_queue pentru a stoca vârfurile sortate după greutatea lor minimă în prezent. De asemenea, ține evidența MST-ului simultan folosind o matrice sau o altă structură de date adecvată, având în vedere tipul de date pe care îl stochează.

    Acest algoritm poate fi utilizat în diferite scenarii, cum ar fi segmentarea imaginii pe baza culorii, texturii sau a altor caracteristici. Pentru rutare, ca și în găsirea celei mai scurte căi între două puncte pe care să o urmeze un camion de livrare.

    Urmăriți articolul de pe Algoritmul arborelui de întindere minim al lui Prim pentru o mai bună înțelegere și implementare a acestui algoritm.

    Algoritmul arborelui de acoperire minim al lui Boruvka:

    Acesta este, de asemenea, un algoritm de traversare a graficului utilizat pentru a găsi arborele de acoperire minim al unui grafic conectat, nedirecționat. Acesta este unul dintre cei mai vechi algoritmi. Algoritmul funcționează prin construirea iterativă a arborelui de acoperire minim, începând cu fiecare vârf din grafic ca propriul arbore. În fiecare iterație, algoritmul găsește cea mai ieftină margine care conectează un arbore de un alt arbore și adaugă acea margine la arborele care se întinde minim. Acesta este aproape similar cu algoritmul lui Prim pentru găsirea arborelui de acoperire minim. Algoritmul are următorul flux de lucru:

    • Inițializați o pădure de copaci, cu fiecare vârf din grafic ca propriul arbore.
    • Pentru fiecare copac din pădure:
      • Găsiți cea mai ieftină margine care o leagă de un alt copac. Adăugați aceste margini la arborele care se întinde minim.
      • Actualizați pădurea prin îmbinarea copacilor conectați prin marginile adăugate.
    • Repetați pașii de mai sus până când pădurea conține un singur copac, care este arborele care se întinde minim.

    Algoritmul poate fi implementat folosind o structură de date, cum ar fi o coadă de prioritate, pentru a găsi eficient cea mai ieftină margine între arbori. Algoritmul lui Boruvka este un algoritm simplu și ușor de implementat pentru găsirea arborilor de acoperire minimă, dar este posibil să nu fie la fel de eficient ca alți algoritmi pentru grafice mari cu multe muchii.

    panta nedefinita

    Urmăriți articolul de pe Algoritmul arborelui de întindere minim al lui Boruvka pentru o mai bună înțelegere și implementare a acestui algoritm.

    Pentru a afla mai multe despre proprietățile și caracteristicile Minimum Spanning Tree, faceți clic Aici.

    Aplicații ale arborilor de întindere minimă:

    • Proiectarea rețelei : Arborii de acoperire pot fi utilizați în proiectarea rețelei pentru a găsi numărul minim de conexiuni necesare pentru conectarea tuturor nodurilor. Arborele cu întindere minimă, în special, poate ajuta la minimizarea costului conexiunilor prin selectarea celor mai ieftine margini.
    • Procesarea imaginii : Arborele de acoperire pot fi utilizate în procesarea imaginilor pentru a identifica regiuni de intensitate sau culoare similare, ceea ce poate fi util pentru sarcini de segmentare și clasificare.
    • Biologie : Arborii de întindere și arborii de întindere minime pot fi utilizați în biologie pentru a construi arbori filogenetici care să reprezinte relații evolutive între specii sau gene.
    • Analiza rețelelor sociale : Arborii de întindere și arborii de întindere minime pot fi utilizați în analiza rețelelor sociale pentru a identifica conexiuni și relații importante între indivizi sau grupuri.

    Câteva probleme populare cu interviurile pe MST

    1. Găsiți costul minim pentru conectarea tuturor orașelor Practică

    Câteva întrebări frecvente despre arborii cu întindere minimă:

    1. Pot exista mai mulți arbori cu acoperire minimă pentru un anumit grafic?

    Da, un grafic poate avea mai mulți arbori de întindere minimă dacă există mai multe seturi de muchii cu aceeași greutate totală minimă.

    2. Pot fi folosite algoritmul lui Kruskal și algoritmul lui Prim pentru grafice direcționate?

    Nu, algoritmul lui Kruskal și algoritmul lui Prim sunt concepute numai pentru grafice nedirecționate.

    3. Poate un grafic deconectat să aibă un arbore de întindere minim?

    Nu, un graf deconectat nu poate avea un arbore care se întinde, deoarece nu se întinde pe toate vârfurile. Prin urmare, nici nu poate avea un arbore de întindere minim.

    4. Poate fi găsit un arbore de întindere minim folosind algoritmul lui Dijkstra?

    Nu, algoritmul lui Dijkstra este folosit pentru a găsi calea cea mai scurtă între două vârfuri într-un grafic ponderat. Nu este conceput pentru a găsi un arbore care se întinde minim.

    5. Care este complexitatea în timp a algoritmilor lui Kruskal și Prim?

    Atât algoritmii lui Kruskal, cât și cei ai lui Prim au o complexitate de timp de O(ElogE) , unde E este numărul de muchii din grafic.