分治法

分治法要素

  1. 原问题可以分解为若干个规模较小的子问题。
  2. 子问题相互独立。
  3. 子问题的解可以合并为原问题的解。

分治法的步骤

  1. 分解:将要解决的问题分解为若干个规模较小、相互独立、与原问题形式相同的子问题。
  2. 治理:求解各个子问题。由于各个子问题与原问题形式相同,只是规模较小而已,而当子问题划分的足够小时,就可以用较简单的方法解决。
  3. 合并:按原问题的要求,将子问题的解逐层合并构成原问题的解。

一言以蔽之,分治法就是将一个 难以解决的大问题,分割成一些规模较小的相同问题,以便逐个击破,分而治之。

二分查找

关于二分查找的具体思路和实现就再作介绍了,就简单算一下为什么二分查找的时间复杂度为O(logn),不包括排序步骤。

  1. 当n=1时,需要一次比较,T(n)=O(1)。
  2. 当n>1时,特定元素和中间元素比较,需要O(1)时间,如果比较不成功,则需要在前半部分或后半部分搜索,问题的规模缩小了一半,时间复杂度变成了T(n/2)。有T(n)=T(n/2)+O(1), n>1; T(n)=O(1), n=1。
  3. 当n>1时,可以递推求解如下。
    T(n) = T(n/2) + O(1)
         = T(n/2^2) + 2O(1)
         = T(n/2^3) + 3O(1)
         ......
         = T(n/2^x) + xO(1)

递推最终的规模为1,令n=2^x,则x=logn。

    T(n) = T(1) + logn * O(1)
         = O(1) + logn * O(1)
         = O(logn)

由此可知二分查找的时间复杂度为O(logn)。

  1. 空间复杂度:程序中的变量占用了一些辅助空间,这些辅助空间都是常数级的,因此空间复杂度为O(1)。但是如果采用递归方式实现的话,空间复杂度就是O(logn)。
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • 一、基本概念 在计算机科学中,分治法是一种很重要的算法。字面上的解释是“分而治之”,就是把一个复杂的问题分成两个或...
    扎Zn了老Fe阅读 778评论 0 1
  • 设计思想与策略 分治法的设计思想是:将一个难以直接解决的大问题,分割成一些规模较小的相同问题,以便各个击破,分而治...
    30fd099ab263阅读 1,798评论 0 3
  • 1、分治策略分治法是采用分而治之,逐个解决的策略。孙子兵法曰:凡治众如寡者,分数是也。 采用分治求解的问题必须具有...
    不困于情阅读 734评论 0 0
  • 版本记录 前言 将数据结构和算法比作计算机的基石毫不为过,追求程序的高效是每一个软件工程师的梦想。下面就是我对算法...
    刀客传奇阅读 2,941评论 0 0
  • 如果说身体的扭动,形成了舞蹈,那么词语的扭动,也就形成了作文儿。一则优美的舞蹈,带给人身心的愉悦,那么一篇优美的文...
    秭归秀才9条命儿阅读 269评论 1 2