Breadth-First Search (BFS) a Hĺbkové vyhľadávanie (DFS) sú dva základné algoritmy používané na prechádzanie alebo vyhľadávanie grafov a stromov. Tento článok popisuje základný rozdiel medzi vyhľadávaním do šírky a vyhľadávaním do hĺbky.

Rozdiel medzi BFS a DFS
Breadth-First Search (BFS) :
BFS, Breadth-First Search, je technika založená na vrcholoch na nájdenie najkratšej cesty v grafe. Používa a Výkon:
reťazec a podreťazec
A, B, C, D, E, F>
kód:
C++ #include #include using namespace std; // This class represents a directed graph using adjacency // list representation class Graph { int V; // No. of vertices // Pointer to an array containing adjacency lists list * adj; verejné: Graf(int V); // Konštruktor // funkcia na pridanie hrany do grafu void addEdge(int v, int w); // vypíše prechod BFS z daného zdroja s void BFS(int s); }; Graph::Graph(int V) { this->V = V; adj = nový zoznam [V]; } void Graph::addEdge(int v, int w) { adj[v].push_back(w); // Pridajte w do zoznamu v. } void Graph::BFS(int s) { // Označenie všetkých vrcholov ako nenavštívené bool* navštívené = new bool[V]; pre (int i = 0; i< V; i++) visited[i] = false; // Create a queue for BFS list fronta; // Označiť aktuálny uzol ako navštívený a zaradiť ho do frontu [s] = true; queue.push_back(s); // 'i' sa použije na získanie všetkých susedných vrcholov // zoznamu vrcholov ::iterátor i; // Vytvorte mapovanie z celých čísel na znaky znakovej mapy[6] = { 'A', 'B', 'C', 'D', 'E', 'F ' }; while (!queue.empty()) { // Vyradí vrchol z frontu a vytlačí ho s = queue.front(); cout<< map[s] << ' '; // Use the mapping to print // the original label queue.pop_front(); // Get all adjacent vertices of the dequeued vertex // s If a adjacent has not been visited, then mark // it visited and enqueue it for (i = adj[s].begin(); i != adj[s].end(); ++i) { if (!visited[*i]) { queue.push_back(*i); visited[*i] = true; } } } } int main() { // Create a graph given in the diagram /* A / B C / / D E F */ Graph g(6); g.addEdge(0, 1); g.addEdge(0, 2); g.addEdge(1, 3); g.addEdge(2, 4); g.addEdge(2, 5); cout << 'Breadth First Traversal is: '; g.BFS(0); // Start BFS from A (0) return 0; }>
Python from collections import deque # This class represents a directed graph using adjacency list representation class Graph: def __init__(self, V): self.V = V # No. of vertices self.adj = [[] for _ in range(V)] # Adjacency lists # Function to add an edge to graph def addEdge(self, v, w): self.adj[v].append(w) # Add w to v’s list # Prints BFS traversal from a given source s def BFS(self, s): # Mark all the vertices as not visited visited = [False] * self.V # Create a queue for BFS queue = deque() # Mark the current node as visited and enqueue it visited[s] = True queue.append(s) # Create a mapping from integers to characters mapping = ['A', 'B', 'C', 'D', 'E', 'F'] while queue: # Dequeue a vertex from queue and print it s = queue.popleft() # Use the mapping to print the original label print(mapping[s], end=' ') # Get all adjacent vertices of the dequeued vertex s # If an adjacent has not been visited, then mark it visited # and enqueue it for i in self.adj[s]: if not visited[i]: queue.append(i) visited[i] = True if __name__ == '__main__': # Create a graph given in the diagram # A # / # B C # / / # D E F g = Graph(6) g.addEdge(0, 1) g.addEdge(0, 2) g.addEdge(1, 3) g.addEdge(2, 4) g.addEdge(2, 5) print('Breadth First Traversal is: ', end='') g.BFS(0) # Start BFS from A (0)>
JavaScript // This class represents a directed graph using adjacency list representation class Graph { constructor(V) { this.V = V; // No. of vertices this.adj = new Array(V).fill(null).map(() =>[]); // Pole zoznamov susediacich } // Funkcia na pridanie hrany do grafu addEdge(v, w) { this.adj[v].push(w); // Pridajte w do zoznamu v. } // Funkcia na vykonanie prechodu BFS z daného zdroja s BFS(s) { // Označenie všetkých vrcholov ako nenavštívených let visit = new Array(this.V).fill(false); // Vytvorenie frontu pre BFS let queue = []; // Označiť aktuálny uzol ako navštívený a zaradiť ho do frontu [s] = true; queue.push(s); // Mapovanie z celých čísel na znaky nech map = ['A', 'B', 'C', 'D', 'E', 'F']; while (queue.length> 0) { // Vyradí vrchol z frontu a vytlačí ho s = queue.shift(); console.log(mapa[s] + ' '); // Na vytlačenie pôvodného štítka použite mapovanie // Získanie všetkých susedných vrcholov vyradeného vrcholu s // Ak susedný nebol navštívený, potom ho označte za navštívený // a zaraďte ho do frontu (nech i of this.adj[s ]) { if (!navštívené[i]) { queue.push(i); navštívené[i] = pravda; } } } } } // Funkcia hlavnej funkcie main() { // Vytvorenie grafu uvedeného v diagrame /* A / B C / / D E F */ nech g = new Graph(6); g.addEdge(0, 1); g.addEdge(0, 2); g.addEdge(1, 3); g.addEdge(2, 4); g.addEdge(2, 5); console.log('Prvá šírka prechodu je: '); g.BFS(0); // Spustenie BFS od A (0) } // Spustenie hlavnej funkcie main();>
Výkon
Breadth First Traversal is: A B C D E F>
Hĺbkové prvé vyhľadávanie (DFS) :
DFS, Hĺbkové prvé vyhľadávanie , je technika založená na okrajoch. Používa sa Výkon:
preity zinta
A, B, C, D, E, F>
Rozdiel medzi BFS a DFS:
Parametre | BFS | DFS |
---|---|---|
Znamenať | BFS znamená Breadth First Search. | DFS znamená Depth First Search. |
Dátová štruktúra | BFS (Breadth First Search) používa dátovú štruktúru Queue na nájdenie najkratšej cesty. | DFS (Depth First Search) používa dátovú štruktúru zásobníka. |
Definícia | BFS je traverzálny prístup, v ktorom najprv prechádzame všetkými uzlami na rovnakej úrovni a potom prejdeme na ďalšiu úroveň. | DFS je tiež traverzálny prístup, v ktorom traverz začína v koreňovom uzle a pokračuje cez uzly tak ďaleko, ako je to možné, až kým nedosiahneme uzol bez nenavštívených blízkych uzlov. |
Koncepčný rozdiel | BFS vytvára strom úroveň po úrovni. | DFS vytvára podstrom po podstrome. |
Použitý prístup | Funguje na koncepte FIFO (First In First Out). | Funguje na koncepte LIFO (Last In First Out). |
Vhodné pre | BFS je vhodnejšie na vyhľadávanie vrcholov bližšie k danému zdroju. | DFS je vhodnejšie, ak existujú riešenia mimo zdroja. |
Aplikácie | BFS sa používa v rôznych aplikáciách, ako sú bipartitné grafy, najkratšie cesty atď. | DFS sa používa v rôznych aplikáciách, ako sú acyklické grafy a hľadanie silne prepojených komponentov atď. |
Pozri tiež BFS vs DFS pre binárny strom pre rozdiely pre prechod binárneho stromu.