Szélesség első keresése

Grafikon bejárása

A grafikon bejárása azt jelenti, hogy minden csúcsot és élt pontosan egyszer kell meglátogatni egy kútban -definiált sorrend. Bizonyos gráfalgoritmusok használatakor meg kell győződnie arról, hogy a gráf minden csúcsát pontosan egyszer keresi fel. A csúcsok meglátogatásának sorrendje fontos, és függhet a megoldott algoritmustól vagy kérdéstől.

Egy bejárás során fontos, hogy kövesse nyomon, melyik csúcsot kereste fel. A csúcsok követésének legelterjedtebb módja azok megjelölése.

Breadth First Search (BFS)

A grafikonok áthaladásának számos módja van. A BFS a leggyakrabban alkalmazott megközelítés.

A BFS egy bejáró algoritmus, ahol el kell kezdenie a bejárást egy kiválasztott csomópontból (forrás vagy kezdő csomópont), és a grafikont rétegenként át kell haladnia, feltárva ezzel a szomszédos csomópontokat (csomópontokat, amelyek közvetlenül kapcsolódnak a forrás csomópontokhoz). Ezután a következő szintű szomszéd csomópontok felé kell haladnia.

Ahogy a BFS név is sugallja, a grafikont szélesen kell haladnia az alábbiak szerint:

  1. először vízszintesen és látogassa meg az aktuális réteg összes csomópontját
  2. Ugrás a következő rétegre

Vegye figyelembe a következő ábrát.

Az 1. réteg csomópontjai közötti távolság viszonylag kisebb, mint a 2. réteg csomópontjai közötti távolság. Ezért a BFS-ben meg kell haladnia az 1. réteg összes csomópontját, mielőtt áttérne a 2. réteg csomópontjaira.

Gyermekcsomópontok bejárása

A grafikon ciklusokat tartalmazhat, amelyek a grafikon áthaladása közben ismét ugyanahhoz a csomóponthoz vezethetnek. Az ugyanazon csomópont újbóli feldolgozásának elkerülése érdekében használjon egy logikai tömböt, amely a csomópontot a feldolgozás után megjelöli. Miközben meglátogatja a csomópontokat a grafikon rétegében, tárolja azokat úgy, hogy hasonló sorrendben haladjon át a megfelelő gyermek csomópontokon.

A folyamat megkönnyítése érdekében használjon egy várólistát a csomópont tárolásához, és jelölje meg “meglátogatottként”, amíg az összes szomszédja (közvetlenül hozzá kapcsolódó csúcs) meg nem jelenik. A sor a First In First Out (FIFO) várakozási módot követi, ezért a csomópont szomszédait abban a sorrendben keressük fel, ahogyan a csomópontba beillesztették őket, vagyis először azt a csomópontot látogatják meg, amelyet először beszúrtak, és így tovább.

Pszeudokód

Utazási folyamat

A bejárás a forráscsomóponttól indul, és az s-t nyomja a sorban. s “látogatottként” lesz jelölve.

Első iteráció

  • s a sorból kerül ki
  • s azaz az 1. és 2. szomszédjait bejárják
  • Az 1. és a 2., amelyeket korábban nem tettek meg, áthaladnak. Ezek a következők lesznek:
    • a várólistába tolva
    • az 1. és a 2. helyet meglátogatottként megjelölik

Második iteráció

  • 1 kiugrik a sorból
  • 1 azaz 3 és 3 szomszédok bejárják
  • s figyelmen kívül hagyják, mert “meglátogatottként” jelölik
  • 3, amelyet korábban még nem tettek meg, átjárják. Ez:
    • a sorba tolva
    • meglátogatottként megjelölt

harmadik iteráció

  • 2 kiugrik a sorból
  • 2, azaz s, 3 és 4 szomszédjait bejárják
  • 3 és s figyelmen kívül hagyják, mert “meglátogatottként” vannak megjelölve
  • A 4-et, amelyet korábban nem tettek meg, bejárják. Ez:
    • a sorba tolva
    • meglátogatottként megjelölt

negyedik iteráció

  • 3 kiugrik a sorból
  • A 3, azaz 1, 2 és 5 szomszédok áthaladnak
  • Az 1 és 2 figyelmen kívül maradnak, mert “meglátogatottként” vannak megjelölve
  • Az 5, amelyet korábban nem tettek meg, bejárják. Ez:
    • a sorba tolva
    • Meglátogatottként megjelölt

Ötödik ismétlés

  • 4 kerül ki a sorból
  • 4-es, azaz 2-es szomszédok áthaladnak
  • A 2-t figyelmen kívül hagyják, mert azt már “meglátogatottként” jelölik

