2012-12-30 3 views
3

지금은 무차별 및 비가 중 그래프에서 두 노드 간의 모든 경로를 검색하기 위해 재귀 DFS를 작업하고 있습니다. 경로를 저장하는 동안 노드와 그 인접 노드에서 시작 W 끝 노드와 DFS를] 복적으로 사용합니다. 모든 경로를 찾는 더 효율적인 방법이 있는지 궁금합니다.두 노드 사이의 모든 경로를 찾는 효율적인 알고리즘

+0

를 참조 익스트라의 알고리즘을 적용 할 수 방금 경로의 수를 찾으시겠습니까? 그런 다음 더 빠른 방법이있을 수 있습니다. – irrelephant

+0

숫자에만 관심이 있다면 더 효율적인 알고리즘이있을 수 있습니다. –

+0

@irrelephant 각 경로의 노드에서 일부 작업을 수행하고 싶습니다. 따라서 모든 경로를 찾아서 그 번호를 저장해야합니다. – Ever

답변

3

단순한 경로의 지수가 있습니다. DFS는 기본적으로 모두 0을 작성하므로 시간이 많이 걸리지 만 접근 방식은 정확합니다 (그러나 이것은 알고리즘이 아니라 문제 자체의 일부입니다).

그래프 노드에서 대상 노드가없는 경우이를 제거하여 비트 맵을 최적화 할 수 있습니다. 이러한 노드를 계산하기 전에 불완전한 검색을 효과적으로 줄입니다.

그래프에 사이클이있는 경우 - 무한 수의 경로가있을 수 있음을 유의하십시오 (의 간단한 번호는 경로 임). 무한 루프를 피하고 모든 간단한 경로를 얻으려면 DFS가 경로마다 수정되는 visited 집합을 유지해야합니다 (일단 "발견"하여 노드가 설정을 삽입하면 스택에서 터지면 제거 그것은 집합에서).

+0

감사합니다. 이미 방문한 세트와 무한 루프 문제도 다룹니다. 그러한 코드의 시간 복잡도는 얼마입니까, 저는 그것에 대해 조금 확신하지 못합니까? – Ever

+1

@Ever : 알고리즘은'O (n!)'입니다. 대상에 도달 할 때까지 n-1 노드를 방문하고, 나중에 n-2, n-3 ... 인 클릭을 고려하십시오. 이것은'O ((n-1)!)'에서 혼자 가겠지 만 발견 된 각 경로에서 각 노드를 처리하려면 추가로'n'이 필요합니다. – amit

관련 문제