深さ制限探索

深さ制限探索（ふかさせいげんたんさく、）とは、グラフの頂点を探索するアルゴリズムの一種である。深さ優先探索からの派生であり、反復深化深さ優先探索アルゴリズムなどで使う。
概要.
通常の深さ優先探索のように、深さ制限探索も一様な探索を行う。深さ優先探索と異なるのは、探索する深さを制限する点である。制限を越えて探索木を深くしていくことがないため、無限の経路に捉われたり、環状の経路に捉われたりすることがない。従って、深さ制限探索は制限された深さの範囲内で、あらゆるグラフの最適解を求めることができる。
アルゴリズム（木構造の場合）.
木構造ではなく一般のグラフの場合、訪問済みのノードかどうかを管理すべき。ただし、深さ優先探索とは異なり、閉路があっても、無限ループに陥ることはない。また、訪問済みのノードを管理するとメモリ不足に陥る場合は、諦めるか、量を制限するかなどをする。
擬似コード（木構造の場合）.
 function DLS(node, depth)
 if (IS_GOAL(node)) then
 return node
 if (depth > 0) then
 for each (child in EXPAND(node))
 found = DLS(child, depth - 1)
 if (found != NULL) then
 return found
 return NULL
特性.
空間計算量.
深さ制限探索は深さ優先探索の一種であるため、空間計算量は通常の深さ優先探索と同じである。
時間計算量.
深さ制限探索は深さ優先探索の一種であるため、時間計算量は通常の深さ優先探索と同じで O(formula_1) である。ここで、formula_2 は探索するグラフの頂点数、formula_3 は枝の数である。ただし、深さ制限探索はグラフ全体を探索するのではなく、制限された範囲内だけを探索する。
完全性.
深さ制限探索は無限に長い経路を探索することはできないし、環状の経路（閉路）にとらわれることもない。そのため、制限した深さを越えたところにある解を見つけることができないという不完全性がある。ただし、制限をうまく設定すれば、完全に解を求められる。
最適性.
深さ制限探索は最適ではない。深さ優先探索の問題点は依然として残っており、見つけた解が別の経路にある解よりも悪い解という可能性がある。