반복적인 심도 우선 검색
Iterative deepening depth-first search학급 | 검색 알고리즘 |
---|---|
data 구조 | 트리, 그래프 |
최악의 경우 성능 | ( ){ O ( ^ { }。서b { b}는 분기 계수, { d는 가장 얕은 솔루션의 깊이입니다. |
최악의 경우 공간의 복잡성 | [1]: 5 |
그래프와 트리 검색 알고리즘 |
---|
최단 경로 |
리스트 |
관련 토픽 |
컴퓨터 과학에서 반복 심도 검색 또는 보다 구체적으로 반복 심도 우선[2] 검색(IDS 또는 IDDFS)은 깊이 우선 검색의 깊이 제한 버전이 목표가 발견될 때까지 깊이 제한을 증가시키면서 반복적으로 실행되는 상태 공간/그래프 검색 전략입니다.IDDFS는 폭 우선 검색과 같이 최적이지만 메모리 사용량이 훨씬 적습니다. 반복할 때마다 깊이 우선 검색과 같은 순서로 검색 트리의 노드를 방문하지만 노드를 처음 방문하는 누적 순서는 폭 [1]우선입니다.
방향 그래프 알고리즘
다음 의사 코드는 유도 그래프에 대해 재귀적인 깊이 제한 DFS(DLS)로 구현된IDDFS를 나타내고 있습니다.IDDFS 의 실장에서는, 이미 방문한 노드를 고려하지 않기 때문에, 무방향 그래프에서는 동작하지 않습니다.
함수 IDDFS(root)는 0에서 0까지의 깊이에 대한 것이며, 나머지 ← DLS(root, depth)가 발견되면 null을 반환하고 나머지 null 함수 DLS(node, depth)가 발견되지 않으면 null을 반환하는 함수 DLS(node, depth)는 깊이 = 0이면 반환(node, true, depth)를 반환하지만 그렇지 않으면 하위 함수가 있을 수 있습니다.depth > 0 、 any_forach ← false foreach child of node do, remaining ← null이면 반환(found, true), any_forach ← true(최소한1개의 노드가 깊이에서 검출되면 IDDFS가 깊어짐)를 반환한다.
목표 노드가 발견되면 DLS는 더 이상 반복하지 않고 재귀 반환을 해제합니다.그렇지 않으면 해당 깊이 수준에서 노드가 하나 이상 존재할 경우 나머지 플래그가 IDDFS를 계속 진행합니다.
트리 깊이 및 목표 멤버십을 사전에 알 수 없는 경우 IDDFS에 대한 반환값으로 2-튜플이 유용합니다.다른 솔루션에서는 대신 sentinel 값을 사용하여 찾을 수 없거나 나머지 수준 결과를 나타낼 수 있습니다.
특성.
IDDFS는 깊이 우선 검색의 공간 효율성과 폭 우선 검색의 완전성(분기 요인이 유한한 경우)을 결합합니다.솔루션이 존재하는 경우 [3]호수가 가장 적은 솔루션 경로를 찾습니다.
반복적인 심층 방문은 여러 번 상태이기 때문에 낭비처럼 보일 수 있지만, 트리에서는 대부분의 노드가 하위 레벨에 있기 때문에 상위 레벨을 여러 [4]번 방문해도 크게 문제가 되지 않습니다.
게임 트리 검색에서 IDDFS의 주요 장점은 초기 검색이 킬러 휴리스틱과 알파 베타 프루닝과 같이 일반적으로 사용되는 휴리스틱을 개선하는 경향이 있기 때문에 최종 깊이 검색에서 다양한 노드의 점수를 보다 정확하게 추정할 수 있으며 검색이 더 나은 순서로 이루어지기 때문에 더 빨리 완료된다는 것이다.r. 예를 들어 알파-베타 가지치기는 최선의 움직임을 [4]먼저 검색하는 경우에 가장 효율적입니다.
두 번째 장점은 알고리즘의 응답성입니다.초기 반복은 dd에 값을 사용하기 때문에 매우 빠르게 실행됩니다.이를 통해 알고리즘은 결과의 초기 지표를 거의 즉시 제공할 수 있으며 d\d가 할수록 개선됩니다.체스 플레이 프로그램 등 인터랙티브한 환경에서 사용하는 경우, 이 기능을 통해 프로그램은 지금까지 완료된 검색에서 발견된 현재 최상의 움직임으로 언제든지 플레이할 수 있습니다.이는 각 단계에서 수행된 작업이 재귀적이기는 하지만 검색의 각 깊이가 상호 작용적으로 더 나은 솔루션 근사치를 생성하는 것으로 표현될 수 있습니다.이것은 중간 결과를 생성하지 않는 기존의 깊이 우선 검색에서는 가능하지 않습니다.
점근 분석
시간의 복잡성
(균형 잡힌) 트리에서 IDDFS의 시간 복잡도는 폭 우선 검색과 같은 으로 나타났습니다. 즉 O ( b) \ O (^ { )[1]: 5 。서 b{ b}는 분기 계수, { d는 목표의 깊이입니다.
증명
반복적인 심층 검색에서는 의 노드를 1회 확장하고 d -를 2회 확장한 후 검색 의 루트까지 확장하여 d+ 1)을 [1]: 5 1회 합니다.따라서 반복적인 심층 검색의 총 확장 수는
서 b d\ b는 d \ d -(\ 은 d -(\ 의 확장 수입니다.d를 b ^{가 주어집니다.
x - ({ x = {b} =로 .그리고 우리는
무한 급수보다 작습니다.
로 수렴됩니다.
- ( -) - ( - ) \ b} ( 1 - ) { } { \ } { ( 1 - ) < \ ( x) <}
즉, 우리는
d ( 1+ x + ++ ( - )d- + ( + ) d b( -) - ( + + 3 x^ {2 + \ + ( + + (
(1−))− 2{\displaystyle(1-x)^{-2}}또는(1− 1b)− 2{\displaystyle \left(1-{\frac{1}{b}}\right)^{-2}이후 d{\displaystyle d}(깊이)의}이 상수에서 독립하여, 만약 b입니다.;1{\displaystyle b> 1}(즉, 만약 그 분기 계수 1보다 큰), depth-first i.는 상영 시간이terative deeping search는O ( d O입니다.
예
b b 및 { d의 경우 숫자는 다음과 같습니다.
모두 깊이부터 d까지 d까지 반복적인 심층 검색은 b 10일 때 폭 1 또는 깊이 검색보다 약 11 노드를 d까지 확장되는 , \ b[5].
분기 계수가 높을수록 반복적으로 확장된 [1]: 6 상태의 오버헤드가 감소하지만 분기 계수가 2인 경우에도 반복적인 심층 검색은 전체 너비 우선 검색의 약 2배밖에 걸리지 않습니다.즉, 반복 심화의 시간 복잡도는 O d { O입니다.
공간의 복잡성
IDDFS의 공간 복잡도는 () { O ( )[1]: 5 。서d { d}는 목표의 깊이입니다.
증명
IDDFS는 어느 시점에서든 깊이 우선 검색에 관여하므로 확장 중인 트리의 분기를 나타내는 노드 스택만 저장하면 됩니다.최적의 길이의 솔루션을 찾기 때문에 이 스택의 최대 깊이는 d이며, 따라서 최대 은 O O(입니다.
일반적으로 검색 공간이 넓고 솔루션의 깊이를 알 [4]수 없는 경우에는 반복 심화가 선호된다.
예
다음 그래프의 경우:
A에서 시작하는 깊이 우선 검색은 표시된 그래프의 왼쪽 가장자리가 오른쪽 가장자리보다 먼저 선택되었다고 가정하고, 검색이 이전에 방문한 노드를 기억하고 반복하지 않는다고 가정하면(이것은 작은 그래프이므로), A, B, D, F, E, C, G 순으로 노드를 방문합니다.이 검색에서 횡단된 가장자리는 그래프 이론에서 중요한 응용 분야를 가진 구조인 Trémaux 트리를 형성합니다.
이전에 방문한 노드를 기억하지 않고 동일한 검색을 실행하면 A, B, D, F, E, A, B, D, F, E 등의 순서로 노드가 방문되고 A, B, D, F, E 사이클에 걸려 C 또는 G에 도달하지 않습니다.
심화를 반복하면 이 루프가 방지되고 위와 같이 왼쪽에서 오른쪽으로 진행된다고 가정하면 다음 깊이의 노드에 도달합니다.
- 0: A
- 1: A, B, C, E
(기존의 깊이 우선 검색에서는 볼 수 없었던 C가 반복 심도화되었습니다.)
- 2: A, B, D, F, C, G, E, F
(C는 아직 표시되지만, 나중에 온 것입니다.또, 다른 패스를 개입시켜 E를 검출해, F에 2회 루프백 합니다).
- 3: A, B, D, F, E, C, G, E, F, B
이 그래프에서는 깊이가 더해질수록 알고리즘이 포기하고 다른 분기를 시도하기 전에 "ABFE"와 "AEFB"의 두 사이클이 길어집니다.
관련 알고리즘
반복 심화와 유사하게, 심도 제한이 아닌 경로 비용 증가 제한과 함께 작동하는 반복 심도 확장 검색이라고 하는 검색 전략이 있습니다.경로 비용이 증가하는 순서대로 노드를 확장하기 때문에 가장 먼저 도달하는 목표는 경로 비용이 가장 저렴한 노드입니다.그러나 반복적인 연장은 반복적인 심화보다 유용성이 떨어지는 상당한 [4]오버헤드를 초래한다.
반복 심화 A*는 A* 알고리즘에서 계산한 값과 유사한 "f" 값을 기반으로 반복 심화 작업을 수행하는 최선의 우선 검색이다.
양방향 IDDFS
IDDFS에는 2개의 검색이 번갈아 이루어집니다.[1]: 6 하나는 소스 노드에서 시작하여 방향 호를 따라 이동하고 다른 하나는 대상 노드에서 시작하여 방향 호를 따라 반대 방향으로 진행됩니다(호 머리 노드에서 방향 호 꼬리 노드로).검색 프로세스는 먼저 소스 노드와 대상 노드가 동일한지 확인한 후 동일한 경우 단일 소스/대상 노드로 구성된 일반 경로를 반환합니다.그렇지 않으면 순방향 검색 프로세스는 소스 노드의 하위 노드( A를 확장하고, 역방향 검색 프로세스는 대상 노드의 노드 B)를 확장하며, A A와 B B가 교차하는지 여부를 합니다.이 경우 최단 경로가 검색됩니다.그렇지 않으면 검색 깊이가 증가하고 동일한 계산이 수행됩니다.
알고리즘의 한 가지 제한은 홀수 호수로 구성된 최단 경로가 검출되지 않는다는 것입니다.최단 의 s 가 있다고 가정합니다 \s , , v , \ .}깊이가 호를 따라 2홉에 이르면 전방 은v\ 로 진행되며 후방 은v \ 에서로 진행됩니다.그림에서는 검색 프런티어가 서로 통과하고 짝수 호로 구성된 최적의 경로가 반환됩니다.이것은 다음 그림에 설명되어 있습니다.
공간의 복잡성은 알고리즘이 순방향 검색 프로세스에서 가장 깊은 노드를 색칠하여 두 검색 프로세스가 만나는 중간 노드의 존재를 탐지합니다.
양방향 IDDFS를 적용할 때 추가로 어려운 점은 소스 노드와 타깃노드가 서로 다른 강하게 연결된 컴포넌트(예를 들어 S 등)에 있는 경우 SS S, T에서 T T로 아크가 없으면 검색이 종료되지 않는다는 점입니다.
시간과 공간의 복잡성
쌍방향 IDDFS의 실행 시간은 다음과 같습니다.
그리고 공간의 복잡성은 다음과 같이 나타납니다.
서n {\ n은 s {\ s 경로 내의 노드 수입니다.반복 심도 우선 탐색의 실행 시간 복잡도는 k k { _ { k=}^{ } b}이므로, 속도 업은 대략적이다.
유사 코드
Build-Path(s, μ, B) 함수는 ← Find-Shortest-Path(s, μ)(릴레이 노드에 대한 경로를 반복적으로 계산함) 반환 π B(역방향 검색 스택 추가)에서 마지막 노드를 제거합니다.
함수 Depth-Limited-Search-Forward(u, δ,, F)는 u do Depth-Limited-Search-Forward(child, δ - - \ \ \ \ \ \ \ function function function function)= 0이면 F ← F { } {u}(노드를 마크) 반환한다.
함수 Depth-Limited-Search-Backward(u, δ,, B, F)는 δ = 0이면 B 앞에 u를 붙이고 F이면 u를 반환한 다음(표시된 노드, 릴레이 노드로 사용) u의 B 반환 늘 포어치 부모(U do μ ← Depth-Limited-Search-Back, Farward)의 헤드 노드를 제거합니다.null을 반환한 후 μ B의 헤드 노드를 제거합니다. null을 반환하십시오.
만약 s함수 Find-Shortest-Path(s, t))t;s>, F, B,Δ ← ∅, ∅, 0영원히니 Depth-Limited-Search-Forward(s, Δ, F)δ)Δ foreach, Δ+ 하면 1<> 돌아오μ ← Depth-Limited-Search-Backward(t, δ, B, F)만약 μ{\displaystyle \neq}null≠ 다음 Build-Path(s, μ, B) 돌아오(중계 노드 찾았어)F은,Δ ←,, δ + 1
레퍼런스
- ^ a b c d e f g KORF, Richard E. (1985). "Depth-first iterative deepening" (PDF).
{{cite journal}}
:Cite 저널 요구 사항journal=
(도움말) - ^ Korf, Richard (1985). "Depth-first Iterative-Deepening: An Optimal Admissible Tree Search". Artificial Intelligence. 27: 97–109. doi:10.1016/0004-3702(85)90084-0. S2CID 10956233.
- ^ David Poole; Alan Mackworth. "3.5.3 Iterative Deepening‣ Chapter 3 Searching for Solutions ‣ Artificial Intelligence: Foundations of Computational Agents, 2nd Edition". artint.info. Retrieved 29 November 2018.
- ^ a b c d Russell, Stuart J.; Norvig, Peter (2003), Artificial Intelligence: A Modern Approach (2nd ed.), Upper Saddle River, New Jersey: Prentice Hall, ISBN 0-13-790395-2
- ^ Russell; Norvig (1994). Artificial Intelligence: A Modern Approach.