Backtracking

 

ÀÒ¾î¹ö¸° ¸ñµµ¸®¸¦ ã±âÀ§ÇØ ¹æ±ÝÀü¿¡ ÀÖ¾ú´ø Ä¿ÇǼóÀ» ã¾Æ°£´Ù. ±×°÷¿¡¼­ ãÁö ¸øÇÏ¸é ´Ù½Ã ±×Àü¿¡ ÀÖ¾ú´ø ½Ä´çÀ» ã¾Æ°£´Ù. ..... ¹Ì·Î¿¡¼­ Å»ÃâÇϱâ À§ÇØ ÇϳªÀÇ Åë·Î°¡ ¸·È÷¸é ´Ù½Ã µÇµ¹¾Æ°¡¼­ ´Ù¸¥ Åë·Î¸¦ ½ÃµµÇÏ¿© º¸°í ¶Ç´Ù½Ã ¸·È÷¸é ´Ù½Ã µÇµ¹¾Æ°¡¼­ ...... ÀÌ¿Í°°ÀÌ ÀÏ»ó»ç¿¡¼­ ¿ªÃßÀû (Backtracking) Àº ´Ù¹Ý»ç·Î ÀϾ´Ù.

Backtracking Àº Á¦¾àÁ¶°Ç ¸¸Á· ¹®Á¦ (Constraint Satisfaction Problem) ¿¡¼­ Çظ¦ ã±âÀ§ÇÑ Àü·«ÀÌ´Ù. ±× ¹®Á¦´Â ¿ÏÀüÇÑ (complete) Çظ¦ °¡Áø ¹®Á¦À̱⶧¹®¿¡, ¿ä¼ÒµéÀÇ ¼ø¼­´Â ¹®Á¦µÇÁö ¾Ê´Â´Ù. ±× ¹®Á¦´Â °ªÀÌ ÇÒ´çµÇ¾î¾ß ÇÏ´Â ÀÏ·ÃÀÇ º¯¼öµé·Î ±¸¼ºµÇ¸ç, Ưº°ÇÑ Á¦¾àÁ¶°Ç¿¡ ¹Î°¨ÇÏ´Ù. Backtracking Àº Çظ¦ ¾ò±âÀ§ÇÑ ¸ðµç Á¶ÇÕÀ» ½ÃµµÇغ»´Ù. ±×°ÍÀÇ °­Á¡Àº ¸¹Àº ºÎºÐÀûÀÎ Á¶ÇÕÀ» ½ÃµµÇغ¸Áö ¾Ê¾Æµµ µÈ´Ù´Â °ÍÀ̸ç, ±×·³À¸·Î½á ½ÇÇà½Ã°£À» ºü¸£°Ô ÇÒ ¼ö ÀÖ´Ù. Backtracking Àº combinatorial search ¿Í ¹ÐÁ¢ÇÏ°Ô °ü·ÃµÇ¾î ÀÖ´Ù.

±¸Çö

±âº»ÀûÀ¸·Î, Backtracking ÀÇ »ç»óÀº ¿Ã¹Ù¸¥ ´äÀ» ±¸ÇÒ ¶§±îÁö °¢°¢ÀÇ °¡´É¼ºÀ» ½ÃµµÇÑ´Ù´Â °ÍÀÌ´Ù. Áï Çظ¦ ã±âÀ§ÇÑ ±íÀÌ¿ì¼± Ž»ö (Depth First Search) ÀÌ´Ù. Ž»öµµÁß¿¡, »õ·Î¿î Ž»öÀÌ Á¦´ë·Î ÀÛµ¿ÇÏÁö ¾Ê°ÔµÇ¸é, ´Ù¸¥ »õ·Î¿î Ž»öÀÌ °¡´ÉÇÑ ¼±Åà Æ÷ÀÎÆ® (choice point) ·Î backtrack ÇÏ¿© ´ÙÀ½ÀÇ »õ·Î¿î Ž»öÀ» ½ÃµµÇÏ°Ô µÈ´Ù. »õ·Î¿î Ž»ö ¿µ¿ªÀÌ °í°¥µÇ¸é, ÀÌÀüÀÇ ¼±Åà Æ÷ÀÎÆ®·Î µÇµ¹¾Æ¿Í¼­ ´ÙÀ½ÀÇ »õ·Î¿î Ž»öÀ» ½ÃµµÇÏ°Ô µÈ´Ù. ´õ ÀÌ»óÀÇ ¼±Åà Æ÷ÀÎÆ®°¡ Á¸ÀçÇÏÁö ¾Ê°ÔµÇ¸é, Ž»öÀº ½ÇÆзΠ³¡³­´Ù.

