logo

BFS kontra DFS

Mielőtt megvizsgálnánk a BFS és a DFS közötti különbségeket, először külön kell ismernünk a BFS-t és a DFS-t.

Mi az a BFS?

BFS jelentése Breadth First Search . Úgy is ismert, mint szintű rendelés bejárás . A Queue adatstruktúra a Breadth First Search bejáráshoz használatos. Ha egy gráfban a BFS algoritmust használjuk a bejáráshoz, bármely csomópontot tekinthetünk gyökércsomópontnak.

Tekintsük az alábbi grafikont az első szélességi keresés bejárására.

java szűrő folyam
BFS kontra DFS

Tegyük fel, hogy a 0-s csomópontot gyökércsomópontnak tekintjük. Ezért a bejárás a 0 csomóponttól indulna.

BFS kontra DFS

Ha a 0-s csomópontot eltávolítja a sorból, a rendszer kinyomtatja, és a jelzéssel látja el meglátogatott csomópont.

Ha a 0. csomópont eltávolításra kerül a sorból, akkor a 0. csomópont szomszédos csomópontjai bekerülnek egy sorba, az alábbiak szerint:

BFS kontra DFS

Most az 1-es csomópont eltávolításra kerül a sorból; a rendszer kinyomtatja és látogatott csomópontként jelöli meg

Amint az 1. csomópont eltávolításra kerül a sorból, az 1. csomópont összes szomszédos csomópontja hozzáadódik egy sorhoz. Az 1. csomópont szomszédos csomópontjai a 0, 3, 2, 6 és 5. De csak a nem látogatott csomópontokat kell beszúrnunk egy sorba. Mivel a 3., 2., 6. és 5. csomópont nem látogatott; ezért ezek a csomópontok egy sorba kerülnek az alábbiak szerint:

BFS kontra DFS

A következő csomópont a 3. egy sorban. Tehát a 3. csomópont eltávolításra kerül a várólistából, kinyomtatja és meglátogatottként jelöli meg az alábbiak szerint:

BFS kontra DFS

Miután a 3. csomópont eltávolításra kerül a sorból, a 3. csomópont összes szomszédos csomópontja a meglátogatott csomópontok kivételével hozzáadódik egy sorhoz. A 3. csomópont szomszédos csomópontjai a 0, 1, 2 és 4. Mivel a 0, 1 csomópontok már meg vannak látogatva, és a 2. csomópont jelen van egy várólistában; ezért csak a 4-es csomópontot kell beszúrnunk egy sorba.

fájl megnyitása java-ban
BFS kontra DFS

Most a sor következő csomópontja a 2. Tehát 2 törlődik a sorból. A rendszer kinyomtatja és látogatottként jelöli meg az alábbiak szerint:

BFS kontra DFS

Miután a 2. csomópont eltávolításra kerül a sorból, a 2. csomópont összes szomszédos csomópontja a meglátogatott csomópontok kivételével hozzáadódik egy sorhoz. A 2. csomópont szomszédos csomópontjai az 1, 3, 5, 6 és 4. Mivel az 1. és 3. csomópontot már meglátogatták, és a 4, 5, 6 már felkerült a sorba; ezért nem kell csomópontot beszúrnunk a sorba.

A következő elem az 5. Tehát az 5 törlődik a sorból. A rendszer kinyomtatja és látogatottként jelöli meg az alábbiak szerint:

BFS kontra DFS

Amint az 5. csomópont eltávolításra kerül a sorból, az 5. csomópont összes szomszédos csomópontja a meglátogatott csomópontok kivételével hozzáadódik a sorhoz. Az 5. csomópont szomszédos csomópontjai 1 és 2. Mivel mindkét csomópontot már meglátogatták; ezért nincs olyan csúcs, amelyet be kellene illeszteni a sorba.

A következő csomópont a 6. Tehát a 6-ot töröljük a sorból. A rendszer kinyomtatja és látogatottként jelöli meg az alábbiak szerint:

linux parancs a zip-hez
BFS kontra DFS

Miután a 6. csomópont eltávolításra kerül a sorból, a 6. csomópont összes szomszédos csomópontja a meglátogatott csomópontok kivételével hozzáadódik a sorhoz. A 6. csomópont szomszédos csomópontjai 1 és 4. Mivel az 1. csomópontot már meglátogatták, és a 4. csomópont már hozzáadva van a Várólistához; ezért nincs beszúrandó csúcs a sorba.

