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.

  • ๐Ÿ“Š Tasojรคrjestys: BFS kรคy jokaisessa solmussa nykyisellรค syvyydellรค ennen siirtymistรค seuraavalle tasolle.
  • ๐Ÿ“ฅ Jonopohjainen: FIFO-jono pitรครค vierailtuja solmuja, joten naapurit kรคsitellรครคn jรคrjestyksessรค.
  • ๐ŸŽฏ Lyhin reitti: Painottamattomissa graafeissa BFS lรถytรครค lyhimmรคn reitin vรคhimmรคllรค iteraatiokerralla.
  • โœ… Ei silmukoita: Vierailtujen solmujen merkitseminen estรครค BFS:n juuttumisen loputtomaan silmukkaan.
  • ๐ŸŒ Sovellukset: BFS tukee verkkoindeksoijia, P2P-verkkoja, navigointia ja verkkolรคhetyksiรค.

Leveyshaku (BFS) -algoritmi esimerkin kanssa

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

ArchiBFS-algoritmin rakenne

  1. Datan eri tasoilla voit merkitรค minkรค tahansa solmun aloitus- tai alkusolmuksi lรคpikulun aloittamiseksi. BFS vierailee solmussa, merkitsee sen vierailluksi ja asettaa sen jonoon.
  2. 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.
  3. 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)

BFS-algoritmin toiminta

Jokainen graafin kรคrki tai solmu tunnetaan. Voit esimerkiksi merkitรค solmun V:ksi.

Vaihe 2)

BFS-algoritmin toiminta

Jos solmua V ei kรคytetรค, lisรครค solmu V BFS-jonoon.

Vaihe 3)

BFS-algoritmin toiminta

Aloita BFS-haku ja merkitse sen valmistuttua piste V vierailluksi.

Vaihe 4)

BFS-algoritmin toiminta

BFS-jono ei vielรคkรครคn ole tyhjรค, joten poista graafin kรคrki V jonosta.

Vaihe 5)

BFS-algoritmin toiminta

Hae graafista kaikki jรคljellรค olevat solmut, jotka ovat solmun V vieressรค.

Vaihe 6)

BFS-algoritmin toiminta

Jokaiselle vierekkรคiselle solmulle, sanotaan V1, jos sitรค ei ole vielรค vierailtu, lisรคtรครคn V1 BFS-jonoon.

Vaihe 7)

BFS-algoritmin toiminta

BFS vierailee V1:ssรค, merkitsee sen vierailluksi ja poistaa sen jonosta.

Esimerkki BFS-algoritmista

Vaihe 1)

Esimerkki BFS-algoritmista

Sinulla on seitsemรคn luvun kuvaaja vรคliltรค 0-6.

Vaihe 2)

Esimerkki BFS-algoritmista

0 tai nolla on merkitty juurisolmuksi.

Vaihe 3)

Esimerkki BFS-algoritmista

0 kรคy, merkitรครคn ja lisรคtรครคn jonotietorakenteeseen.

Vaihe 4)

Esimerkki BFS-algoritmista

Jรคljelle jรครคvรคt 0:n vierekkรคiset ja vierailemattomat solmut vieraillaan, merkitรครคn ja lisรคtรครคn jonoon.

Vaihe 5)

Esimerkki BFS-algoritmista

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.

UKK

Tekoรคlyssรค BFS tutkii pelitiloja, pulmakokoonpanoja ja karttoja lรถytรครคkseen lyhimmรคn ratkaisun, jossa jokaisella siirrolla on sama hinta. Se takaa vรคhiten vaiheita, vaikka se voi kรคyttรครค paljon muistia suurissa graafeissa.

Kyllรค. Tekoรคlyavustajat voivat kirjoittaa BFS:รครค Python, Javatai C++ kรคyttรคen jonoa ja vierailtua joukkoa pelkรคstรค kuvauksesta. Testaa sitรค esimerkkigraafeilla, koska reunatapaukset, kuten irralliset solmut, on helppo jรคttรครค huomiotta.

BFS tutkii graafia taso tasolta jonon avulla ja lรถytรครค lyhimmรคn reitin painottamattomista graafeista. DFS tutkii mahdollisimman syvรคlle jokaista haaraa pitkin kรคyttรคmรคllรค pinoa tai rekursiota ennen takaisintrackuningas.

BFS suoritetaan ajassa O(V + E), jossa V on solmujen lukumรครคrรค ja E on kaarien lukumรครคrรค, koska jokaista solmua ja kaarea tarkastellaan kerran. Sen tilavaativuus on O(V) sekรค jono- ettรค vierailujoukolle.

Tiivistรค tรคmรค viesti seuraavasti: