DFS를 "있는 그대로"사용하면 비가 중 그래프에서 최단 경로를 찾지 못할 것입니다.
그러나 왜 DFS를 조정하여 비가 중 그래프에서 최단 경로를 찾을 수 있도록 하는가? 주제에 관한 모든 텍스트는 단순히 할 수 없다고 명시합니다. 나는 자신을 시도하지 않고 확신하지 못한다.
DFS가 비가 중 그래프에서 최단 경로를 찾을 수있는 수정 사항을 알고 있습니까? 그렇지 않은 경우 알고리즘을 어렵게 만드는 알고리즘은 무엇입니까?
DFS를 "있는 그대로"사용하면 비가 중 그래프에서 최단 경로를 찾지 못할 것입니다.
그러나 왜 DFS를 조정하여 비가 중 그래프에서 최단 경로를 찾을 수 있도록 하는가? 주제에 관한 모든 텍스트는 단순히 할 수 없다고 명시합니다. 나는 자신을 시도하지 않고 확신하지 못한다.
DFS가 비가 중 그래프에서 최단 경로를 찾을 수있는 수정 사항을 알고 있습니까? 그렇지 않은 경우 알고리즘을 어렵게 만드는 알고리즘은 무엇입니까?
답변:
깊이 우선 검색의 유일한 요소는 아동을 조사하는 순서입니다. 일반 버전은 임의의 순서, 즉 자식이 저장된 순서대로 진행됩니다.
내가 할 수있는 유일한 대안 (가장 짧은 길을 향한)은 탐욕스러운 접근 방식이며, 현재 노드에서 작은 노드에서 큰 노드까지의 거리 순서대로 어린이를보고 있습니다. 이 규칙에 대한 반례를 구성하는 것은 쉽습니다.
[ 출처 ]
이제 DFS가 가장 짧은 경로를 찾을 수 있도록 조사 할 다음 자녀를 선택하는 전략이 없다는 증거는 아닙니다.
너비 우선 탐색은 비가 중 그래프에서 최단 경로를 찾는 알고리즘입니다.
DFS에서 비가 중 그래프에서 가장 짧은 경로를 찾는 알고리즘으로 변경하는 간단한 조정이 있습니다. 기본적으로 DFS에서 사용하는 스택을 대기열로 바꿉니다. 그러나 결과 알고리즘을 더 이상 DFS라고하지 않습니다. 대신에 폭 넓은 검색을 구현했을 것입니다.
위의 단락은 올바른 직관을 제공하지만 상황을 약간 단순화합니다. 간단한 스왑으로 광범위한 첫 검색을 구현하는 코드를 작성하는 것은 쉽지만 처음에는 올바른 구현처럼 보이지만 실제로는 그렇지 않은 코드를 작성하는 것도 쉽습니다. BFS와 DFS 에 대한 관련 cs.SE 질문은 여기 에서 찾을 수 있습니다 . 당신은 몇 가지 찾을 수 있습니다 여기에 좋은 의사 코드를.
당신은 할 수 있습니다 !!!
깊이가는 동안 노드를 방문한 것으로 표시하고 돌아 오는 동안 표시를 해제하고 다른 분기가 반복되는 것을 발견하면 돌아옵니다.
대상 노드를 찾은 모든 가능한 검색에 대해 비용 / 경로를 저장하고 그러한 모든 비용 / 경로를 비교 한 후 가장 짧은 경로를 선택하십시오.
이 접근법의 큰 (그리고 큰 의미) 문제는 동일한 노드를 여러 번 방문하여 dfs를 최단 경로 알고리즘에 대한 명백한 나쁜 선택으로 만듭니다.
BFS는 루트에서 모든 가장자리를 확인하고 루트에서 다른 노드까지의 거리를 가능한 한 최소한으로 유지하는 멋진 속성을 가지고 있지만 dfs는 단순히 첫 번째 인접 노드로 점프하여 깊이있게 이동합니다. 최단 경로를 얻기 위해 DFS를 수정할 수는 있지만 시간이 더 복잡한 알고리즘으로 끝나거나 BFS와 동일한 작업을 수행하게됩니다.
IT는 DFS를 사용하여 모서리 수가 최소 인 두 정점 사이의 경로를 찾을 수 있습니다. 우리는 레벨 접근을 적용 할 수 있습니다
당신은 할 수 있습니다
dfs 방식으로 그래프를 탐색하고 확인하십시오.
if(distance[dest] > distance[source]+cost[source_to_destination]){
distance[dest] = distance[source] + cost[source_to_destination]);
}