当前课程知识点:数据结构(上) > 第二章 向量(上) > (d2)有序向量:二分查找 > 02D2-4 原理
我们来看二分查找的第一个版本
这个版本只是为了说明原理
从严格的意义上讲,它还不能完全地
符合我们刚才的语义要求
但是不要紧,我们稍候就会对它进行改进
这个算法的原理是
我们此前介绍过的减而治之
也就是说,将一个比较大的问题
在一个相对大的区间内进行查找
转化为一个实质上更小的问题
确切地讲,在这里
我们将在lo和hi确定的这个区间内
考察它的某一个点
我们称它是mi
这样的任何一个点
都可以将整个的向量分为三个部分
mi左侧的那部分
右侧的那部分
还有mi自己本身
所以如果用式子表达出来
应该就是这样三部分
那么接下来呢
通过最多两次比较
就可以进一步地将这个问题转化为更小的问题
这种比较无非三种情况
如果目标比当前的这个mi的数值
比如是x要小
我们就转向左侧这个子区间
如果比它要大
那么我们就转向右侧这个子区间
因为无论是这两种情况的任何一种情况
确实我们忽略掉的那些部分
比如说对这种情况来说,忽略的是右边
对这种情况来说,忽略的是左边
都是确实可以忽略掉的
而中间的一种状态,也就是说
如果恰好x就是等于mi
这是再好不过的了
因为这就是命中
我们就随即在这个位置上直接返回
当然,有多个解的情况怎么返回
这是我们稍后再来解决的
这里只是给出了个一般的情况
为了使得整体的时间效率更好
我们当然希望不要出现不平衡的情况
所以这里我们采用的一种简单的策略
就是将这个mi取作
lo和hi之间的中点
这样虽然不见得
每次都能够碰到最好的情况
但是至少能保证情况不会很糟
确切地讲,每一次减而治之后
问题的规模都至多是原来的一半
或者反过来说,至少有一半会被剔除掉
-选课之前
--写在选课之前
--宣传片
-考核方式
--考核方式
-OJ系统说明
--关于OJ
--1-注册与登录
--2-界面与选课
--3-提交测试
-关于课程教材与讲义
--课程教材与讲义
-关于讨论区
--关于讨论区
-微信平台
--html
-PA晋级申请
--PA晋级
-(a)计算
--演示
--(a)计算--作业
-(b)计算模型
-(b)计算模型--作业
-(c)大O记号
-(c)大O记号--作业
-(d)算法分析
-(d)算法分析--作业
-(e)迭代与递归
-(e)迭代与递归--作业
-(xc)动态规划
-- 演示
-(xc)动态规划--作业
-本章测验--作业
-(a)接口与实现
--02A-5 复制
-(a)接口与实现--作业
-(b)可扩充向量
-(b)可扩充向量--作业
-(c)无序向量
--02C-1 概述
--02C-3 插入
--02C-6 查找
--02C-8 遍历
-(c)无序向量--作业
-(d1)有序向量:唯一化
-(d1)有序向量:唯一化--作业
-(d2)有序向量:二分查找
-(d2)有序向量:二分查找--作业
-(d3)有序向量:Fibonacci查找
-(d3)有序向量:Fibonacci查找--作业
-(d4)有序向量:二分查找(改进)
-(d4)有序向量:二分查找(改进)--作业
-(d5)有序向量:插值查找
-第二章 向量(下)--(d5)有序向量:插值查找
-(e)起泡排序
--02E-2 改进
--02E-3 反例
-(e)起泡排序--作业
-(f)归并排序
-(f)归并排序--作业
-本章测验--作业
-(a)接口与实现
--03A-4 实现
-(a)接口与实现--作业
-(b)无序列表
--03B-2 查找
-(b)无序列表--作业
-(c)有序列表
--03C-3 查找
-(c)有序列表--作业
-(d)选择排序
--03D-1 构思
--03D-2 实例
--03D-3 实现
--03D-4 推敲
--03D-6 性能
-(d)选择排序--作业
-(e)插入排序
--03E-1 经验
--03E-2 构思
--03E-3 对比
--03E-4 实例
--03E-5 实现
-(e)插入排序--作业
-(xd)习题辅导:LightHouse
-本章测验--作业
- (a)栈接口与实现
--04A-1 栈
--04A-2 实例
--04A-3 实现
- (a)栈接口与实现--作业
-(c1)栈应用:进制转换
-第四章 栈与队列--(c1)栈应用:进制转换
-(c2)栈应用:括号匹配
-(c2)栈应用:括号匹配--作业
-(c3)栈应用:栈混洗
-第四章 栈与队列--(c3)栈应用:栈混洗
-(c4)栈应用:中缀表达式求值
-(c4)栈应用:中缀表达式求值--作业
-(c5)栈应用:逆波兰表达式
-第四章 栈与队列--(c5)栈应用:逆波兰表达式
-(d)队列接口与实现
--04D-1 接口
--04D-2 实例
--04D-3 实现
-第四章 栈与队列--本章测验
-(a)树
--05A-1 动机
--05A-2 应用
-(a)树--作业
-(b)树的表示
--05B-2 父亲
--05B-3 孩子
-第五章 二叉树--(b)树的表示
-(c)二叉树
-(c)二叉树--作业
-(d)二叉树实现
-(d)二叉树实现--作业
-(e1)先序遍历
-(e1)先序遍历--作业
-(e2)中序遍历
-第五章 二叉树--(e2)中序遍历
-(e4)层次遍历
-第五章 二叉树--(e4)层次遍历
-(e5)重构
-(e5)重构--作业
-本章测验--作业
-(a)概述
-(a)概述--作业
-(b1)邻接矩阵
-(b1)邻接矩阵--作业
-(c)广度优先搜索
--06C-2 策略
--06C-3 实现
--06C-5 实例
-(c)广度优先搜索--作业
-(d)深度优先搜索
--06D-1 算法
--06D-2 框架
--06D-3 细节
-(d)深度优先搜索--作业
-第六章 图--本章测验