幅優先探索

記事数:(2)

アルゴリズム

幅優先探索で迷路を解く

複雑に入り組んだ道と、たった一つの正解への道筋を持つ迷路。これを機械に解かせるにはどうすれば良いのでしょうか。人のように目で見て考えることができない機械のために、迷路をデータの形に変換する必要があります。迷路は、縦横に交差する道と壁でできています。この構造を、点と線で表現してみましょう。まず、道の交わる点を一つずつデータとして記録します。次に、どの点と点が線で繋がっているか、つまり道で繋がっているかを記録します。そして、迷路の始まりと終わりとなる二つの特別な点も記録します。これで、機械が理解できる形で迷路を表現できました。 機械は、記録された迷路のデータに基づいて、出発点から探索を始めます。まるで、一本の木が枝分かれしていくように、一つ一つの分岐点ですべての可能な道を探っていきます。これは、木の根っこが出発点、枝が道、そして葉が行き止まり、またはゴール地点となる木のような図で表すことができます。この図を探索木と呼びます。探索木を使うことで、機械が迷路をどのように探索しているのかを視覚的に捉えることができます。もし、行き止まりに辿り着いたら、一つ前の分岐点に戻り、まだ進んでいない別の道を探索します。これをゴールに辿り着くまで繰り返します。まるで、迷路の中で糸を手繰るように、機械は一つずつ道を辿り、最終的にゴールへの道筋を見つけ出すのです。このように、迷路の探索は、複雑な問題を一つずつ分解し、順序立てて解いていくという、機械の得意とする作業の一つなのです。
アルゴリズム

幅優先探索で迷路を解く

幅優先探索は、繋がりを持ったデータの集まり、例えば路線図や家系図のような構造の中で、ある地点から別の地点への道筋を見つけるための手順です。 迷路を解くことを想像してみてください。あなたはスタート地点に立っています。まず、スタート地点に隣接する全てのマスを調べます。行き止まりなら、そこへは進めません。道が続いていたら、そこへ一歩進みます。次に、一歩進んだ地点からまた隣接する全てのマスを調べます。これを繰り返していくと、まるで水面に石を投げた時に波紋が広がるように、探索範囲がスタート地点を中心にして広がっていきます。これが幅優先探索です。 木の根元から枝が伸び、さらにその枝からまた枝が伸びていく様子を思い浮かべてください。幅優先探索は、根元から近い枝を先に探索し、徐々に遠い枝へと探索を広げていくイメージです。つまり、スタート地点に近い場所を優先的に調べるということです。 この手順の利点は、最初に見つかった道筋が、スタート地点から目的地点までの最短経路となることが保証されていることです。遠回りせずに、最も効率の良い道筋を見つけられるのです。 例えば、友達の友達の友達を辿って、世界中の人と繋がっていると言われています。幅優先探索を使えば、あなたと特定の人との間の最短の繋がりを見つけることができるでしょう。何人経由すればその人に辿り着けるのか、最短ルートで知ることができるのです。