Breadth First Search (BFS) -algoritmi ja EXAMPLE
โก รlykรคs yhteenveto
Leveyshaku (BFS) on algoritmi, joka kรคy lรคpi graafin taso tasolta ja vierailee kaikissa solmun naapureissa ennen siirtymistรค syvemmรคlle. Se kรคyttรครค FIFO-jonoa ja lรถytรครค lyhimmรคn reitin painottamattomista graafeista ilman รครคrettรถmiรค silmukoita.
Mikรค on BFS-algoritmi (Breadth-First Search)?
Leveyshaku (BFS) on algoritmi, jota kรคytetรครคn datan graafiseen piirtรคmiseen, puun etsimiseen tai rakenteiden lรคpikรคymiseen. BFS:n tรคydellinen muoto on leveyshaku.
Algoritmi vierailee ja merkitsee tehokkaasti kaikki graafin avainsolmut tarkasti leveyssuunnassa. Tรคmรค algoritmi valitsee yhden solmun (alku- tai lรคhdepisteen) kaaviosta ja vierailee sitten kaikissa valitun solmun vieressรค olevissa solmuissa. Muista, ettรค BFS kรคyttรครค nรคitรค solmuja yksitellen.
Kun algoritmi vierailee ja merkitsee aloitussolmun, se siirtyy kohti lรคhimpiรค vierailemattomia solmuja ja analysoi ne. Kun olet kรคynyt, kaikki solmut on merkitty. Nรคmรค iteraatiot jatkuvat, kunnes kaikki kaavion solmut on kรคyty ja merkitty onnistuneesti.
Mikรค on graafin lรคpikulku?
Graafin lรคpikulku on yleisesti kรคytetty menetelmรค graafin kรคrjen sijainnin paikantamiseksi. Se on edistynyt hakualgoritmi, joka voi analysoida kuvaajaa nopeasti ja tarkasti sekรค merkitรค vierailtujen kรคrkien sekvenssin. Tรคmรคn prosessin avulla voit vierailla nopeasti kaavion jokaisessa solmussa ilman, ettรค olet lukittuna รครคrettรถmรครคn silmukkaan.
BFS-algoritmin arkkitehtuuri
- Datan eri tasoilla voit merkitรค minkรค tahansa solmun aloitus- tai alkusolmuksi lรคpikulun aloittamiseksi. BFS vierailee solmussa, merkitsee sen vierailluksi ja asettaa sen jonoon.
- Nyt BFS kรคy lรคhimmissรค ja vierailemattomissa solmuissa ja merkitsee ne. Nรคmรค arvot lisรคtรครคn myรถs jonoon. Jono toimii FIFO malli.
- Samalla tavalla graafin jรคljellรค olevat lรคhimmรคt ja vierailemattomat solmut analysoidaan, merkitรครคn ja lisรคtรครคn jonoon. Nรคmรค kohteet poistetaan jonosta sitรค mukaa, kun ne vastaanotetaan ja tulostetaan tuloksena.
Miksi tarvitsemme BFS-algoritmia?
BFS-algoritmin kรคyttรถรถn datajoukon hakemiseen on useita syitรค. Joitakin tรคrkeimpiรค tekijรถitรค, jotka tekevรคt tรคstรค algoritmista ensisijaisen valintasi, ovat:
- BFS on hyรถdyllinen graafin solmujen analysoinnissa ja lyhimmรคn reitin muodostamisessa niiden lรคpi kulkemiseen.
- BFS voi kulkea kuvaajan lรคpi pienimmรคllรค mรครคrรคllรค iteraatioita.
- BFS-algoritmin arkkitehtuuri on yksinkertainen ja vankka.
- BFS-algoritmin tuloksella on korkea tarkkuustaso muihin algoritmeihin verrattuna.
- BFS-iteraatiot ovat saumattomia, eikรค ole mahdollista, ettรค tรคmรค algoritmi joutuisi รครคrettรถmรคn silmukan ongelmaan.
Kuinka BFS-algoritmi toimii?
Graafin lรคpikulku edellyttรครค, ettรค algoritmi vierailee, tarkastaa ja/tai pรคivittรครค jokaisen yksittรคisen solmun, jossa ei ole kรคynyt puumaisessa rakenteessa. Kaavion lรคpikรคymiset luokitellaan sen jรคrjestyksen mukaan, jossa ne kรคyvรคt kaavion solmuissa.
BFS-algoritmi aloittaa toiminnan graafin ensimmรคisestรค eli aloitussolmusta ja kulkee sen lรคpi perusteellisesti. Kun se kulkee onnistuneesti alkuperรคisen solmun lรคpi, graafin seuraava ei-kuljettu kรคrkipiste kรคydรครคn ja merkitรครคn.
Voidaan siis sanoa, ettรค kaikki nykyisen kรคrjen vieressรค olevat solmut kรคydรครคn lรคpi ja niiden lรคpi ensimmรคisessรค iteraatiossa. BFS-algoritmin toiminnan toteuttamiseen kรคytetรครคn yksinkertaista jonomenetelmรครค, ja se koostuu seuraavista vaiheista:
Vaihe 1)
Jokainen graafin kรคrki tai solmu tunnetaan. Voit esimerkiksi merkitรค solmun V:ksi.
Vaihe 2)
Jos solmua V ei kรคytetรค, lisรครค solmu V BFS-jonoon.
Vaihe 3)
Aloita BFS-haku ja merkitse sen valmistuttua piste V vierailluksi.
Vaihe 4)
BFS-jono ei vielรคkรครคn ole tyhjรค, joten poista graafin kรคrki V jonosta.
Vaihe 5)
Hae graafista kaikki jรคljellรค olevat solmut, jotka ovat solmun V vieressรค.
Vaihe 6)
Jokaiselle vierekkรคiselle solmulle, sanotaan V1, jos sitรค ei ole vielรค vierailtu, lisรคtรครคn V1 BFS-jonoon.
Vaihe 7)
BFS vierailee V1:ssรค, merkitsee sen vierailluksi ja poistaa sen jonosta.
Esimerkki BFS-algoritmista
Vaihe 1)
Sinulla on seitsemรคn luvun kuvaaja vรคliltรค 0-6.
Vaihe 2)
0 tai nolla on merkitty juurisolmuksi.
Vaihe 3)
0 kรคy, merkitรครคn ja lisรคtรครคn jonotietorakenteeseen.
Vaihe 4)
Jรคljelle jรครคvรคt 0:n vierekkรคiset ja vierailemattomat solmut vieraillaan, merkitรครคn ja lisรคtรครคn jonoon.
Vaihe 5)
Ajoiteraatioita toistetaan, kunnes kaikki solmut on kรคyty.
BFS-algoritmin sรครคnnรถt
Tรคssรค on tรคrkeitรค sรครคntรถjรค BFS-algoritmin kรคyttรถรถn:
- Jono (FIFO โ First In First Out) tietorakenne on BFS:n kรคytรถssรค.
- Merkitset minkรค tahansa graafin solmun juureksi ja alat kรคydรค lรคpi dataa siitรค.
- BFS kรคy lรคpi kaikki graafin solmut ja pitรครค pudotuksenping ne valmiiksi tehtyinรค.
- BFS vierailee viereisessรค vierailemattomassa solmussa, merkitsee sen valmiiksi ja lisรครค sen jonoon.
- Se poistaa edellisen kรคrkipisteen jonosta, jos viereistรค kรคrkipistettรค ei lรถydy.
- BFS-algoritmi iteroi, kunnes kaikki graafin kรคrkipisteet on kรคyty lรคpi onnistuneesti ja merkitty suoritetuiksi.
- BFS ei aiheuta silmukoita datan kulkiessa mistรครคn solmusta.
BFS-algoritmin sovellukset
Katsotaanpa joitain tosielรคmรคn sovelluksia, joissa BFS-algoritmin toteutus voi olla erittรคin tehokas.
- Painottamattomat kaaviot: BFS-algoritmi voi helposti luoda lyhimmรคn polun ja pienimmรคn virittรคvรคpuun kรคydรคkseen kaikissa graafin kรคrjissรค mahdollisimman lyhyessรค ajassa ja suurella tarkkuudella.
- P2P-verkot: BFS voidaan toteuttaa paikantamaan kaikki lรคhimmรคt tai naapurisolmut vertaisverkossa. Tรคmรค lรถytรครค tarvittavat tiedot nopeammin.
- Verkkoindeksointirobotit: Hakukoneet tai indeksointirobotit voivat helposti rakentaa useita indeksitasoja kรคyttรคmรคllรค BFS:รครค. BFS-toteutus alkaa lรคhteestรค, joka on verkkosivu, ja sitten se vierailee kaikissa linkeissรค kyseisestรค lรคhteestรค.
- Navigointijรคrjestelmรคt: BFS voi auttaa lรถytรคmรครคn kaikki naapuripaikat pรครค- tai lรคhdesijainnista.
- Verkkolรคhetys: BFS-algoritmi ohjaa lรคhetettyรค pakettia etsimรครคn ja saavuttamaan kaikki solmut, joille sillรค on osoite.














