Mi az a BFS?
A Breadth-First Search (BFS) a csomópontok bejárásán alapul, azáltal, hogy az egyes csomópontok szomszédjait hozzáadja a bejárási sorhoz a gyökércsomóponttól kezdve. A gráf BFS-e hasonló a fához, azzal az eltéréssel, hogy a gráfoknak lehetnek ciklusai. A mélységi kereséssel ellentétben egy adott mélységben minden szomszédos csomópontot megvizsgálunk, mielőtt a következő szintre lépnénk.
BFS algoritmus
A következő lépések szükségesek a szélesség-első keresés használatához a grafikonok felfedezéséhez:
karakterlánc a jsonobjecthez
- Vegyük az adatokat a gráf szomszédsági mátrixához vagy szomszédsági listájához.
- Hozzon létre egy sort, és töltse fel elemekkel.
- Aktiválja a gyökércsomópontot (ami azt jelenti, hogy a gyökércsomópontot a sor elején kapja meg).
- Állítsa sorba a sor fejét (vagy kezdeti elemét), majd helyezze sorba a sor összes közeli csomópontját balról jobbra. Egyszerűen állítsa ki a fejet a sorból, és folytassa a műveletet, ha egy csomópontnak nincsenek közeli csomópontjai, amelyeket ki kell vizsgálni. (Megjegyzés: Ha olyan szomszéd kerül elő, amelyet korábban megvizsgáltak, vagy amely a sorban áll, ne helyezze sorba, hanem hagyja ki.)
- Folytassa így, amíg a sor ki nem ürül.
BFS alkalmazások
Az algoritmus rugalmassága miatt a Breadth-First Search igen hasznos a való világban. Ezek közül néhány:
- Egy peer-to-peer hálózatban peer csomópontokat fedez fel. A legtöbb torrent kliens, mint például a BitTorrent, az uTorrent és a qBittorent, ezt a folyamatot alkalmazza „magok” és „társak” megtalálására a hálózatban.
- Az index a webes feltérképezés során alkalmazott gráfbejárási technikák felhasználásával készült. Az eljárás a forrásoldallal kezdődik, mint gyökércsomóponttal, és lefelé halad az összes másodlagos oldalra, amely a forrásoldalhoz kapcsolódik (és ez a folyamat folytatódik). A rekurziós fa csökkentett mélysége miatt a Breadth-First Search itt rejlő előnyökkel rendelkezik.
- A GPS-t használó GPS-navigációs rendszerek használata széleskörű keresést végez a közeli helyek megtalálásához.
- Cheney technikáját, amely a szélesség-első keresés koncepcióját alkalmazza, a szemétgyűjtésre használják.
Példa BFS-bejárásra
A kezdéshez nézzünk egy egyszerű példát. Kezdjük 0-val, mint gyökércsomóponttal, és lefelé haladunk a grafikonon.
1. lépés: sor(0)
Sor
0 |
2. lépés: Sor (0), sor (1), sor (3), sor (4)
Sor
1 | 3 | 4 |
3. lépés: Sorból (1), sorba (2)
Sor
3 | 4 | 2 |
4. lépés: Dequeue (3), sorba (5). Nem adunk újra 1-et a sorhoz, mert a 0-t már feltártuk.
Sor
4 | 2 | 5 |
5. lépés: Sorból (4)
string int konvertálása java-ban
Sor
2 | 5 |
6. lépés: Sorból (2)
Sor
5 |
7. lépés: Sorból (5)
Sor
A sor most üres, ezért leállítjuk a folyamatot.
Breadth-First Search Java program
Számos megközelítés létezik a kóddal való kezelésre. Leginkább a széleskörű keresés Java nyelven történő megvalósításának lépéseit tárgyaljuk. Grafikonok tárolására szomszédsági lista vagy szomszédsági mátrix használható; bármelyik módszer elfogadható. A szomszédsági lista fogja használni a gráfunkat a kódunkban. A Breadth-First Search algoritmus Java nyelven való implementálásakor sokkal könnyebb kezelni a szomszédsági listát, mivel csak akkor kell végighaladnunk az egyes csomópontokhoz csatolt csomópontok listáján, ha a csomópont kikerül a sorból a csomópont elejétől (vagy elejétől). sorban.
A kód bemutatására használt grafikon megegyezik az előző példában használt grafikonnal.
stdin a c
BFSTraversal.java
import java.io.*; import java.util.*; public class BFSTraversal { private int node; /* total number number of nodes in the graph */ private LinkedList adj[]; /* adjacency list */ private Queue que; /* maintaining a queue */ BFSTraversal(int v) { node = v; adj = new LinkedList[node]; for (int i=0; i<v; i++) { adj[i]="new" linkedlist(); } que="new" void insertedge(int v,int w) adj[v].add(w); * adding an edge to the adjacency list (edges are bidirectional in this example) bfs(int n) boolean nodes[]="new" boolean[node]; initialize array for holding data int a="0;" nodes[n]="true;" que.add(n); root node is added top of queue while (que.size() !="0)" n="que.poll();" remove element system.out.print(n+' '); print (int i="0;" < adj[n].size(); iterate through linked and push all neighbors into if (!nodes[a]) only insert nodes they have not been explored already nodes[a]="true;" que.add(a); public static main(string args[]) bfstraversal graph="new" bfstraversal(6); graph.insertedge(0, 1); 3); 4); graph.insertedge(4, 5); graph.insertedge(3, graph.insertedge(1, 2); 0); graph.insertedge(2, graph.insertedge(5, system.out.println('breadth first traversal is:'); graph.bfs(0); pre> <p> <strong>Output:</strong> </p> <pre> Breadth First Traversal for the graph is: 0 1 3 4 2 5 </pre> <hr></v;>