【算法导论系列】分治策略(1) |
您所在的位置:网站首页 › 二分检索的递归算法是什么 › 【算法导论系列】分治策略(1) |
在上一篇文章中,我们已经学习了算法时间复杂度的基本知识。现在我们开始进入真正的算法的介绍——分治策略(divide-and-conquer strategy)。 文章目录 分治与递归的基本概念 二分查找 代入法 递归树法 主方法 参考文献 分治与递归的基本概念分治策略是一种普遍的算法思想,拆开来看,“分”是分开,“治”是治理,“分治”就是“分而治之",把一个问题分成几个小问题求解。分治策略主要包含三个步骤: ①分解:将问题划分成若干个子问题,这些子问题与原问题形式一样,只是规模更小 ②解决:求解子问题 ③合并:由子问题的解得到原问题的解 既然子问题和原问题是同一种形式的,那么如果对于原问题可以用分治策略进行求解,那么子问题应该就也可以应用同样的策略。 这样,求解原问题需要求解子问题,求解子问题又需要求解子子问题,求解子子问题又需要求解子子子问题。这种调用自身不停地向下求解的过程就叫做递归(recursion)。 结果为 而我们不想要无限递归,因为这无法解决我们的问题。我们想要递归有一个尽头,这个尽头叫做递归的边界条件。例如上面那个函数func(),想要让它能够自己停下来,可以变成: void func(int n){ if(n high) return -1; int mid = (low + high) / 2;//这里有人说为了防止low+high溢出,应该使用low+(high-low)/2,但是为了清晰,这里就不这么写了。 if(arr[mid] == x) return mid; if(arr[mid] x),因为只剩这一种情况了 } int main(){ int arr[10] = { 1,2,3,4,5,6,7,8,9,10}; printf("element position: %d", binarySearch(arr,8,0,9)); return 0; }Java的Collections类提供了binarySearch方法。事实上C与C++也有二分查找库函数bsearch。通过二分查找的例子,我们可以发现递归的过程是: |
今日新闻 |
推荐新闻 |
CopyRight 2018-2019 办公设备维修网 版权所有 豫ICP备15022753号-3 |