A minimální kostra (MST) je definován jako a kostra který má minimální váhu ze všech možných skeletů
A kostra je definován jako stromový podgraf spojeného, neorientovaného grafu, který zahrnuje všechny vrcholy grafu. Nebo, laicky řečeno, je to podmnožina hran grafu, která tvoří strom ( acyklický ), kde každý uzel grafu je součástí stromu.
Minimální kostra má všechny vlastnosti kostry s přidanou podmínkou, že má minimální možné váhy mezi všemi možnými kostrami. Podobně jako kostra může být pro graf také mnoho možných MST.

Vlastnosti kostry:
Kostra drží níže uvedené zásady :
- Počet vrcholů ( V ) v grafu a kostra je stejná.
- V kostrě je pevný počet hran, který je o jednu menší než celkový počet vrcholů ( A = V-1 ).
- Kostra by neměla být odpojeno , protože v by měl být pouze jeden zdroj komponenty, ne více než to.
- Kostra by měla být acyklický, který znamená, že ve stromu nebude žádný cyklus.
- Celková cena (neboli hmotnost) kostry je definována jako součet vah hran všech hran kostry.
- Pro graf může existovat mnoho možných kostry.
Minimální kostra:
A minimální kostra (MST) je definován jako a kostra který má minimální váhu ze všech možných skeletů.
řetězec porovnat java
Minimální kostra má všechny vlastnosti kostry s přidanou podmínkou, že má minimální možné váhy mezi všemi možnými kostrami. Podobně jako kostra může být pro graf také mnoho možných MST.
- Podívejme se na MST výše uvedeného příkladu grafu,

Minimální kostra
Algoritmy k nalezení minimálního spanningového stromu:
Existuje několik algoritmů, jak najít minimální kostru z daného grafu, některé z nich jsou uvedeny níže:
Kruskalův algoritmus minimálního spanningového stromu:
Toto je jeden z populárních algoritmů pro nalezení minimální kostry ze spojeného, neorientovaného grafu. Toto je a Nejprve seřadí všechny hrany grafu podle jejich vah,
Tento algoritmus lze efektivně implementovat pomocí datové struktury DSU (Disjoint-Set) pro sledování připojených složek grafu. To se používá v různých praktických aplikacích, jako je návrh sítě, shlukování a analýza dat.
Sledujte článek na Kruskalův minimální algoritmus Spanning Tree pro lepší pochopení a implementaci algoritmu.
Primův minimální algoritmus Spanning Tree:
Toto je také chamtivý algoritmus. Tento algoritmus má následující pracovní postup:
- Začíná výběrem libovolného vrcholu a jeho přidáním do MST.
- Poté opakovaně kontroluje minimální váhu hrany, která spojuje jeden vrchol MST s druhým vrcholem, který ještě není v MST.
- Tento proces pokračuje, dokud nejsou všechny vrcholy zahrnuty do MST.
Pro efektivní výběr minimální váhy hrany pro každou iteraci používá tento algoritmus prioritu_queue k uložení vrcholů seřazených podle jejich aktuální minimální váhy hrany. Současně také sleduje MST pomocí pole nebo jiné datové struktury vhodné s ohledem na datový typ, který ukládá.
Tento algoritmus lze použít v různých scénářích, jako je segmentace obrazu na základě barvy, textury nebo jiných funkcí. Pro Routing, jako při hledání nejkratší cesty mezi dvěma body, kterou má dodávkový vůz sledovat.
Sledujte článek na Primův minimální algoritmus Spanning Tree pro lepší pochopení a implementaci tohoto algoritmu.
Borůvkův algoritmus minimálního spanningového stromu:
Toto je také algoritmus procházení grafu používaný k nalezení minimální kostry spojeného, neorientovaného grafu. Toto je jeden z nejstarších algoritmů. Algoritmus funguje tak, že iterativně vytváří minimální kostru, počínaje každým vrcholem v grafu jako vlastním stromem. V každé iteraci algoritmus najde nejlevnější hranu, která spojuje strom s dalším stromem, a přidá tuto hranu k minimálnímu spanning tree. To je téměř podobné Primovu algoritmu pro nalezení minimální kostry. Algoritmus má následující pracovní postup:
- Inicializujte les stromů, přičemž každý vrchol v grafu má svůj vlastní strom.
- Pro každý strom v lese:
- Najděte nejlevnější hranu, která jej spojuje s jiným stromem. Přidejte tyto hrany do minimální kostry.
- Aktualizujte les sloučením stromů spojených přidanými okraji.
- Opakujte výše uvedené kroky, dokud doménová struktura nebude obsahovat pouze jeden strom, což je minimální kostra.
Algoritmus lze implementovat pomocí datové struktury, jako je prioritní fronta, aby bylo možné efektivně najít nejlevnější okraj mezi stromy. Borůvkův algoritmus je jednoduchý a snadno implementovatelný algoritmus pro hledání minimálních kostry, ale nemusí být tak efektivní jako jiné algoritmy pro velké grafy s mnoha hranami.
Sledujte článek na Borůvkův algoritmus minimálního spanningového stromu pro lepší pochopení a implementaci tohoto algoritmu.
Chcete-li se dozvědět více o vlastnostech a charakteristikách Minimum Spanning Tree, klikněte tady.
Aplikace minimálních kostrových stromů:
- Návrh sítě : Spanning tree lze použít v návrhu sítě k nalezení minimálního počtu připojení potřebných k propojení všech uzlů. Zejména minimální kostry mohou pomoci minimalizovat náklady na spoje výběrem nejlevnějších hran.
- Zpracování obrazu : Spanning tree lze použít při zpracování obrazu k identifikaci oblastí podobné intenzity nebo barvy, což může být užitečné pro úlohy segmentace a klasifikace.
- Biologie : Spanning trees a minimální kostry mohou být použity v biologii ke konstrukci fylogenetických stromů reprezentujících evoluční vztahy mezi druhy nebo geny.
- Analýza sociálních sítí : Kmenové stromy a minimální kostry lze použít v analýze sociálních sítí k identifikaci důležitých spojení a vztahů mezi jednotlivci nebo skupinami.
Některé populární problémy s rozhovory na MST
| 1. | Najděte minimální náklady na připojení všech měst | Praxe |
Některé často kladené otázky o minimálních kostrách:
1. Může pro daný graf existovat více stromů s minimálním rozpětím?
Ano, graf může mít více minimálních překlenovacích stromů, pokud existuje více sad hran se stejnou minimální celkovou hmotností.
2. Lze Kruskalův algoritmus a Primův algoritmus použít pro orientované grafy?
Ne, Kruskalův algoritmus a Primův algoritmus jsou určeny pouze pro neorientované grafy.
3. Může mít odpojený graf minimální kostru?
Ne, odpojený graf nemůže mít kostru, protože nezahrnuje všechny vrcholy. Proto také nemůže mít minimální kostru.
4. Lze pomocí Dijkstrova algoritmu najít minimální kostru?
Ne, Dijkstrův algoritmus se používá k nalezení nejkratší cesty mezi dvěma vrcholy ve váženém grafu. Není navržen tak, aby našel minimální kostru.
5. Jaká je časová složitost Kruskalova a Primova algoritmu?
Kruskalův i Primův algoritmus mají časovou složitost O(ElogE) , kde E je počet hran v grafu.