A keresési algoritmus minimális feszítőfa


A keresési algoritmus minimális feszítőfa

A minimális feszítőfa (MOU) csatlakozik súlyozott gráf egy csatlakoztatott részgráfját meg, amely az összes forrás fák tetején, és néhány bordáját, és a súlyok összege az élek a lehető legkisebb. Ha az eredeti gráf megszakad, az alább leírt eljárást lehet alkalmazni váltakozva minden egyes csatlakoztatott komponens, és ily módon a minimális feszítőfa ezen összetevők.
MOU a gráf megtalálható nyers erővel. Mivel több bordát MOU egy részhalmaza az élek halmaza a forrás, akkor egyszerűen megpróbál minden lehetséges alcsoportok és megtalálni köztük a memorandum. Könnyen belátható, hogy ez egy rendkívül időigényes folyamat. A bordák sokasága N 2 N alcsoportok. Minden ilyen alcsoportok, akkor kell, hogy ellenőrizze, hogy csatlakoztatva van részgráfot készlet, amely az összes csúcsot az eredeti, és nem tartalmaz ciklust, majd kiszámítja a tömeg. A folyamat felgyorsítható után megtalálták az első feszítőfa. Nem részhalmaza élek, a teljes súlya nagyobb, mint a már megtalálta a legjobb feszítőfa, nem tudunk menni, így nincs szükség, hogy ellenőrizze a kapcsolatot, gyűrűs és a lefedettség minden csúcsot. Azonban még ezzel a javított módszer, összetettsége a brute force nagyságrendű O (2 N).

Dijkstra-Prim
Az 1950-es években, és Edgar Dijkstra Note működik, és az eredmények közzététele függetlenül javasoltuk az alábbi algoritmus építésére MOD.
Az általunk használt keresni a memorandum úgynevezett „mohó” algoritmus. Kapzsi jogszabály alkalmazásával minden alkalommal csak egy része az eredeti adatokat, és az a legjobb megoldás alapján ez a rész. A mi esetünkben fogja vizsgálni minden egyes lépésében több bordát, amely lehetővé teszi a kapcsolatot a már megépített része a feszítőfa, és válasszon közülük szélén a legalacsonyabb súlyt. Ezt az eljárást ismételve megkapjuk a feszítőfa a legalacsonyabb súlyt.
Osztjuk a csúcsokat három osztályba: a csúcsokat tartalmazza a már megépített része a fák tetején határos épült része, és nem vette figyelembe a tetején. Kezdjük egy tetszőleges csúcspontot, és tartalmazza azt a feszítőfa. Ennek eredményeként az építési lesz gyökértelen fák, többféle beviteli vertex nem befolyásolja a végeredményt (persze, ha a MOD csak). Minden csúcsot kapcsolódik ehhez, hogy az a felni. Ezután a széleit a keresési ciklus a legkisebb súly összekötő már megépített része a feszítőfa a határon; ez szélén egy új csúcs adunk a fát, és frissíti a határon. Miután minden csomópont a fa ősszel, a munka lesz kész.
Itt látható az algoritmus: 1. ábra alapján az algoritmus által leírt példaként. A folyamat kezdetén döntünk egy tetszőleges csomópont A. Mint már mondottuk, egy másik választás a kezdeti csúcs eredmény ugyanaz lesz, mintha a memorandum egyedülálló. Az eredeti grafikon ábrán látható. 1 (a), és mint már említettük, elkezdjük építeni a felső MOD A. Minden csúcsot közvetlenül kapcsolódik egy alkotnak egy eredeti felni. Látható, hogy a széle a legkisebb súlyú összeköti a csomópontok A és B, tehát, hogy a már megépített része a MOD hozzáadja B csúcs az AB szélét. Ha hozzáadjuk a fa tetejére, B (1. (C) pont), meg kell határoznia, hogy ne adjunk a határ az új csúcsot. Ennek eredményeként, azt találjuk, hogy meg kell tenni a csúcsok az E és G Mivel e két pont között csak a B csúcson van már megépített része a fa, ehhez hozzátesszük, hogy a lista tömítő bordák tartják meg a következő lépést. Itt azt kell ellenőrizni, hogy a szélek vezető egy csúcsból a C, D és F, a legrövidebb között összekötő élek ezek a csomópontok egy fa vagy van még kényelmesebb élek áradó B oszlopban A kezdeti B csúcs nem csatlakozik közvetlenül bármely C vagy F, ezért számukra semmi sem változott. De a szélén BD AD rövid bordák, és ezért ki kell cserélni. Flyweight öt élek megy a RIM, egy él BE, így a fa kell hozzáadni, hogy a felső és az E (ábra. 1 (d)). EG uszonyok súlya kisebb súly BG bordák, így helyettesíti az utóbbit. A négy szélét vezető a felni, a legkisebb súlyú olyan AC, így a következőkkel egészül ki a fát. Hozzáadása az feszítőfának élek és csúcsok C AC (ábra. 1 (d)) nem változtatja meg a listát a szélek.
Aztán válassza ki az AF borda és add meg a fát a felső F. Ezen kívül módosíthatja a hivatkozások listáját az FD-ig kisebb súlyúak, mint a súlya BD bordák és borda FG súly kevesebb súlyt EG bordák. A kapott Fringe (ábra. 1 (e)) FD borda van a legkisebb súlya a megmaradt, és hozzáadunk a következőképpen.
Most már hozzá, hogy a fa csak az egyik egység (1. (G)). Miután ez a folyamat befejeződött, és építettünk MOD gyökerű A csúcsának (ábra. 1 (h)).

