버스타고 가다가 머릿속으로만 생각해본건데 틀린거 있으면 지적좀
일단 아이디어의 가장 기본은
사이즈가 n인 배열을 정리하는 시간 복잡도 (대충 여기선 O(n^2)를 씀, 뭘 써도 결과는 같을듯?)를 계산할때
n을 통째로 정렬하는 것 보다 반으로 나눠서 하는게 더 빠르다. 임
n이 충분히 크고 n을 반으로 나눠서 정렬하면
[ n^2 > n^2/4 + n^2/4 + n (이건 이미 정렬된 2/n 사이즈의 배열 두개를 합치는데 필요한 시간복잡도== 2/n + 2/n)]
이런 방법으로 생각해보면 사이즈를 반씩 쪼갠 놈들도 위에랑 똑같이 반으로 쪼개서 계산할 수 있음
이런식으로 계속 반으로 나누다 보면 결국 원소가 하나만 남게 되고 정렬을 위해 하나씩 분리된 원소들을 다시 합쳐나가는
정렬을 진행하게 됨 이때 트리를 그려보면 리프노드 쪽에선 하나씩 합쳐지고 바로 위는 2개씩 그 위는 4개씩 .. 으로 원래 사이즈 n까지 올라가게 되는데
(물론 사이즈가 2^n 으로 표시되지 않을때는 꼭 2개 4개 가 딱 맞게 올라가는건 아님ㅁ)
매 스테이지마다 총 사이즈가 n인 이미 정렬된 배열들을 합치는 계산이 진행되고 트리의 사이즈는 log_2(n) 이므로
비교정렬의 하한은 O(n*log_2(n))
혹시 어디 잘못생각한 부분 있나요??
트리의 사이즈는 ==> 트리의 높이는
마즘 ㅇㅇ logn이 반으로 나누는 거라는 직관만 생겼어도 훌륭한듯. 근데 보통 학부 알고리즘 수업때 이거 한번씩들 증명해보지 않나
cc// 음..했나 안했나 기억이 안남;;ㅋ 알고리즘 수업 들은지 너무 오래되서..아니면 졸았을지도..
이거 증명은 원소를 나열할수 맀는 경우의 수를 트리형태로 펼치고 나서 트리의 높이가 log라는 점을 이용하여 증명한다 이건 매우 유명한 방법이므로 반드시 뇌에 새겨놓도록 하여라 - DCW
니말처럼 절반으로 나눌수 있기때문이라기 보다는 비교기반 원소 나열할수 있는 경우의 수는 n! 개인데 트리형태로 펼치면 그 높이만큼만 비교가 되기때문에 log n! 번 비교가 되고 그게 n log n 이랑 점근적으로 같다는 사실만 증명하면 된다 - DCW