1967번 - 트리의 지름
답은 맞게 나오느데 메모리 초과가 납니다.
1. 다익스트라 알고리즘 적용 가능, 단, 메모리를 줄일 방법 생각
2. 다익스트라 알고리즘 적용 불가
둘 중에 고민중입니다 ㅠㅠ 조언 부탁드립니다.
메모리를 줄여도 지금의 로직 자체가 시간 내에 수행될 수 없습니다. 다익스트라 한 번에 O(NlogN)이기 때문에 이를 N번 수행하면 O(N^2logN)이 되고, 이는 2초 내에 수행될 수 있는 연산의 양이 아닙니다.
일반 그래프가 아닌 트리이기 때문에 사용할 수 있는 효율적인 방법이 있으니 잘 생각해 보세요.
답변 감사드립니다!
하나만 더 질문 드리고 싶습니다.
BFS로 구현해서 정답이 나오긴 했습니다만,,
BFS의 경우에 시간복잡도에 걸리지 않는 이유가, queue의 시간복잡도가 O(1)이고 이를 이용한 BFS의 경우 시간복잡도가 N*1로 O(N)이므로, N개의 모든 노드에 BFS를 적용한다고 가정하면, O(N^2)의 시간복잡도를 가지기 때문인 것이 맞나요??
이것이 맞다면, BFS와 다익스트라 각각 어떤 경우에 사용해야하는지를 잘 모르겠습니다..ㅠ 시간복잡도면에서만 보면 BFS가 다익스트랃보다 훨씬 좋아보이는데..
BFS는 모든 간선의 가중치가 동일할 때, 다익스트라는 동일하지 않을 때 사용하면 됩니다.
트리의 경우에는 두 정점을 잇는 경로가 유일하기 때문에 가중치의 유무에 상관 없이 BFS를 해도 되고, 심지어는 BFS가 아니라 DFS를 해도 됩니다. 거리가 '갱신되는' 과정 자체가 없기 때문입니다.
답변 너무나도 감사드립니다!!!
정리하자면,
"그래프일 경우"간선의 가중치가 모두 동일 -> BFS
그렇지 않은 경우 -> 다익스트라
"트리인 경우"
DFS or BFS 인 것이 맞나요??
다시 한번 답변해주셔서 감사드립니다 :)
네 맞습니다.
답변 감사합니다 !
댓글을 작성하려면 로그인해야 합니다.
dudgh9661 3년 전
답은 맞게 나오느데 메모리 초과가 납니다.
1. 다익스트라 알고리즘 적용 가능, 단, 메모리를 줄일 방법 생각
2. 다익스트라 알고리즘 적용 불가
둘 중에 고민중입니다 ㅠㅠ 조언 부탁드립니다.