分治,即分而治之,是将一个规模为n的问题分解为k个规模较小的子问题,这些子问题互相独立且与原问题相同。递归地解决这些子问题,而后将各子问题的解合并获得原文题的解。其算法设计模式以下:算法
divide-and-conquer(P){编程
if (|P|<=n0)设计模式
adhoc(P);ide
divide P into smaller subinstances P1,P2,...,Pk;函数
for (i=1; i<=k; i++)学习
yi = divide-and-conquer(Pi);设计
return merge(y1,y2,...,yk);递归
在人们大量的实践中,发如今用分治法的时候,使子问题规模大体相同是最好的,,而许多问题中,将一个问题分红大小相等的k个子问题的处理方法(通常状况下k=2)几乎老是比子文体规模不等的好。方法
对分治法深有体会的一次是第一次结对编程那会的第二题。原先老师还没要求时间复杂度为O(log2 n)时,我是直接在main函数里直接写了if进行判断的,而后一堆的判断语句。把时间复杂度扩大到了O(n)。后来就开始思索要怎样将复杂度变小。当时是明确知道要用二分法才能将时间复杂度变小,但还不知道怎么在find函数里添加语句进行判断。用二分法就能够将时间复杂度变为O(log2 n)。后来加上了下面这两个语句。di