저는 BFS함수로 dirty tiles와 시작점을 포함한 노드들 각각의 거리를 모두 구하고 dirty tiles의 순서를 dfs로 만든 permutation 함수로 구했습니다. DFS함수로 순서가 한 번 정해질 때마다 BFS함수로 미리 구해놓았던 거리를 이용해서 거리의 합을 구한 뒤 min함수로 그중 최소를 구하는 형식입니다.
BFS 시간복잡도를 검색해보니, O(v + e)라고 되어있고 permutation할 때 O(n!)이니 총 시간복잡도가 n! * (v + e)입니다.
최대로 입력이 들어올 경우 dirty tiles의 개수가 10개이고 정점의 개수는 400개, 간선의 개수는 대략 400 * 4 정도 될테니 10! * 2000 = 7,257,600,000 입니다.
보통 1초를 10^8로 잡는다고 알고 있는데 제가 잘못알고 있는건지 아니면 시간복잡도 계산을 잘못한건지 모르겠습니다. 위의 설명에서 어느부분이 잘못되었나요?
rlarudgh2017 1년 전
혹시 몰라서 코드도 같이 올렸는데 일단 밑에 시간복잡도 계산하는것만 봐주세요.
저는 BFS함수로 dirty tiles와 시작점을 포함한 노드들 각각의 거리를 모두 구하고 dirty tiles의 순서를 dfs로 만든 permutation 함수로 구했습니다. DFS함수로 순서가 한 번 정해질 때마다 BFS함수로 미리 구해놓았던 거리를 이용해서 거리의 합을 구한 뒤 min함수로 그중 최소를 구하는 형식입니다.
BFS 시간복잡도를 검색해보니, O(v + e)라고 되어있고 permutation할 때 O(n!)이니 총 시간복잡도가 n! * (v + e)입니다.
최대로 입력이 들어올 경우 dirty tiles의 개수가 10개이고 정점의 개수는 400개, 간선의 개수는 대략 400 * 4 정도 될테니 10! * 2000 = 7,257,600,000 입니다.
보통 1초를 10^8로 잡는다고 알고 있는데 제가 잘못알고 있는건지 아니면 시간복잡도 계산을 잘못한건지 모르겠습니다. 위의 설명에서 어느부분이 잘못되었나요?