Depth-first  Search

 

Depth-first search (DFS) ´Â Æ®¸® (Tree), ±×·¡ÇÁ (Graph) ¸¦ Ž»öÇÏ´Â ¾Ë°í¸®ÁòÀÌ´Ù. ½±°Ô ¾ê±âÇϸé, root¿¡¼­ Ãâ¹ßÇÏ¿© (graph ¿¡¼­´Â ¾î¶² ³ëµå¸¦ ¼±ÅÃÇؼ­) backtracking Çϱâ Àü±îÁö °¢ branch¿¡¼­ °¡´ÉÇÑ ¸Ö¸®±îÁö Ž»öÇÑ´Ù.

DFS ´Â Ž»ö Æ®¸®ÀÇ ÃÖÃÊÀÇ Àڽijëµå (child node) ¸¦ È®ÀåÇÏ¿© ¸ñÇ¥»óÅ (goal state) °¡ ¹ß°ßµÉ ¶§±îÁö ´õ ±íÀÌ (deeper and deeper) È®ÀåÇÏ´Â ¹«Á¤º¸ Ž»ö (Uninformed or Blind Search) ÀÌ´Ù. ¸¸ÀÏ Àڽijëµå¸¦ °®Áö ¾ÊÀº ³ëµå¿¡ À̸£¸é backtrack ÇÏ¿© ´ÙÀ½ ³ëµå¿¡¼­ Ãâ¹ßÇÑ´Ù. »õ·ÎÀÌ È®ÀåµÈ ¸ðµç ³ëµåµéÀº È®ÀåÀ» À§ÇØ LIFO queue (stack) ¿¡ ´õÇØÁø´Ù.

DFS ÀÇ °ø°£º¹Àâµµ (space complexity) ´Â ³Êºñ¿ì¼± Ž»ö (Breadth-first Search) º¸´Ù ÈξÀ ´õ ³·´Ù. ¶ÇÇÑ ±×·² µíÇÑ °¡Áö (likely-looking branch) ¸¦ ¼±ÅÃÇÏ´Â ÈÞ¸®½ºÆ½ (Heuristic) ¹æ¹ý¿¡ ´õ ½±°Ô ÀûÀÀÇÑ´Ù.

memory ¿¡ ¿ÏÀüÈ÷ ´ãÀ» ¼ö ¾ø´Â Å« ±Ô¸ðÀÇ ±×·¡ÇÁ¸¦ Ž»öÇÒ ¶§, DFS ´Â Ž»öÆ®¸®¿¡¼­ °æ·ÎÀÇ ±æÀÌ°¡ ¹«ÇÑÇÒ ¶§¿Í °°Àº non-termination ÀÌ ¹ß»ýÇÑ´Ù. "ÀÌ¹Ì º¸¾Ò´ø ³ëµåµéÀ» ±â¾ïÇÏ´Â" °£´ÜÇÑ ÇعýÀº ¸Þ¸ð¸®°¡ ºÒÃæºÐÇÒ ¶§´Â ÀÛµ¿ÇÏÁö ¾Ê°ÔµÈ´Ù. ÀÌ°ÍÀº Æ®¸®ÀÇ ±íÀÌÀÇ ÇѰ踦 Áõ°¡½ÃÄѼ­ ÇØ°áÇÒ ¼ö Àִµ¥, ¼ÒÀ§ iterative deepening depth-first search ¶ó°í ºÒ¸®¿î´Ù.

À§ÀÇ ±×·¡ÇÁ¿¡¼­ DFS ´Â A¿¡¼­ Ãâ¹ßÇÏ°í, ¿ÞÂÊ edge °¡ ¿À¸¥ÂÊ edge º¸´Ù ¸ÕÀú ¼±Åõǰí, ÀÌÀü¿¡ ¹æ¹®ÇÑ ³ëµåµéÀ» ±â¾ïÇÏ°í, ¹æ¹®ÇÑ ³ëµåµéÀ» ¹Ýº¹ÇÏÁö ¾Ê´Â´Ù (À§ÀÇ ±×·¡ÇÁ´Â ÀÛÀº ±×·¡ÇÁÀ̱⠶§¹®¿¡) °í Çϸé, ´ÙÀ½ÀÇ ¼ø¼­´ë·Î Ž»öÀÌ ÀÌ·ç¾îÁø´Ù.