A sor következő eleme a 4. Tehát a 4 törlődik a sorból. A rendszer kinyomtatja és látogatottként jelöli meg.

Miután a 4-es csomópont eltávolításra kerül a sorból, a 4-es csomópont összes szomszédos csomópontja a meglátogatott csomópontok kivételével hozzáadódik a sorhoz. A 4. csomópont szomszédos csomópontjai a 3, 2 és 6. Mivel az összes szomszédos csomópontot már meglátogatták; tehát nincs beszúrandó csúcs a sorba.

Mi az a DFS?

DFS a Depth First Search rövidítése. A DFS bejárásnál a verem adatszerkezetet használják, amely LIFO (Last In First Out) elven működik. A DFS-ben a bejárás bármely csomópontról elindítható, vagy azt is mondhatjuk, hogy bármelyik csomópont tekinthető gyökércsomópontnak mindaddig, amíg a gyökércsomópontot nem említik a problémában.

BFS esetén a sorból törölt elem, a törölt csomópont szomszédos csomópontjai hozzáadódnak a sorhoz. Ezzel szemben az elosztott fájlrendszerben a veremből eltávolított elemet a törölt csomópontnak csak egy szomszédos csomópontja adja hozzá a veremhez.

Tekintsük az alábbi grafikont a Mélység első keresésének bejárásához.

BFS kontra DFS

Tekintsük a 0-s csomópontot gyökércsomópontnak.

Először beillesztjük a 0 elemet a verembe az alábbiak szerint:

BFS kontra DFS

A 0-s csomópontnak két szomszédos csomópontja van, azaz az 1-es és a 3-as. Most már csak egy szomszédos csomópontot vehetünk át, az 1-et vagy a 3-at. Tegyük fel, hogy az 1. csomópontot tekintjük; ezért az 1 bekerül egy kötegbe, és az alábbiak szerint kerül kinyomtatásra:

térképek java
BFS kontra DFS

Most megnézzük az 1. csomópont szomszédos csúcsait. Az 1. csomópont nem látogatott szomszédos csúcsai a 3, 2, 5 és 6. E négy csúcs bármelyikét tekinthetjük. Tegyük fel, hogy vesszük a 3-as csomópontot, és beillesztjük a verembe az alábbiak szerint:

BFS kontra DFS

Tekintsük a 3. csomópont nem látogatott szomszédos csúcsait. A 3. csomópont nem látogatott szomszédos csúcsai 2 és 4. A csúcsok bármelyikét vehetjük, azaz a 2-t vagy a 4-et. Tegyük fel, hogy a 2-es csúcsot beillesztjük a verembe az alábbiak szerint:

BFS kontra DFS

A 2. csomópont nem látogatott szomszédos csúcsai 5 és 4. A csúcsok közül választhatunk, azaz 5 vagy 4. Tegyük fel, hogy a 4. csúcsot vesszük, és beszúrjuk a verembe az alábbiak szerint:

BFS kontra DFS

Most megvizsgáljuk a 4. csomópont nem látogatott szomszédos csúcsait. A 4. csomópont nem látogatott szomszédos csúcsa a 6. csomópont. Ezért a 6. elemet az alábbiak szerint helyezzük be a verembe:

BFS kontra DFS

Miután beszúrtuk a 6. elemet a verembe, megnézzük a 6. csomópont nem látogatott szomszédos csúcsait. Mivel a 6. csomópontnak nincsenek meglátogatott szomszédos csúcsai, így nem tudunk továbblépni a 6. csomóponton. Ebben az esetben végrehajtjuk visszalépés . A legfelső elem, azaz a 6 kiugrik a veremből az alábbiak szerint:

BFS kontra DFS
BFS kontra DFS

A verem legfelső eleme a 4. Mivel a 4-es csomópontból nem maradt meglátogatott szomszédos csúcs; ezért a 4. csomópont kikerül a veremből az alábbiak szerint:

BFS kontra DFS
BFS kontra DFS

A verem következő legfelső eleme a 2. Most a 2. csomópont nem látogatott szomszédos csúcsait nézzük. Mivel csak egy meg nem látogatott csomópont, azaz 5 maradt, így az 5. csomópont a 2 feletti verembe kerül, és kinyomtatásra kerül. az alábbiak szerint:

BFS kontra DFS

Most ellenőrizzük az 5. csomópont szomszédos csúcsait, amelyek még mindig nem látogattak. Mivel nem maradt meglátogatható csúcs, ezért az 5-ös elemet az alábbi módon emeljük ki a veremből:

