/ / Kruskal algoritmas - optimalaus skeleto konstrukcija

Kruskalio algoritmas - optimalaus skeleto konstrukcija

XIX a. Pradžioje geometras iš Berlyno Jacob Steinernustatyti, kaip prijungti tris kaimus taip, kad jų ilgis būtų trumpiausias. Vėliau jis apibendrino šią problemą: reikia rasti tašką plokštumoje taip, kad atstumas nuo jo iki n kitų taškų būtų mažiausias. XX a. Darbas šioje temoje tęsėsi. Buvo nuspręsta paimti kelis taškus ir sujungti juos taip, kad atstumas tarp jų būtų trumpiausias. Tai yra ypatingas nagrinėjamos problemos atvejis.

Godus algoritmai

Kruskalio algoritmas reiškia "godingas" algoritmus(jie taip pat vadinami gradientu). Šių esmė - didžiausia pergalė kiekviename žingsnyje. Geriausias užduoties sprendimas yra ne visada "godus" algoritmai. Yra teorija, rodanti, kad taikant konkrečias problemas jie teikia optimalų sprendimą. Tai matroidų teorija. Kruskalio algoritmas susijęs su tokiomis problemomis.

Rasti minimalaus svorio skeleto

Nagrinėjamas algoritmas sukuria optimaliągrafiko skeletas. Problema yra tokia. Dan nesurežisuotos diagramą be lygiagrečių kraštų ir kilpos, ir briaunų yra suteikta svorio funkciją w, suteikiančia numeriu kiekvieną briaunos e - svorio briauna - w (e). Kiekvieno į briaunų pogrupyje svoris yra iš jo kraštų svorių suma. Reikalinga rasti mažo svorio skeletas.

Aprašymas

Kruskalio algoritmas veikia taip. Pirma, visi pradinio grafiko kraštai yra išdėstyti pagal svorio didinimo tvarką. Iš pradžių sistemoje nėra jokių kraštų, bet apima visus grafiko viršūnius. Po to, kai kitą algoritmo pakopą, viena briauna pridedama prie jau sukonstruotos struktūros dalies, kuri yra spintis miškas. Jis nėra pasirinktas savavališkai. Visi grafiko kraštai, kurie nepriklauso skeletui, gali būti vadinami raudoni ir žali. Kiekvieno raudono juostos viršūnės yra vienoje miško sujungimo sudedamojoje dalyje, o žalia - viršūnės yra skirtingose ​​sudedamosiose dalyse. Todėl, jei pridėsite raudoną kraštą, pasirodys ciklas, o jei žalias - tai gausite miško žingsnyje, jungties komponentas bus mažesnis už vieną. Taigi, prie susidariusios konstrukcijos negalima pridėti raudonojo krašto, bet norint gauti mišką gali būti pridėtas bet koks žalias kraštas. Ir pridedamas žalias šonkaulis su minimaliu svoriu. Todėl gaunamas mažiausio svorio skeletas.

Įgyvendinimas

Apibūdinkite dabartinį mišką F. Jis suskaido grafiko viršūnių rinkinį į prijungtus domenus (jų sąveikos formos F, o jie nesikerta poromis). Raudoni kraštai turi abi dalis viršutine dalimi. Dalis (x) - tai funkcija, kuri grąžina tos dalies, kurios x priklauso kiekvienai vertei x, pavadinimą. Unite (x, y) yra procedūra, kuri sukuria naują skaidinį, susidedantį iš dalių x ir y bei visų kitų dalių sąjungos. Leiskite n būti grafiko kraštų skaičiumi. Visos šios sąvokos yra įtrauktos į Kruskal algoritmą. Įgyvendinimas:

  1. Išdėstykite visus grafiko kraštus nuo 1 iki n-ojo didėjimo svorio. (ai, bi yra krašto viršūnės su indeksu i).

  2. jei i = 1 iki n padaryti.

  3. x: dalis (ai).

  4. y: = dalis (bi).

  5. Jei x nėra lygus y, tada Unite (x, y), įtraukite kraštą su numeriu i F