A, B, D, F, E, C, G.

¸¸ÀÏ ÀÌÀü¿¡ ¹æ¹®ÇÑ ³ëµåµéÀ» ±â¾ïÇÏÁö ¾Ê°í, ÀÌÀü ´Ü¶ô¿¡¼­ ´Ù¸¥ Á¶°ÇµéÀÌ ÁÖ¾îÁ³´Ù¸é, Ž»öÀº A, B, D, F, E, A, B, D, F, E, µîµîÀ¸·Î A, B, F, E cycle ¿¡ ÀâÇô¼­ ¿µ¿øÈ÷ ¼öÇàµÇ°í, °áÄÚ C ³ª G ¿¡ µµ´ÞÇÏÁö ¸øÇÒ °ÍÀÌ´Ù.

Iterative deepening Àº ÀÌ·¯ÇÑ loop¸¦ ¹æÇØÇϸç, À§¿¡¼­¿Í ¸¶Âù°¡Áö·Î ¿À¸¥ÂÊ¿¡¼­ ¿ÞÂÊÀ¸·Î Ž»öÀÌ ÁøÇàµÈ´Ù°í Çϸé, ´ÙÀ½ ±íÀÌ (depth) ¿¡ ÀÖ´Â ´ÙÀ½ ³ëµåµé¿¡ À̸¦ °ÍÀÌ´Ù.  

(±âÁ¸ÀÇ DFS ¿Í´Â ´Þ¸® iterative deepening Àº Áö±Ý C °¡ º¸ÀÌ´Â °ÍÀ» ÁÖ¸ñÇ϶ó)

(¿©ÀüÈ÷ C °¡ º¸ÀÌÁö¸¸ µÚ·Î ¹Ð¸° °ÍÀ» ¾Ë ¼ö ÀÖ´Ù. ´Ù¸¥ °æ·Î¸¦ ÅëÇØ E °¡ º¸ÀÌ´Â °ÍÀ» ÁÖ¸ñÇ϶ó, ±×¸®°í F °¡ µÎ ¹ø ¹Ýº¹ÇÑ´Ù)

À§ÀÇ ±×·¡ÇÁ¿¡¼­ ´õ ¸¹Àº ±íÀÌ (depth) °¡ ´õÇØÁü¿¡ µû¶ó, ¾Ë°í¸®ÁòÀÌ ³¡³ª±â Àü¿¡´Â µÎ °³ÀÇ cycle "ABFE" ¿Í "AEFB" Àº ´õ ±æ¾îÁú »ÓÀÌ¸ç ¶Ç´Ù¸¥ °¡Áö¸¦ Ž»öÇÑ´Ù (Wikipedia : Depth-first Search).

Pseudocode

Site :

Graph Algorithms : DFS java code

DFS Animation   DFS Applet

Depth First Search : Demo

C++ Boost Graph Library: Depth-First Search

paper :

±íÀÌ¿ì¼± ¶Ç´Â µÇÃßÀû Ž»ö (Depth-First or Backtracking Search) : Nils J.Nilsson

±íÀÌ¿ì¼± Ž»ö (Depth-first search) : Dan W. Patterson   

º¯ÇüµÈ Á¡Áõ ±íÀÌ¿ì¼± Ž»ö¹æ¹ýÀ» »ç¿ëÇÑ ·Îº¿ °èȹ½Ã½ºÅÛ (A Robot Planning System Based on a Modified DFID Search Method) : ÀÓÀç°É, Çѱ¹Á¤º¸Ã³¸®ÇÐȸ, 1995

ºÐ»ê ±íÀÌ¿ì¼± Ž»ö ÇÁ·ÎÅäÄÝÀÇ º¹Àâµµ °³¼±À» À§ÇÑ ¿¬±¸ (Improvement on The Complexity of Distributed Depth First Search Protocol) : ÃÖÁ¾¿ø, Çѱ¹Á¤º¸Ã³¸®ÇÐȸ, 1996