dudgh9661   3년 전

답은 맞게 나오느데 메모리 초과가 납니다. 

1. 다익스트라 알고리즘 적용 가능, 단, 메모리를 줄일 방법 생각

2. 다익스트라 알고리즘 적용 불가


둘 중에 고민중입니다 ㅠㅠ 조언 부탁드립니다.

djm03178   3년 전

메모리를 줄여도 지금의 로직 자체가 시간 내에 수행될 수 없습니다. 다익스트라 한 번에 O(NlogN)이기 때문에 이를 N번 수행하면 O(N^2logN)이 되고, 이는 2초 내에 수행될 수 있는 연산의 양이 아닙니다.

일반 그래프가 아닌 트리이기 때문에 사용할 수 있는 효율적인 방법이 있으니 잘 생각해 보세요.

dudgh9661   3년 전

답변 감사드립니다! 

dudgh9661   3년 전

하나만 더 질문 드리고 싶습니다.

BFS로 구현해서 정답이 나오긴 했습니다만,, 

BFS의 경우에 시간복잡도에 걸리지 않는 이유가, queue의 시간복잡도가 O(1)이고 이를 이용한 BFS의 경우 시간복잡도가 N*1로 O(N)이므로, N개의 모든 노드에 BFS를 적용한다고 가정하면, O(N^2)의 시간복잡도를 가지기 때문인 것이 맞나요??


이것이 맞다면, BFS와 다익스트라 각각 어떤 경우에 사용해야하는지를 잘 모르겠습니다..ㅠ 시간복잡도면에서만 보면 BFS가 다익스트랃보다 훨씬 좋아보이는데.. 

djm03178   3년 전

BFS는 모든 간선의 가중치가 동일할 때, 다익스트라는 동일하지 않을 때 사용하면 됩니다.

djm03178   3년 전

트리의 경우에는 두 정점을 잇는 경로가 유일하기 때문에 가중치의 유무에 상관 없이 BFS를 해도 되고, 심지어는 BFS가 아니라 DFS를 해도 됩니다. 거리가 '갱신되는' 과정 자체가 없기 때문입니다.

dudgh9661   3년 전

답변 너무나도 감사드립니다!!!

정리하자면,

"그래프일 경우"
간선의 가중치가 모두 동일 -> BFS

그렇지 않은 경우 -> 다익스트라

"트리인 경우"

DFS or BFS 인 것이 맞나요??

다시 한번 답변해주셔서 감사드립니다 :)

djm03178   3년 전

네 맞습니다.

dudgh9661   3년 전

답변 감사합니다 !

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