Backtracking Àº º¸Åë °¢°¢ÀÇ instance °¡ ÇϳªÀÌ»óÀÇ º¯¼ö¸¦ °¡Áö°í ¸ðµç ÀÌ¿ë°¡´ÉÇÑ °ªÀ» ±× º¯¼ö¿¡ »õ·Ó°Ô ÇÒ´çÇÏ´Â Àç±ÍÇÔ¼ö (recursive function) ÇüŸ¦ °¡Áö¸ç, °è¼ÓµÇ´Â Àç±ÍÈ£Ãâ°ú ÀÏÄ¡ÇÏ´Â (consistent) °ªÀ» À¯ÁöÇÑ´Ù.

Backtracking Àº ±íÀÌ¿ì¼± Ž»ö (Depth First Search) ¿Í À¯»çÇÏÁö¸¸ °ø°£À» ´ú »ç¿ëÇϸç, µü ÇÑ °³ÀÇ ÃÖ½ÅÀÇ ÇØ (solution)¸¦ À¯ÁöÇϸç, ¾÷µ¥ÀÌÆ®ÇÑ´Ù.

Ž»ö¼Óµµ¸¦ ºü¸£°Ô ÇϱâÀ§Çؼ­, Àç±ÍÈ£Ãâ (recursive call) ÇϱâÀü¿¡ °ªÀÌ ¼±ÅÃµÉ ¶§, ±× ¾Ë°í¸®ÁòÀº ÇÒ´çµÇÁö ¾ÊÀº ¿µ¿ª°ú ´ÙÅõÁö ¸øÇϵµ·Ï ±× °ªÀ» Á¦°ÅÇϵ簡 (Àü¹æÇâ üũ (forward checking)), ÀÌ »õ·ÎÀÌ ÇÒ´çµÈ °ªÀÌ ¾î¶² ´Ù¸¥ °ªµéÀ» ¹èÁ¦ÇÏ´ÂÁö¸¦ º¸±âÀ§ÇØ ¸ðµç Á¦¾àÁ¶°ÇÀ» üũÇÑ´Ù (Á¦¾àÁ¶°Ç ÀüÆÄ (constraint propagation)).  

ÈÞ¸®½ºÆ½

ÈçÈ÷ ÈÞ¸®½ºÆ½ (Heuristic) Àº ¾î¶² °úÁ¤À» ºü¸£°Ô ¸¸µç´Ù. º¯¼öµéÀº ¾î¶² ¼ø¼­·Îµµ ó¸®µÉ ¼ö Àֱ⠶§¹®¿¡, ÈÞ¸®½ºÆ½Àº ÀϹÝÀûÀ¸·Î, °¡Àå Á¦¾àÀûÀÎ °Í (¿¹¸¦µé¸é °ª¿¡ ´ëÇØ °¡Àå ÀûÀº ¿É¼ÇÀ» °¡Áø °Í) À» Ž»öÆ®¸®¿¡¼­´Â ÀÏÂï °¡ÁöÄ¡±â (prune) Çϱ⠶§¹®¿¡, ±×·¯ÇÑ °ÍÀ» ¸ÕÀú ó¸®ÇÏ´Â °ÍÀÌ ÀÌÄ¡¿¡ ¸Â´Ù (¾ËÆĺ£Å¸ °¡ÁöÄ¡±â (Alpha-Beta Pruning)). ¾î¶² °ªÀ» ÇÒ´çÇÒ °ÍÀΰ¡¸¦ ¼±ÅÃÇÒ ¶§, ´ëºÎºÐÀÇ °æ¿ì ¾î¶² °ªÀÌ ÃÖ¼Ò °¹¼öÀÇ ¹Ì·¡ÀÇ °ªµéÀ» Á¦¾àÇÏ´Â Áö¸¦ º¸±âÀ§ÇØ forward checking ÀÇ ÇüŸ¦ »ç¿ëÇÑ´Ù. ÀÌ°Í¿¡ ±ò·ÁÀִ öÇÐÀº, Çظ¦ ´õ»¡¸® ¾òÀ»°Í °°Àº °ªÀ» ¼±ÅÃÇÑ´Ù´Â °ÍÀÌ´Ù.

¼¶¼¼ÇÑ backtracking Àº °¡²û bounding function À» »ç¿ëÇÑ´Ù. Çظ¦ ¾ò´Â°ÍÀÌ °¡´ÉÇÑÁö¸¦ üũÇϱâ À§ÇØ, °Ë»çµÇ´Â ¹®Á¦¿¡ Ưº°ÇÏ°Ô ¸¸µé¾î, ¸ðµç ÇÒ´ç ´Ü°è¿¡¼­ ÀÛµ¿ÇÑ´Ù. ±×·¡¼­ °£´ÜÇÑ Å×½ºÆ®¸¦ ÅëÇØ È®½ÇÈ÷ ½ÇÆÐÇÒ °Í °°Àº ¸¹Àº ºÎºÐÀûÀÎ Çظ¦ Áï½Ã ã¾Æ³»¾î Ž»ö´ë»óÀÇ 99 % ±îÁö À߶󳾼ö ÀÖ´Ù. ±×°ÍÀº °¡²û Áö¼öÀû Ž»ö°ø°£ (exponential search space) ÀÎ ¸ðµç ´Ü°è¿¡¼­ ÀÛµ¿Çϱ⠶§¹®¿¡, bounding function Àº °è»êÇϱⰡ ¾ÆÁÖ ½¬¿ö¾ßÇÒ ÇÊ¿ä°¡ ÀÖ´Ù. ±×·¸Áö ¾ÊÀ¸¸é ±× ¾Ë°í¸®ÁòÀº ´õ ¼øźÇÏÁö ¾ÊÀ» °ÍÀÌ´Ù. ÈǸ¢ÇÑ bounding function Àº ¹®Á¦ÀÇ ±ÔÄ¢µéÀ» ´Ù¼Ò À¯¿¬ÇÏ°Ô ÇÏ¿© ¾ò¾îÁö´Â ´Ù¸¥ ÈÞ¸®½ºÆ½ ÇÔ¼ö (heuristic function) °ú À¯»çÇÑ ¹æ¹ýÀ¸·Î ¸¸µé¾îÁø´Ù.

