합병정렬(merge sort) 시간 복잡도 질문드립니다.
글쓴이: clapmin / 작성시간: 수, 2016/10/19 - 3:47오전
합병정렬의 시간 복잡도가 n log n 일고 알고 있는데요.
log n 은 한번에 이해가 가는데, n이 이해가 안되네요.
책에는 예를 들어 크기가 8인 배열을 합병정렬하는데, 이걸 가장 작은 단계 그러니까
배열에 1개의 원소만 들어간 가장 작은 상황에서 두 배열을 합칠 때 최대 2개의 연산이 필요하고 4쌍이므로 2 * 8해서
최대 8번이 발생하고
배열 크기 2인 배열들 합칠 때는 최대 4번씩 * 2 해서 8번이고 ,....
해서 merge가 n복잡도 나온다는데, 전혀 이해가 안갑니다.
배열에 1개의 원소만 들어간 상황에서 크기가 1인 부분 배열 2개를 합병하는데 왜 최대 2개의 비교 연산이 필요한거죠? a 랑 b를 합치는데 '누가더 크냐?' 한번만 하면 되는거 아닌가요ㅑ??
ㅠㅠ 오밤중에 공부하다가 질문드립니다.
Forums:
뭐 사실 엄밀히 따지면
크기가 n인 부분 배열 2개 병합 시 최대 비교 횟수는 2n번이 아니라 2n-1번이죠.
하지만 결국 Big-O notation으로 나타내면 똑같습니다.
길이가 n이라 하면 대충 세어보면
길이가 n이라 하면 대충 세어보면
길이1 * n/2번 = n/2 연산
길이2 * n/4번 = n/2 연산
... = n/2 연산
길이n/2 * 1번 = n/2 연산
다 합쳤을 경우 n/2번의 연산을 몇번 하게 될지 생각해 보시면 됩니다. (답, O(ln n))
댓글 달기