Ch 2 Divide and Conquer (各個擊破) Divide and Conquer 將問題切成(Divide)兩個或以上較小的問 題來獲得解答(Conquer) 當中有可能牽涉到合併(Binary search沒 有) 較小的問題通常是原問題的實例 需使用遞迴(recursive) Binary Search 將原陣列分割(Divide)成約一半的大小 判斷x屬於哪個子陣列來決定是否繼續 (Conquer) 由子陣列的解答得到整體的解答.
Download ReportTranscript Ch 2 Divide and Conquer (各個擊破) Divide and Conquer 將問題切成(Divide)兩個或以上較小的問 題來獲得解答(Conquer) 當中有可能牽涉到合併(Binary search沒 有) 較小的問題通常是原問題的實例 需使用遞迴(recursive) Binary Search 將原陣列分割(Divide)成約一半的大小 判斷x屬於哪個子陣列來決定是否繼續 (Conquer) 由子陣列的解答得到整體的解答.
Ch 2 Divide and Conquer (各個擊破) Divide and Conquer 將問題切成(Divide)兩個或以上較小的問 題來獲得解答(Conquer) 當中有可能牽涉到合併(Binary search沒 有) 較小的問題通常是原問題的實例 需使用遞迴(recursive) Binary Search 將原陣列分割(Divide)成約一半的大小 判斷x屬於哪個子陣列來決定是否繼續 (Conquer) 由子陣列的解答得到整體的解答 Binary Search(recursive) 演算法2.1 Binary Search(recursive) W(n)=W(n/2)+1 W(1)=1 如果n為2的乘冪 利用數學歸納法可以證明 W(n)=lgn+1 (p.B-4) 如果n不為2的乘冪 W(n)=lgn+1 分割到最小就可以得到解答 (lgn) 不需要再做合併的動作 合併排序Merge Search 將原陣列分割(Divide)成較小的陣列 將子陣列排序後再合併就可以得到完整 排序的陣列 由子陣列的解答得到整體的解答 合併排序Merge Search P2-10 合併排序Merge Search 演算法p2-9 Mergesort遞迴 Merge合併 合併排序Merge Search p2-12 合併排序Merge Search 演算法p2-11 Merge時間複雜度 先分析合併複雜度 只考慮比較指令時 W(h,m)=h+m-1 MergeSort時間複雜度 W(n)=W(h)+W(m)+(h+m-1) W(n)=2W(n/2)+n-1 W(1)=0 W(n)=nlgn-(n-1) (nlgn) 空間複雜度=2n 使用演算法2.4可以維持空間複雜度= n MergeSort2 & Merge2 演算法2.4 MergeSort2 & Merge2 演算法2.5 Divide and Conquer Skill 分割(Divide)一個較大問題實例成為一個 或多個較小的實例 解出每個較小實例的答案(Conquer),除 非實例已經分割到足夠小,否則使用遞 迴(Recursive)來解 必要的話,將兩個較小實例的解答合併 (Combine)以獲得原始問題的解答 快速排序Quick Search Hoare,1962 利用樞紐值(pivot)切割 排序子陣列 快速排序Quick Search P2-18 快速排序Quick Search P2-19 quicksort 快速排序Quick Search P2-20 partition 快速排序Quick Search P2-21 Partition複雜度 所有情況時間複雜度 計算比較運算 T(n)=n-1 Quick Search時間複雜度 最差情況是碰到一個已經排序好的陣列 T(n)=T(0)+T(n-1)+(n-1) T(0)=0 T(n)=n(n-1)/2 (n2) 不會比交換排序法快 (n2) Quick Search時間複雜度 平均情況時間複雜度