Backtracking ÀÌ constraint programming language ¿¡ »ç¿ëµÉ ¶§, Á¦¾àÁ¶°Ç¿¡ ´ëÇÑ Á¤º¸°¡ ¾÷µ¥ÀÌÆ® µÉ ÇÊ¿ä°¡ ÀÖ´Â ºÎ°¡ÀûÀÎ ¾î·Á¿òÀÌ ÀÖ´Ù. ÀÌ·¯ÇÑ ¾ð¾î¿¡¼­´Â, Prolog ¿¡¼­ ó·³, °£´ÜÇÑ ±íÀÌ¿ì¼± Ž»ö (Depth First Search) Àº Àû´çÇÑ ±¸Çö ±â¼úÀÌ´Ù. BacktrackingÀ» ±¸ÇöÇÒ ¶§, Ưº°ÇÑ º¯¼öÀÇ °ªÀÇ º¯È­¸¦ ±â·ÏÇϱâ À§ÇØ º¯¼öÀÇ ±ËÀû (variable trail)À» À¯ÁöÇÏ´Â °ÍÀÌ º¸ÅëÀÌ´Ù. ½º¸¶Æ®ÇÑ ÇÁ·Î±×·¡¸Ó¶ó¸é ¼±Åà Æ÷ÀÎÆ® (choice point) °¡ ¾øÀ» ¶§´Â µÎ°³ÀÇ ¿¬¼ÓÀûÀÎ º¯È­µé »çÀÌÀÇ variable trail À» ¸¸µå´Â °ÍÀº ÇÇÇÒ°ÍÀÌ´Ù. ¿Ö³ÄÇϸé backtracking Àº ÇϳªÀÇ µ¿ÀÛÀ¸·Î¼­ ¸ðµç º¯È­¸¦ Áö¿ï°ÍÀ̱⠶§¹®ÀÌ´Ù.  

¶Ç´Ù¸¥ º¯ÇüÀº º¯¼ö¿¡ ¸¶Áö¸· º¯È­°¡ ÀÖÀ»¶§ time stamp ¸¦ À¯ÁöÇÏ´Â °ÍÀÌ´Ù. time stamp ´Â ¼±ÅÃÆ÷ÀÎÆ®ÀÇ time stamp ¿Í ºñ±³µÈ´Ù. ¸¸ÀÏ ¼±ÅÃÆ÷ÀÎÆ®°¡ º¯¼öÀÇ time stamp º¸´Ù ´ÊÀº ½Ã°£À» °¡Áö°í ÀÖÀ¸¸é, º¯¼ö´Â ¼±ÅÃÆ÷ÀÎÆ®°¡ ¹ß»ýÇϱâ Àü¿¡ º¯È­µÇ¾ú±â ¶§¹®¿¡, ¼±ÅÃÆ÷ÀÎÆ®·Î backtrack µÉ¶§ ±×°ÍÀº ºÒÇÊ¿äÇÑ º¹±Í (revert) ÀÌ´Ù.  

Backtracking Àº Prolog °°Àº ÇÁ·Î±×·¥ ¾ð¾îÀÇ ±¸Çö¿¡ »ç¿ëµÇ¸ç text parsing °°Àº ¿µ¿ª¿¡µµ »ç¿ëµÈ´Ù. ...... (Wikipedia : Backtracking)

±íÀÌ¿ì¼± Ž»ö (Depth First Search)   Prolog   Á¦¾àÁ¶°Ç ¸¸Á· ¹®Á¦ (Constraint Satisfaction Problem)   ÈÞ¸®½ºÆ½ (Heuristic)   ¾Ë°í¸®Áò (Algorithm)

Backtracking Algorithm : ÀüºÏ´ë ¹Ú¼øö ±³¼ö´Ô µ¿¿µ»ó (¡Ú¡Ú¡Ú)

Backtracking : Visual Prolog ¹®¹ý

¹éÆ®·©Å·¹ý (backtracking) : ¹ÚÁ¤È£