分治法(一)

  1. 一般方法
  2. 二分检索
  3. 找最大和最小元素
  4. 归并分类
  5. 快速分类
  6. 选择问题
  7. 斯特拉森矩阵乘法

一、一般方法

在这里插入图片描述
在这里插入图片描述
思想:将整个问题分成若干个小问题之后分而治之

  • 通常情况下,子问题与原问题具有相同的类型
  • 可以反复使用分治策略,直到可以求解子问题为止
  • 适合采用递归过程来表示

重要三步:分(divide)、治(conquer)、合(combine)
如果当前问题的规模足够小直接对其进行处理,否则执行以上三步:
在这里插入图片描述

  • small函数判断p-q+1个是否足够小,当前问题的规模足够小
  • divide函数在实现中一般使用二分法,把p-q这个区间的问题分解成p-m和m+1-q进行求解
  • combine函数将问题的解进行合并然后返回
    在这里插入图片描述
    关于上述的式子对T(n)进行求解得到关于n算法的时间复杂性

二、二分检索

在这里插入图片描述
在这里插入图片描述

二分检索算法的求解原理

n为问题的求解规模,a[]代表在此求解规模中的每一个元素,x代表我现在要求解的元素。k是选择将整个表分成两份的位置,这个位置一般为中间位置。
在这里插入图片描述
算法描述:返回的不是元素,是元素的下标index
在这里插入图片描述
这里判断区间足够小是通过low和high的关系进行的;分治检索的合并步骤在这里没有进行

三、二分检索算法的正确性

在这里插入图片描述
覆盖到了所有的可能情况,针对每种可能情况都有其相应的处理方法。
在这里插入图片描述

四、二分检索算法复杂度分析

在这里插入图片描述
究竟属于哪种情况取决于待检索元素与A中的元素的关系;
在这里插入图片描述
这样的分析过程可以用二元比较树来进行,上例中成功和失败的每种情况的概率看作相等。在这里插入图片描述
检索成功次数就是从根节点到内节点的路径长度+1
检索不成功次数就是对应的路径长度
二元比较树是一棵高度平衡树,因为每一次都是从middle选取的,保证了左右子树的高度之差的绝对值小于等于1
在这里插入图片描述
k为二元比较树的高度,最小为0层,最多为k-1层,所以上面的n是在这样一个范围内。给出了有序表长度和比较次数的关系。

成功检索的平均次数

在这里插入图片描述

二分检索算法改进

在这里插入图片描述
能否改进这种情况,每次只比较一次?
包含两个与两个以上元素才可以进入while循环
在这里插入图片描述
这个算法的复杂度就在于当找到最终的答案节点之后还是得等while循环结束之后才可以进行,而在普通的比较的时候只是每次比较次数都-1但是只是线性的减少实际上还是需要树的深度。
在这里插入图片描述
在这里插入图片描述

以比较为基础检索的时间下界

以比较为基础的检索算法只进行比较操作而不实行其他的运算。
在这里插入图片描述
在研究和分析任何以比较为基础的算法的时候都是以二元比较树的方式进行研究
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

  • 2
    点赞
  • 8
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值