BreadthFirstScan
BreadthFirstScan[g,s,{"event1"f1,"event2"f2,…}]
グラフ g の幅優先探索(bfs)を頂点 s から始めて行い,"eventi" が起るたびに fiを評価する.
BreadthFirstScan[g,{"event1"f1,"event2"f2,…}]
グラフ g 全体の幅優先探索を行う.
BreadthFirstScan[{vw,…},…]
規則 vw を使ってグラフ g を指定する.
詳細
- BreadthFirstScanは,幅優先探索(BFS)あるいは横型探索としても知られている.
- BreadthFirstScan[g,s,{…}]は,幅優先順に頂点 s に連結されているグラフ g 内の頂点を訪れる.
- 幅優先順では,現在訪れられている頂点に隣接した頂点すべてがまず訪れられる.
- BreadthFirstScan[g,{…}]は,g の頂点リストの最初の頂点から始めて,複数の幅優先探索を行い,その後まだ訪れていない頂点リストの最初の頂点から始めることにより,事実上それぞれの連結成分を探索する.
- BreadthFirstScan[g,…]は,wiが viに先行するものであり,{v1,v2,…}が g の頂点リストである木を表すリスト{w1,w2,…}を与える.
- 頂点の発見にアクセスを提供する事象
-
"DiscoverVertex" いつ頂点が見付けられるか "UnvisitedVertex" いつ訪れていない頂点がもう一度見付けられるか "VisitedVertex" いつ訪れた頂点がもう一度見付けられるか - "DiscoverVertex"->fd は,開始頂点 s からの距離 d の地点で頂点 u が訪れられた頂点 v から見付けられるとき,fd[u,v,d]を呼び出す.
- "UnvisitedVertex"->fru は,訪れていない頂点 u が訪れた頂点 v からもう一度見付けられる場合に,fru[u,v]を呼び出す.
- "VisitedVertex"->frv は,訪れた頂点 u が訪れた頂点 v からもう一度見付けられる場合に,frv[u,v]を呼び出す.
- 頂点の訪問へのアクセスを提供する事象
-
"PrevisitVertex" 頂点を訪れる前 "PostvisitVertex" 頂点を訪れた後 - "PrevisitVertex"->fs は頂点 u を訪れる前に fs[u]を呼び出す.
- "PostvisitVertex"->fe は頂点 u を訪れた後に fe[u]を呼び出す.
- 幅優先探索の木は,幅優先探索の際に走査された辺によって生成される木である.
- 訪れた頂点から辺の探査へのアクセスを提供する事象
-
"FrontierEdge" 幅優先探索の木の辺 "CycleEdge" 幅優先探索の木にない辺 - "FrontierEdge"->ffe は,頂点 v が訪れられていて,u がまだ見付けられていない場合の辺 vu について ffe[vu]を呼び出す.
- "CycleEdge"->fce は,頂点 v が訪れられていて,u がもう見付けられた場合の辺 vu について fce[vu]を呼び出す.通常幅優先探索の木にない閉路や辺を見付けるのに便利である.
- 無向グラフについては,呼び出しに使われる辺は無向の辺 vu であるとみなされる.
例題
すべて開くすべて閉じるスコープ (18)
基本 (6)
BreadthFirstScanは無向グラフに使える:
開始頂点が省略されると,BreadthFirstScanはグラフ全体を見付ける:
BreadthFirstScanは大きいグラフに使うことができる:
辺の発見過程 (2)
頂点の発見過程 (3)
探索の木で先行するもの (5)
BreadthFirstScanは,幅優先探索の木における先行頂点のリストを返す:
先行するもののリストを使って幅優先探索の木を再構築することができる:
探索が全域木を作成する場合には,TreeGraphの方が便利である:
先行する頂点は"DiscoverVertex"の事象を使っても得ることができる:
VertexListで初期化し,頂点が見付かったときに値をもう一度割り当てる:
BreadthFirstScanからの戻り値と比べる:
オプション (42)
"CycleEdge" (8)
"OutEdges"の後で,各辺は"FrontierEdge"か"CycleEdge"に渡される:
辺がはじめて見付けられた頂点に繋がっている場合には,"FrontierEdge"が引き起される:
"CycleEdge"に続いて,"VisitedVertex"か"UnvisitedVertex"が引き起される:
隣接する頂点がすでに訪問された場合には,"VisitedVertex"が引き起される:
有向のCycleGraphにおいて:
無向のCycleGraphにおいて:
"DiscoverVertex" (8)
"FrontierEdge"に続いて,隣接頂点に対して"DiscoverVertex"が引き起される:
開始頂点に対しても"DiscoverVertex"が引き起される:
頂点がはじめて見付けられた場合に"DiscoverVertex"の事象が引き起される:
"DiscoverVertex"事象が"PrevisitVertex"への呼出しの前に引き起される:
引数が有向の木で"DiscoverVertex"関数に渡されるのを示す:
有向のCycleGraphにおいて:
無向のCycleGraphにおいて:
"FrontierEdge" (8)
"OutEdges"の後,各辺は"FrontierEdge"か"CycleEdge"に渡される:
辺がはじめて見付けられた頂点に繋がっている場合には,"FrontierEdge"が引き起される:
"FrontierEdge"に続いて,隣接頂点に対して"DiscoverVertex"が引き起される:
開始頂点に対しても"DiscoverVertex"が引き起される:
有向の木のそれぞれの辺すべてに対して"FrontierEdge"関数が呼び出される:
有向のCycleGraphの幅優先探索の木をハイライトする:
無向のCycleGraphにおいて:
"PostvisitVertex" (2)
"PrevisitVertex" (2)
"UnvisitedVertex" (7)
"CycleEdge"の後,"VisitedVertex"か"UnvisitedVertex"が引き起される:
隣接頂点がすでに訪問されていない場合に,"UnvisitedVertex"が引き起される:
有向の木において先行頂点が"UnvisitedVertex"関数に渡されることを示す:
有向のCycleGraphにおいて:
無向のCycleGraphにおいて:
"VisitedVertex" (7)
"CycleEdge"の後,"VisitedVertex"か"UnvisitedVertex"が引き起される:
隣接頂点がすでに訪問された場合には,"VisitedVertex"が引き起される:
有向の木において先行頂点が"VisitedVertex"に渡されることを示す:
頂点が訪問された後,これはその子供のそれぞれからもう一度訪問を受ける:
有向のCycleGraphにおいて:
無向のCycleGraphにおいて:
アプリケーション (17)
基本のアプリケーション (10)
頂点集合から行き着くことのできる成分をこの成分の和集合として求める:
頂点から行き着くことのできる成分で異なるものをハイライトする:
頂点の訪問について関数を設定する(前に計算された距離は無視する):
対象における距離を抽出し,GraphDistanceと比べる:
各頂点のカウンタと発見を数えるためのイベントハンドラを設定する:
無向グラフにおいて,BreadthFirstScanは連結成分の頂点すべてをそれぞれ訪れる:
ConnectedComponentsと比較する:
各頂点について"Partition"の一貫した割当てを求めようとする:
各頂点は,その先行頂点における値によって1あるいは-1の値を割り当てられる:
探索の過程を示す (4)
"FrontierEdge"を使って幅優先探索の木を構築する:
有向グラフでは,"CycleEdge"の辺は「後退辺」あるいは「交差辺」として分類することができる:
各頂点の時系列において,発見時に点を付け,訪問前から訪問後へ線を引く:
有向のCycleGraphにおいて:
無向のCycleGraphにおいて:
発見された頂点を赤,アクティブな頂点を黄色,訪問された頂点を青で色付けし,木ではない辺の色で頂点が"UnvisitedVertex"(赤)あるいは"VisitedVertex"(青)の どちらの呼出しに繋がるのかを示す:
最短経路のアプリケーション (3)
FindShortestPathと比べる:
Zacharyの古典的な空手クラブネットワークにおける媒介中心性:
すべての頂点からの最短経路をすべて考慮する間に"BetweennessCentrality"を累積する:
テキスト
Wolfram Research (2010), BreadthFirstScan, Wolfram言語関数, https://reference.wolfram.com/language/ref/BreadthFirstScan.html (2015年に更新).
CMS
Wolfram Language. 2010. "BreadthFirstScan." Wolfram Language & System Documentation Center. Wolfram Research. Last Modified 2015. https://reference.wolfram.com/language/ref/BreadthFirstScan.html.
APA
Wolfram Language. (2010). BreadthFirstScan. Wolfram Language & System Documentation Center. Retrieved from https://reference.wolfram.com/language/ref/BreadthFirstScan.html