인프런 커뮤니티 질문&답변

오원재님의 프로필 이미지
오원재

작성한 질문수

10주완성 C++ 코딩테스트 | 알고리즘 코딩테스트

1주차 개념 #5-1. 문제로 연습하는 시간복잡도 Q3

1주차 문제로 연습하는 시간복잡도 Q3

작성

·

416

0

1주차 문제로 연습하는 시간복잡도 Q3

여기서 배열의 반씩 재귀호출하는 부분이 merge sort에서 반씩 나눴던 부분이랑 동일하다고 생각되는데,

왜 머지소트에선 해당 부분이 logN이 나오고 여기선 2n-1이 나오는건가요?

답변 2

0

큰돌님의 프로필 이미지
큰돌
지식공유자

안녕하세요 원재님 ㅎㅎ

저게 반을 나눴다고 해서 무조건 mergesort와 같은 시간복잡도를 갖는게 아닙니다. mergesort같은 경우 merge 부분도 신경써야 하는 부분이 다르며

mergesort의 시간복잡도 증명은 다음과 같이 증명할 수 있습니다.

이해가 쉽도록 제가 한번 증명해봤습니다.

image

트리의 높이도 logN이며 해당 레벨에서 수행되는 연산의 합이 N이기 때문에 n* logn이 됩니다.

 

머지소트에서 logn나온단건 단순 함수호출 카운트가 아니라 트리의 레벨 개수에 해당하는것 같고

>> 네 레벨의 갯수 맞습니다.

근데 각 레벨 단위에서 보면 결국 n번의 탐색을 거쳐 병합을 진행하니까?? 합쳐서 nlogN의 시간복잡도를 갖는거고.

>> 네 맞습니다.

 

감사합니다.

0

오원재님의 프로필 이미지
오원재
질문자

머지소트에서 logn나온단건 단순 함수호출 카운트가 아니라 트리의 레벨 개수에 해당하는것 같고, 근데 각 레벨 단위에서 보면 결국 n번의 탐색을 거쳐 병합을 진행하니까?? 합쳐서 nlogN의 시간복잡도를 갖는거고..

혹시 제가 생각한게 맞나요?

오원재님의 프로필 이미지
오원재

작성한 질문수

질문하기