인구 이동 문제 시간복잡도 질문
421
작성한 질문수 29
안녕하세요 강사님.
인구 이동 문제 시간복잡도에 대해서 질문드립니다.
N이 최대 50으로 모든 나라를 탐색한다고 가정하면 2500.
인구이동의 횟수는 최대 2000.
연결 컴포넌트를 구해야하기 때문에 방문 처리를 해주므로,
시간복잡도가 2500 * 2000으로 생각했습니다.
맞을까요?
답변 1
0
안녕하세요 재윤님 ㅎㅎ
네 맞습니다. 정확합니다. 다음 코드 처럼 되는거니까요.
// 2000
while(true){
bool flag =0;
fill(&visited[0][0], &visited[0][0] + 54 * 54, 0);
// 50 * 50
for(int i=0; i<n; i++){
for(int j=0; j<n; j++){다만 2500부분이요. 최악의 경우의 수를 생각해 볼 필요는 있습니다.
자 이중 for문으로 2500번 순회합니다. 이 때 dfs가 작동이 되죠? 최악의 경우의 수 : dfs로 처음에 모든 정점을 간다고 하고 그 다음부터는 visited로 색칠되어 if문에 안걸린다고 해볼게요.
for(int i=0; i<n; i++){
for(int j=0; j<n; j++){
if(!visited[i][j]){그렇게 되면
2500 + 1 + 1 + ...... 가 되어
2500 + 1 * 2499 가 되겠죠?
즉, 약 5000이 됩니다.
아무리 if문으로 걸러서 dfs가 작동이 안된다고 한들. 해당 부분의 로직은 계산에 들어가게 됩니다.
시간복잡도를 따질 때 if continue를 해도 시간복잡도 계산에 들어가는 것을 알려드리기 위해 말씀을 드려봤습니다.
또 질문이 있으시다면 언제든지 질문 부탁드립니다.
또한 강의가 맘에 드셨다면 좋은 수강평과 별점 5점 꾹 부탁드립니다. 제게 큰 힘이 됩니다. :)
감사합니다.
강사 큰돌 올림.
0
안녕하세요 큰돌님!
시간복잡도 관련 비슷한 질문이 이미 있어서 답글로 질문 드립니다!
dfs실행 이후에 for(pair<int,int> b: v) 부분은 시간 복잡도 계산에 포함이 안되는 건가요??
감사합니다!
1
안녕하세요 샌디님 ㅎㅎ
해도 됩니다만 계산하기가 좀 껄끄러워서 빼는게 좋다고 생각합니다.
만약 v가 최악의 경우 2500이 되는데 이 경우에는 단한번 for문 돌리고 -> 종료되는 거라 그 때는 -> dfs자체도 많이 안돌게 되서 -> 전체적인 시간복잡도는 감소하게 되는 것이라서 최악이 어떤 경우인지를 파악하기가 어렵습니다.
감사합니다.
5-B
0
17
2
4 - A
0
33
2
코딩살구클럽 입장이 안됩니다
0
82
2
4-F 경우의 수 질문입니다.
0
35
2
코딩살구클럽 가입이 안됩니다.
0
85
2
살구 클럽에 대한 질문있습ㄴ디ㅏ
0
63
1
교안 158페이지 문의드립니다
0
47
2
코딩살구클럽 관련 건의사항
0
119
1
코살에 19942 다이어트 문제에 N의 범위가 빠져있슴니다
0
45
1
진행 방법 질문드립니다!
0
83
2
2-I) 왜 이 문제가 그래프이론 카테고리에 있는지 잘 모르겠습니다.
0
64
2
2주차 개념#12 트리 순회
0
33
2
백준사이트가 종료된다고 합니다.
0
318
2
백준 서비스 종료
9
953
1
sk 하이닉스 코테 대비
0
388
2
3-G 최댓값 질문
0
54
1
모듈러 연산 값이 10이 아닌 경우도 있지 않나요?
0
84
2
3-I 코드 질문드립니다.
0
66
2
3-N 질문 있습니다.
0
68
2
학습방법
0
105
2
4-H 질문 있습니다 (코드 리뷰)
0
69
2
코딩테스트 어디까지 준비해야 하는지 질문이 있습니다.
0
186
2
2-O 반례가 무엇일지 어떤 부분이 틀렸는지 잘 모르겠습니다.
0
74
2
2주차 개념 #4-2. 인접행렬 질문있습니다.
0
66
2





