Javascriptでの幅優先探索トラバーサル
BFSは、子頂点にアクセスする前に隣接頂点にアクセスし、検索プロセスでキューが使用されます。 BFSの仕組みは次のとおりです-
- 隣接する未訪問の頂点にアクセスします。訪問済みとしてマークします。表示します。キューに挿入します。
- 隣接する頂点が見つからない場合は、最初の頂点をキューから削除します。
- キューが空になるまでルール1とルール2を繰り返します。
BFSトラバーサルがどのように機能するかの図を見てみましょう:
| ステップ | トラバーサル | 説明 |
|---|---|---|
| 1 | | キューを初期化します。 |
| 2 | | まずSにアクセスします (開始ノード)そしてそれを訪問済みとしてマークします。 |
| 3 | | 次に、Sからの未訪問の隣接ノードが表示されます。 この例では、3つのノードがありますが、アルファベット順に A、を選択します。 訪問済みとしてマークし、キューに入れます。 |
| 4 | | 次に、 Sからの未訪問の隣接ノード はB 。訪問済みとしてマークし、キューに入れます。 |
| 5 | | 次に、 Sからの未訪問の隣接ノード はC 。訪問済みとしてマークし、キューに入れます。 |
| 6 | | さて、 S 未訪問の隣接ノードはありません。したがって、デキューして Aを見つけます 。 |
| 7 | | から A D 未訪問の隣接ノードとして。訪問済みとしてマークし、キューに入れます。 |
この段階では、マークされていない(訪問されていない)ノードはありません。しかし、アルゴリズムに従って、すべての未訪問ノードを取得するためにデキューを続けます。キューが空になると、プログラムは終了します。
これをJavaScriptで実装する方法を見てみましょう。
例
BFS(node) {
// Create a Queue and add our initial node in it
let q = new Queue(this.nodes.length);
let explored = new Set();
q.enqueue(node);
// Mark the first node as explored explored.
add(node);
// We'll continue till our queue gets empty
while (!q.isEmpty()) {
let t = q.dequeue();
// Log every element that comes out of the Queue
console.log(t);
// 1. In the edges object, we search for nodes this node is directly connected to.
// 2. We filter out the nodes that have already been explored.
// 3. Then we mark each unexplored node as explored and add it to the queue.
this.edges[t]
.filter(n => !explored.has(n))
.forEach(n => {
explored.add(n);
q.enqueue(n);
});
}
} この関数は、-
を使用してテストできます。例
let g = new Graph();
g.addNode("A");
g.addNode("B");
g.addNode("C");
g.addNode("D");
g.addNode("E");
g.addNode("F");
g.addNode("G");
g.addEdge("A", "C");
g.addEdge("A", "B");
g.addEdge("A", "D");
g.addEdge("D", "E");
g.addEdge("E", "F");
g.addEdge("B", "G");
g.BFS("A"); 出力
これにより、出力が得られます-
A C B D G E F
-
JavaScriptで文字列を検索する方法は?
以下はJavaScriptで文字列を検索するためのコードです- 例 <!DOCTYPE html> <html lang="en" > <head> <meta charset="UTF-8" /> <meta name="viewport" content="width=device-width, initial-scale=1.0" /> <title>Document</title> <style>
-
JavaScriptでの線形検索の実装
以下は、JavaScriptで線形検索を実装するためのコードです- 例 <!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8" /> <meta name="viewport" content="width=device-width, initial-scale=1.0" /> <title>Document</title> <style>