DFS가 공간 복잡성 을 갖는 것으로 간주되는 이유는 무엇 입니까?


11

따르면 이러한 노트 , DFS는 것으로 간주되는 공간 복잡도, 트리의 분기 인자이며 상태 공간의 모든 경로의 최대 길이이다.O(bm)bm

Wikibook 페이지에서 정보가없는 검색 대해서도 마찬가지입니다 .

이제 DFS 에 관한 Wikipedia 기사 의 "infobox" 는 알고리즘의 공간 복잡성에 대해 다음을 제시합니다.

O(|V|) , 전체 그래프를 반복하지 않고 순회하는 경우 중복 노드를 제거하지 않고 암시 적 그래프에 대해 최장 경로 길이 검색O()

이것은 내가 생각한 DFS의 공간 복잡성, 즉 과 더 유사합니다 . 여기서 은 알고리즘에 의해 도달되는 최대 길이입니다.O(m)m

왜 이런 경우라고 생각합니까?

글쎄, 기본적으로 우리는 현재보고있는 경로의 노드 이외의 다른 노드를 저장할 필요가 없으므로 Wikibook과 내가 언급 한 메모 모두에서 제공 한 분석에서 를 곱할 필요가 없습니다. 에.b

또한, 본 항 에 종이 IDA * 의해 리차드 KORF , DFS의 공간 복잡도는 , 은 "깊이 컷"으로 간주된다.O(d)d

그렇다면 DFS의 올바른 공간 복잡성은 무엇입니까?

구현에 따라 다를 수 있으므로 다른 알려진 구현의 공간 복잡성에 대한 설명을 부탁드립니다.


DFS is considered to […] of the tree깊이를 먼저 통과 한 모든 그래프트리 인 것은 아닙니다 .
greybeard

"여기서 DFS 구현에는 X 비용이 있습니다"와 "DFS는 X 비용이되도록 구현할 수 있습니다"라는 차이점이 있습니다. 따라서 두 번째 종류의 다른 진술에 대해 논쟁하는 것 같습니다. (주 이후 전혀 모순이 없음을 , 경우 전혀 평균 아무것도입니다.)O(bm)O(m)O(bm)
라파엘

@greybeard 그래프에서 깊이 우선 탐색으로 트리가 생성되지 않는 예를 말씀해 주시겠습니까?
nbro

example where a depth-first traversal on a graph would not result in a tree너무 많은 생각을하지 않고 : 파싱. (대기 : 무슨 의미 result in a tree인가요 : ? 질문은 그래프 검색 / 트래버스에 관한 것입니다.)
greybeard

1
@greybeard 지금까지 찾은 모든 정의에 따르면. 노드를 다시 방문하는 정의를 찾으면 그것에 대해 논의 할 수 있습니다.
nbro

답변:


7

정확히 DFS라고하는 것에 따라 다릅니다. 예를 들어 Wikipedia에 설명 된 알고리즘 DFS-iterative를 고려하고 이미 방문한 노드를 추적 할 필요가 없도록 트리에서 실행한다고 가정하십시오. 당신이 완전한에서 실행한다고 가정하자 깊이의 -ary 트리 . 최대 길이의 를 넘는 단어로 트리에서 노드를 식별 할 수 있습니다 . 알고리즘은 다음과 같이 작동합니다.bm[b]m

  1. 루트에서 시작하십시오. 를 스택으로 밉니다 (역순).1,2,,b

  2. 팝 하고 스택에 를 밉니다 .111,12,,1b

  3. 팝 , 를 스택에 밀어 넣습니다 .11111,112,,11b

  4. 팝 하고 를 스택으로 밉니다 .1m11m,1m12,,1m1b

이 시점에서 스택에는

1m,1m12,,1m1b,,112,,11b,12,,1b,2,,b,

총 노드. 스택 크기가 최대화되는 시간의 파인트인지 확인할 수 있습니다.(b1)m+1


2
파인트 타임은 의사를 멀리합니다.
greybeard

3

여기에 두 가지 사항이 있습니다.

  1. 스택에 현재 노드의 모든 자손을 스택에 도입하는 경우 효과적으로 공간 복잡도는 여기서 는 분기 인자이고 는 최대 길이입니다. Yuval Filmus의 답변은 실제로이 경우를 나타냅니다. 그러나 일반적으로 는 보다 훨씬 큽니다 . 또한 슬라이딩 타일 퍼즐과 같은 많은 영역에서 는 상수에 의해 상한 (특정한 경우 4)이므로 DFS는 공간 복잡성이 라고 안전하게 말할 수 있습니다 .O(bd)bddbbO(d)

  2. 그러나, 항상 그런 것은 아닙니다. 예를 들어, 팬케이크 퍼즐에서 분기 계수는 최적 솔루션의 길이에 따라 증가하며 둘 다 비슷한 값을 갖습니다. 여전히 공간 복잡도는 입니다. 이것을 보려면 단순히 노드의 확장 절차를 조정하면됩니다. 현재 노드의 모든 하위 항목을 삽입하는 대신 (Yuval Filmus에서 제안한대로) 순서대로 삽입하십시오. 먼저 첫 번째 자손을 생성하고 깊이 우선 순서대로 진행 한 직후 --- 실제로이 시점에서 다른 모든 자손이 필요하지는 않습니다.O(d). 이 노드로 역 추적 한 경우 해당 하위 항목이 스택에서 제거되었습니다. 그런 다음 두 번째 자손을 생성하고 깊이 우선 순서대로 다시 진행하십시오. 이 노드로 역 추적하는 경우 더 이상 자손이 없을 때까지 세 번째 등을 생성하십시오. 이 방법으로 진행 하면 분기 계수 관계없이 스택에 노드 만있게됩니다 .db

요약하자면, DFS가 공간 복잡성을 가지고 있다고 말하지는 않을 것이며 대신 공간 복잡도는 라고 주장합니다 .O(bd)O(d)

도움이 되었기를 바랍니다,

당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.