Breadth-first Search
ÄÄÇ»ÅͰúÇÐ ¿¡¼ breadth-first search (BFS) ´Â Æ®¸® (Tree), ±×·¡ÇÁ (Graph) ¸¦ Ž»öÇÏ´Â tree search algorithm ÀÌ´Ù. º¸Åë root node¿¡¼ Ãâ¹ßÇÏ¿© ¸ðµç ÀÌ¿ôÇÏ´Â ³ëµåµéÀ» Ž»öÇÑ´Ù. ¶ÇÇÑ °¡Àå °¡±î¿î ³ëµåµé °¢°¢¿¡ ´ëÇØ Ž»öÇÏÁö ¾ÊÀº ÀÌ¿ô ³ëµåµéÀ» Ž»öÇÏ¿© ¸ñÇ¥¸¦ ãÀ» ¶§±îÁö °è¼ÓÇÑ´Ù.
BFS ´Â ÇØ (solution)¸¦ ã¾Æ¼ Á¶Á÷ÀûÀ¸·Î Æ®¸®ÀÇ ¸ðµç ³ëµåµéÀ» °Ë»çÇÏ´Â ¹«Á¤º¸ Ž»ö (Uninformed or Blind Search) ÀÌ´Ù. ´Þ¸® ¸»ÇÏ¸é ¸ñÇ¥¿¡ ´ëÇÑ °í·Á¾øÀÌ ¸ñÇ¥°¡ ¹ß°ßµÉ ¶§ ±îÁö Àüü Æ®¸®¸¦ ÀüºÎ Ž»öÇÑ´Ù (exhaustively searches). BFS ´Â ÈÞ¸®½ºÆ½ (Heuristic) À» »ç¿ëÇÏÁö ¾Ê´Â´Ù.
¾Ë°í¸®ÁòÀÇ °üÁ¡¿¡¼ º¸¸é, ³ëµå¸¦ È®ÀåÇÏ¿© ¾ò¾îÁø ¸ðµç ÀÚ½Ä ³ëµåµéÀÌ FIFO queue ¿¡ ´õÇØÁø´Ù. ½ÇÁ¦·Î ±¸Çö½Ã, ÀÌ¿ô ³ëµåµéÀ» À§ÇØ ¾ÆÁ÷ °Ë»çµÇÁö ¾ÊÀº ³ëµåµéÀº "open" »óÅ ¶ó°í ºÒ¸®´Â ¾î¶² ¿ë±â (queue ¶Ç´Â linked list °°Àº °Í) ¿¡ ³õ¿©Áö°Ô µÇ°í, ÀÏ´Ü °Ë»çµÇ¸é "closed" ¶ó°í ºÒ¸®´Â ¿ë±â¿¡ ³õ¿©Áø´Ù.
Æ®¸®°¡ ¾Æ´Ñ unweighted cyclic graph ¿¡¼ Ãִܰæ·Î¸¦ ã±âÀ§ÇØ Å½»öÇÒ ¶§´Â, BFS ´Â ÀÌ¹Ì ¹æ¹®Çß¾ú´Ù´Â °ÍÀ» ³ªÅ¸³¾ Çʿ䰡 Àֱ⠶§¹®¿¡ °¢ ³ëµå¿¡ ÇϳªÀÇ bit ¸¦ °¡Áö°Ô ÇÏ¿© ÀûÀÀÇÒ ¼ö ÀÖ´Ù.
À§ÀÇ ±×·¡ÇÁ¿¡¼ BFS ´Â A¿¡¼ Ãâ¹ßÇϸç, ¿ÞÂÊÀÇ edge¸¦ ¿À¸¥ÂÊÀÇ edge º¸´Ù ¸ÕÀú ¼±ÅÃÇÑ´Ù°í °¡Á¤Çϸé, ¹æ¹®ÇÏ´Â ³ëµåÀÇ Å½»ö ¼ø¼´Â ´ÙÀ½°ú °°´Ù. ±íÀ̿켱 Ž»ö (Depth First Search) ¿Í ºñ±³ÇØ º¸ÀÚ (Wikipedia : Breadth-first Search).
A, B, C, E, D, F, G.
Pseudocode :
BFS(Start,Goal) push(Queue,Start) while(notEmpty(Queue)) Node <- Pop(Queue) if (Node == Goal) return Node forall Child <- Expand(Node) push(Queue, Child)
Depth First Search Iterative Deepening Depth-first Search best-first search
Site :
Graph Algorithms : BFS java code
Dictionary of Algorithms and Data Structures: breadth-first search
C++ Boost Graph Library: Breadth-First Search
³ªºñ¿ì¼± Ž»ö (Breadth-First Search) : Dan W. Patterson
³Êºñ¿ì¼± Ž»ö (Breadth-First Search) : Nils J.Nilsson