BFS kontra DFS

Nem tudunk továbblépni 5-öt, ezért visszalépést kell végrehajtanunk. Visszalépéskor a legfelső elem kikerül a veremből. A legfelső elem az 5, amely kikerülne a veremből, és visszatérünk a 2. csomóponthoz az alábbiak szerint:

BFS kontra DFS

Most a 2. csomópont nem látogatott szomszédos csúcsait fogjuk ellenőrizni. Mivel nem maradt meglátogatandó szomszédos csúcs, ezért visszalépést végzünk. Visszalépéskor a legfelső elem, azaz a 2. kikerülne a veremből, és visszamegyünk a 3-as csomóponthoz az alábbiak szerint:

list.sort java
BFS kontra DFS
BFS kontra DFS

Most a 3. csomópont nem látogatott szomszédos csúcsait fogjuk ellenőrizni. Mivel nem maradt meglátogatandó szomszédos csúcs, ezért visszalépést végzünk. A visszalépéskor a legfelső elem, azaz a 3 kikerülne a veremből, és visszalépnénk az 1-es csomóponthoz az alábbiak szerint:

BFS kontra DFS
BFS kontra DFS

A 3. elem kiugrása után ellenőrizzük az 1. csomópont nem látogatott szomszédos csúcsait. Mivel nem maradt meglátogatandó csúcs; ezért a visszalépés végrehajtásra kerül. A visszalépéskor a legfelső elem, azaz az 1 kikerülne a veremből, és visszalépnénk a 0-s csomóponthoz az alábbiak szerint:

BFS kontra DFS
BFS kontra DFS

Ellenőrizzük a 0 csomópont szomszédos csúcsait, amelyek még mindig nem látogattak. Mivel nem maradt meglátogatható szomszédos csúcs, ezért visszalépést végzünk. Ebben csak egy elem, azaz a veremben maradt 0 kerül ki a veremből az alábbiak szerint:

BFS kontra DFS

Ahogy a fenti ábrán is megfigyelhetjük, hogy a verem üres. Tehát itt le kell állítani a DFS-bejárást, és a kinyomtatott elemek a DFS-bejárás eredménye.

A BFS és a DFS közötti különbségek

A BFS és a DFS közötti különbségek a következők:

BFS DFS
Teljes alak A BFS a Breadth First Search rövidítése. A DFS a Depth First Search rövidítése.
Technika Ez egy csúcs alapú technika a gráf legrövidebb útjának megtalálására. Ez egy él alapú technika, mivel az él mentén lévő csúcsokat először a kezdőponttól a végcsomópontig fedezzük fel.
Meghatározás A BFS egy bejárási technika, amelyben először az azonos szintű csomópontokat fedezzük fel, majd lépünk a következő szintre. A DFS egy bejárási technika is, amelyben a bejárás a gyökércsomóponttól indul, és a csomópontokat a lehető legmesszebbre feltárja, amíg el nem érjük azt a csomópontot, amelynek nincsenek meglátogatott szomszédos csomópontjai.
Adatstruktúra A soradat-struktúra a BFS-bejáráshoz használatos. A verem adatszerkezet a BFS bejáráshoz használatos.
Visszalépés A BFS nem használja a visszalépés fogalmát. A DFS visszalépést használ az összes meg nem látogatott csomópont bejárására.
Élek száma A BFS megtalálja a legrövidebb utat, amelynek minimális számú éle van a forrástól a célcsúcsig. Az elosztott fájlrendszerben több élre van szükség ahhoz, hogy a forráscsúcstól a célcsúcsig haladjunk.
Optimalitás A BFS bejárás optimális azokhoz a csúcsokhoz, amelyeket a forráscsúcshoz közelebb kell keresni. Az elosztott fájlrendszer bejárása optimális azokhoz a gráfokhoz, amelyekben a megoldások távol vannak a forráscsúcstól.
Sebesség A BFS lassabb, mint a DFS. A DFS gyorsabb, mint a BFS.
Alkalmasság döntési fának Nem alkalmas a döntési fára, mert először az összes szomszédos csomópont feltárását igényli. Alkalmas a döntési fára. A döntés alapján minden utat feltár. Amikor megtalálják a célt, leállítja a bejárást.
Hatékony memória Nem memóriahatékony, mivel több memóriát igényel, mint a DFS. Memóriahatékony, mivel kevesebb memóriát igényel, mint a BFS.