時間複雜度
分割(divide)
數列長度為n,在第k次分割資料量為多少?每次分割資料量都減少一半
1. 第1次分割,資料量n/2
2. 第2次分割,資料量n/4
3. ...
4. 第k次分割,資料量n/2^k=1
上述資料分割成一個遞迴樹結構。
n/2^k=1 => n=2^k => logn=k
所以進行k次分割就是logn
合併(conquer)
遞迴樹的每層合併都要遍歷所有元素,時間複雜度O(n)
合併排序法的總時間複雜度
分割階段需進行logn次分割,每次分割都需要O(n)時間來做合併。故總時間複雜度為O(logn)* O(n)= O(nlogn)
空間複雜度
額外空間
在遞迴樹中的每層合併操作都需要O(n)空間來存合併結果。
遞迴空間
合併排序遞迴深度為logn,所以會有O(logn)層函數呼叫。
故總空間複雜度為O(n)
沒有留言:
張貼留言
寫下幸福點子吧!