Kruskal-algoritmus
Prima Dijkstra algoritmus kezdődik építési MOD specifikus vertex és fokozatosan bővül a fa épített; ezzel szemben a Kruskal algoritmus összpontosít élek.
Ebben az algoritmusban, kezdjük egy üres fa, és add meg a bordák szerint növekvő sorrendben súlyok, amíg nem kap egy sor élek, amely egyesíti az összes csúcsot. Ha a bordák elfogy, mielőtt az összes csúcsot egymással össze vannak kötve, ez azt jelenti, hogy az eredeti szám leválasztották a kapcsolatot az eredmény egy unió MOD összes csatlakoztatott komponensek.
Dolgozunk ugyanazon a grafikonon (lásd. Ábra. 2 (a)), és hogy a leírás az algoritmus Dijkstra -Prima. Kezdjük a széleit a legkisebb súlyú, azaz DF bordák. A kiinduló helyzet ábrán látható. 2 (b).
A következő hozzáadjuk a súlya a borda 2, csúcsokat összekötő A és B (2. ábra (c).), Majd - a súlya egy él három, és van egy helyzetben rizzsel. 2 (g).
Ahhoz, hogy az eredményül kapott gráf egymást követően adjuk bordák súlyokat a 4. és 5. (2. (d) és (e)). Csak maradt független vertex G. Ezt követően meg kell vizsgálni a súlya ig 6.
Két négy szélét súly 6 kell dobni, mert felül fog vezetni ciklus már megépített része a memorandum. CF bordák csatlakozási okozna tartalmazó hurkot csúcsban, és a széleket összekötő BD - egy ciklus, amely csúcsokat A és F A maradék két lehetőség egyaránt alkalmasak, és kiválasztja az egyiket, megkapjuk a MOD ábrával. 2 (g), vagy MOU rizzsel. 2 (h).

Itt van egy általános algoritmus, amely végrehajtja ezt az eljárást (az élek száma a gráfban jelöljük E, és a csúcsok száma - keresztül N): A fő hurok végrehajtani, amíg a változó értéke edgeCount nem esik egybe az élek száma a gráfban, vagy addig, amíg a változó includedCount nem mutatnak hogy tettük elég bordák alkotnak feszítőfa. Megjegyezzük, hogy a fa-struktúra egy gráf n csúcsú kell az N - 1 él.
Belül a hurok, akkor először megtalálni a szülők csúcsok él köt össze egy újabb. Ha ezek a csúcsok tartoznak a különböző partíciókat a gyökerek, hozzátéve élek köztük nem okoz egy ciklus, és két partíció egyesítése egyetlen közös gyökér. Rutinok FindRoot és uniós részletesen a cikk „partíciót a készlet.”
Ez egy összetett algoritmus megegyezik összetettsége miatt a rendezési algoritmus, mivel a műveletek száma ciklusonként, míg lineárisan élek számát. Ezért bonyolítja a keresési algoritmus Kruskal MOD O (E log E).