sc2_zest   3년 전

다익스트라 알고리즘 기반으로 코드를 작성해보았는데, 시간초과가 뜹니다. ㅠ

제가 자료들을 저장하고 탐색하는 기법에 무지해서 비효율적인 연산을 했기 때문인가 궁금하여 이렇게 질문을 올리게 되었습니다.


궁금한 것들은

1. vector 자료로 데이터를 push_back으로 추가하는 연산을 사용하였는데 비효율적인가요?

2. 모두를 방문했는지 확인하는 allvisit 함수와 visited 리스트와 최단 거리를 저장하는 min_D 리스트를 이용하여 현재 방문하지 않은 vertex 중 제일 최단거리가 작은 vertex를 찾는 함수를 만들었습니다. 혹시 이 함수들이 비효율적일까요?

3. 꼭짓점 사이의 관계와 가중치를 저장하는 2차원 배열을 만들었습니다. 처음에는 V*V 행렬로 만들었는데 메모리 초과가 떠서 서로 관계있는 꼭짓점에 대한 weight만 저장하는 좀 더 압축된 2차원 행렬을 만들었습니다. 혹시 이것보다 훨씬 효율적인 자료 저장법이 있을까요?

4. 나머지 기본적인 알고리즘은 다익스트라 알고리즘 기반으로 하였기 때문에 문제는 없다고 생각했습니다. ㅠ 그래도 시간초과가 떠서 혹시 더 효율적으로 탐색하는 메소드가 있을까요?

감사합니다

rnjstpgns91   3년 전

https://sungjk.github.io/2016/...

우선순위 큐를 사용하지 않으면 시간복잡도가 O(V^2 + E)라고 합니다. 이 문제에서는 V가 2만이니까 시간초과가 걸린 것 같네요.

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