中科大算法导论第2次课.ppt
《中科大算法导论第2次课.ppt》由会员分享,可在线阅读,更多相关《中科大算法导论第2次课.ppt(17页珍藏版)》请在冰豆网上搜索。
第三章第三章分治法及递归算法的分析方法分治法及递归算法的分析方法3.1分治法分治法(Divide-and-conquer)1.什么是分治法什么是分治法当求解的问题较复杂或规模较大时,不能立刻得到当求解的问题较复杂或规模较大时,不能立刻得到原问题的解,但这些问题本身具有这样的特点,它原问题的解,但这些问题本身具有这样的特点,它可以分解为若干个与原问题性质相类似的子问题,可以分解为若干个与原问题性质相类似的子问题,而这些子问题较简单可方便得到它们的解,因此通而这些子问题较简单可方便得到它们的解,因此通过合并这些子问题的解就可得到原问题的解。
过合并这些子问题的解就可得到原问题的解。
12.应用分治法的三个基本步骤应用分治法的三个基本步骤分解问题分解问题(divide):
把原问题分解为若干个与原问题:
把原问题分解为若干个与原问题性质相类似的子问题性质相类似的子问题求解子问题求解子问题(conquer):
不断分解子问题直到可方便:
不断分解子问题直到可方便求出子问题的解为止求出子问题的解为止合并子问题的解合并子问题的解(combine):
合并子问题的解得到原:
合并子问题的解得到原问题的解问题的解3.归并排序归并排序(MergeSort)思想:
如果能把原待排序的数组分解成若干个待排序的思想:
如果能把原待排序的数组分解成若干个待排序的子数组,而这些子数组可以方便地排好序,并且通过子数组,而这些子数组可以方便地排好序,并且通过合并这些子数组的解将能得到原问题的解,则整个数合并这些子数组的解将能得到原问题的解,则整个数组将排好序。
组将排好序。
2应用分治法解题的三个基本步骤为:
应用分治法解题的三个基本步骤为:
dividedivide:
把把具具有有nn个个元元素素的的数数组组分分解解为为二二个个n/2n/2大大小小的的子数组子数组conquerconquer:
递递归归地地分分解解子子数数组组,直直到到子子数数组组只只包包含含一一个元素为止个元素为止combinecombine:
二二二二合合并并已已排排好好序序的的子子数数组组使使之之成成为为一一个个新新的的排排好好序序的的子子数数组组,重重复复这这样样二二二二合合并并的的过过程程直直到到得到原问题的解得到原问题的解3由分治法三个步骤可方便得到解此问题的算法:
由分治法三个步骤可方便得到解此问题的算法:
Merge-sort(A,p,r)ifp1且且为常数,常数,f(n)为渐进函数函数定理定理4.1Master定理定理对于非于非负递归函数函数T(n)=aT(n/b)+f(n),其中,其中a1,b1且且为常数,常数,f(n)为渐进函数,函数,则T(n)有如下三种有如下三种渐进界界限:
限:
1617