Hatodik iteráció

  • 5 kiugrik a sorból
  • 5, azaz 3 szomszédja áthalad
  • 3 figyelmen kívül hagyja, mert már “meglátogatottként” megjelölt

A sor üres, és kijön a hurokból. Az összes csomópontot bejárta a BFS használatával.

Ha a grafikon összes éle azonos súlyú, akkor a BFS segítségével meg lehet találni a csomópontok közötti minimális távolságot is egy grafikonon.

Példa

Ahogy ebben a diagramban is, kezdje a forrás csomópontját, hogy megtalálja a forrás közötti távolságot csomópont és 1. csomópont. Ha nem követi a BFS algoritmust, akkor a forrás csomópontról a 2. csomópontra, majd az 1. csomópontra léphet. Ez a megközelítés kiszámítja a forrás csomópont és az 1. csomópont közötti távolságot 2-ként, míg a minimum a távolság valójában 1. A minimális távolság helyesen kiszámítható a BFS algoritmus használatával.

Komplexitás

A BFS időbeli összetettsége O (V + E), ahol V a csomópontok száma és E az élek száma.

Alkalmazások

1. Hogyan lehet meghatározni az egyes fák egyes csomópontjainak szintjét?

Amint a BFS-ben tudod, bölcsen haladsz. A BFS segítségével meghatározhatja az egyes csomópontok szintjét is.

Megvalósítás

Ez a kód hasonló a BFS-kódhoz, csak a következő különbséggel:
szint] = szint + 1;

Ebben a kódban az egyes csomópontok meglátogatása közben a csomópont szintjét a szülőcsomópont szintjének növekedésével állítják be. Így határozzák meg az egyes csomópontok szintjét.

2 . 0-1 BFS

Ez a típusú BFS a grafikon két csomópontja közötti legrövidebb távolság megkeresésére szolgál, feltéve, hogy a grafikon éleinek súlya 0 vagy 1. Ha alkalmazza a ebben a cikkben hibás eredményt kap a 2 csomópont közötti optimális távolságról.

Ebben a megközelítésben egy logikai tömböt nem használunk a csomópont megjelölésére, mert az optimális távolság állapotát ellenőrizzük, amikor látogasson el minden csomópontra. A csomópont tárolásához kettős végű sor kerül felhasználásra. 0-1 BFS-ben, ha az él súlya = 0, akkor a csomópont a dequeue elé tolódik. Ha az él súlya = 1, akkor a csomópont a dequeue hátuljára tolódik.

Megvalósítás

A Q kettős végű sor. A távolság egy tömb, ahol a távolság tartalmazza a kezdő csomópont és a v csomópont közötti távolságot. Kezdetben a forrás csomóponttól az egyes csomópontokig meghatározott távolság végtelen.

Értsük meg ezt a kódot a következő ábrával:

A grafikon szomszédsági listája a következő lesz:
Itt az “s” -et 0-nak vagy forráscsomópontnak tekintjük.

0 – > 1 – > 3 – > 2
élek.első = 1, élek.második = 1
élek.első = 3, élek.második = 0
élek.első = 2, élek.second = 1

1 – > 0 – > 4
edge.first = 0, élek.second = 1
élek.first = 4 , edge.second = 0

2 – > 0 – > 3
edge.first = 0 , élek.second = 0
élek.first = 3, élek.second = 0

3 – > 0 – > 2 – > 4
él.első = 0, élek.second = 0
élek.első = 2, élek.second = 0
élek.első = 4, élek.second = 0

4 – > 1 – > 3
élek.első = 1, élek.second = 0
élek.első = 3, edge.second = 0

Ha a BFS algoritmust használja, akkor az eredmény hibás lesz, mert megmutatja az optimális távolság s között és az 1., s és a 2. csomópont mint 1. Ennek oka az, hogy meglátogatja s gyermekeit, és kiszámolja s és gyermekei közötti távolságot, amely 1. A tényleges optimális távolság mindkét esetben 0.

Feldolgozás

A forrás csomóponttól kezdve, azaz 0-tól kezdve 1, 2 és 3 felé mozog. Mivel az él súlya 0 és 1, valamint 0 és 2 között 1, , 1 és 2 a sor hátsó részébe tolódik. Mivel azonban az él súlya 0 és 3 között 0, a 3 a sor elejére tolódik. A távolság ennek megfelelően a távolság tömbben marad.

Ezután a 3 kiugrik a sorból, és ugyanezt a folyamatot alkalmazzák a szomszédaira is, és így tovább.

Közreműködik: Garg prateek

Vélemény, hozzászólás?

Az email címet nem tesszük közzé. A kötelező mezőket * karakterrel jelöltük