Teisingumas

Tegul T yra originalaus grafiko skeletas, sukonstruotas naudojant Kruskalio algoritmą, o S - savavališkas skeletas. Turime įrodyti, kad w (T) neviršija w (S).

Tegul M - kraštų rinkinys S, P kraštų rinkinysT. Jei S nėra lygus T, tada yra taško T, nepriklausančio S, briaunos eto. Mes prisijungsime prie S. Mes sukursime ciklą, vadiname C. Mes pašaliname iš C visas S priklausančias kraštines. Gauta nauja skeletas, ir jame yra tiek daug viršūnių. Jo svoris neviršija w (S), nes w (et) yra ne didesnis kaip w (es) pagal Kruskalio algoritmą. Ši operacija (S kraštų pakeitimas kraštinėmis T) pakartojamas tol, kol mes gauname T. Kiekvieno iš eilės gauto skeleto masė yra ne didesnė nei ankstesnio svorio dalis, iš kurios matyti, kad w (T) yra ne didesnis kaip w (S).

Be to, algoritmo Kruskalui teisingumas kyla iš Rado-Edmondso teoremo matroiduose.

Kruskalio algoritmo taikymo pavyzdžiai

"Kraskal" algoritmas

Atsižvelgiant į grafiką su viršūnėmis a, b, c, d, e ir kraštais (a,b), (a, e), (b, c), (B, E), (c, d), (c, e), (D, E). Kraštų, svoriai yra parodyta lentelėje ir pav. Iš pradžių, statybos miško F yra visas diagramoje viršūnių ir nėra jokių šonkaulių. Algoritmas Kruskal pirmasis pridėti šonkaulio (A, E), nes svoris buvo mažiausias, o viršūnių A ir E yra skirtingų komponentų medienos Ryšiai F (šonkaulio (A, E) yra žalia), tada šonkaulio (C, D), nes , kad ne mažiau kaip šis kraštas svoris diagramoje kraštų, o ne priklausanti F, ir jis yra žalias, tada dėl tų pačių priežasčių kaupti briauną (a, b). Bet kraštas (B, E) yra perduodama, nors jis ir minimalus svoris likusių kraštų, nes ji yra raudona: viršūnių B ir E priklauso prie tos pačios sudedamosios miško ryšio F, tai yra, jei mes pridėti F kraštą (B, E), yra suformuotas ciklas. Po to pridedama žalią briauną (B, C), yra perduodamas raudoną briauną (C, E), ir tada D, E. Tokiu būdu, kraštai yra iš eilės pridėta (A, E), (c, d), (a, b), (b, c). Iš nihera optimaliai rėmo ir susideda iš pirminio diagramoje. Taigi šiuo atveju ji veikia algoritmą Aš dažytos Tai rodo pavyzdys.

algoritmas Paveiktas pavyzdys

Paveikslėlyje parodyta grafika, kurią sudaro du jungiamieji komponentai. Švelnios linijos rodo optimalaus pagrindo kraštus (žaliuosius), sukonstruotus naudojant Kruskal algoritmą.

algoritmas "Paint" įgyvendinimas

Viršutinis paveikslėlis rodo pradinį grafiką, o apatiniame - minimalaus svorio skeletas, kuris buvo sukurtas pagal nagrinėjamą algoritmą.

Papildomų kraštų seka: (1.6); (0,3), (2,6) arba (2,6), (0,3) - nesvarbu; (3.4); (0,1), (1,6) arba (1,6), (0,1), taip pat yra abejingi (5,6).

Kruskalio algoritmo teisingumas

Kruskalio algoritmas randa praktinį pritaikymą, pavyzdžiui, siekiant optimizuoti komunikacijos blokus, kelius naujose vietovėse kiekvienos šalies vietovėse ir kitais atvejais.

Skaityti daugiau: