khndhkx123   3년 전

안녕하세요.. 우선 그냥 드리는 질문이라 죄송합니다 ㅠㅠ..

BFS 탐색시 탐색했었던 Node의 경우 -> 2차탐색 허용 ( 2차탐색은 가중치가 최소인 경우 값만 갱신허용함)

이렇게 탐색을 한다면 항상 시작점 ~ 각 Node 간 최단거리(가중치)를 유지할 수 있고(거리 배열에 저장)

그렇다면 다익스트라 알고리즘이 되는게 아닌가요?

아니라면 다익스트라와 어떤 부분에서 근본적으로 다를까요?

매번 그렇게 푸는데 결국 다익스트라로 푼 경우랑 답이 달라서요...

그래도 이론상 맞다고 한다면 코드상 문제겠거니.. 하고 질문 드립니다 !!

pichulia   3년 전

값이 갱신된 뒤에 그 갱신된 결과값을 토대로 다른 노드들도 최단거리 값이 갱신되야하므로 2차탐색 을 갱신된 노드부터 다시 '시작'을 해야합니다.

적혀있는 글만 봐선 최단거리가 갱신된 노드부터 탐색을 다시 시작하지 않고 그냥 값만 갱신해놓고 땡 인거같은데... 이렇게 하면 최단거리가 안나옵니다.

다익스트라의 경우 최단거리가 갱신이 절대 안될 노드를 찾아서 걔부터 탐색을 시작하는 알고리즘이라서, 불필요한 재탐색이 안생깁니다.

khndhkx123   3년 전

@pichulia 답변 감사합니다.. 대략적인 수도코드 업로드 전이라 더 애매모호 했네요.. 최단거리가 갱신된 노드로부터 재탐색 합니다.. 수도코드 처럼 4에서 갈수있는 모든 Node 를 재탐색 하게 되죠. 이 과정에서 제가 언급한 재탐색(최소값 갱신만 허용) 이 가능한것입니다.

ckdgus2482   3년 전

다익스트라는 발견 순서와 방문 순서가 다르며, 어떤 노드에 처음 방문할 때는 그 경로가 최단 경로임이 보장됩니다.

코드를 안올려주셔서 말씀하신 방법이 구체적으로 어떻게 구현되어있는지는 모르겠으나 그래프 상에 존재하는 모든 경로를 완전탐색 한다면 답은 맞겠지만 말도 안되게 비효율 적입니다.
답이 틀리다는 것은 모든 경로를 완전탐색 하는 것은 아니라는 얘기인데 좀 더 구체적으로 로직을 알려주셔야 문제점을 파악할 수 있을 것 같습니다.

댓글을 작성하려면 로그인해야 합니다.