当前课程知识点:数据结构(上) > 第二章 向量(下) > (d5)有序向量:插值查找 > 02D5-5 综合对比
好 现在到了将插值查找以及其他算法
综合起来进行比对和考量的时候了
我们首先来看一下
刚才插值查找所实现的这种改进
也就是从logn到loglogn
虽然从数学上是一个比较大的改进
但从实际效率来看
却值得商榷
比如 一个向量中的元素
多达2的32次方
也就是我们说的4个G
这样一个量级
这应该已经是不小的一个向量了
它可以表示为2的5次方再对2做一次幂
我们来看 对于即使是这样大的一个n
我们取对数的话 无非是32
而再去取一次对数话
也不过是个5
所以我们说 在通常的情况下
这种算法在实际的应用中
效率的改进 并不是那么明显
反过来 我们说它其实还是有很多缺陷的
比如刚才希望大家
回去所举的那个最坏的情况
它很容易受到一些小的扰动
或者是干扰的“蒙骗”
可能会在局部
花费非常非常多的时间
受到惩罚
而另一值得商榷的地方 就是
这里毕竟不像以前的
二分查找那样只需做加法
也不像Fibonaccian Search那样
只需要做常规的加法和减法
这里从某种意义上讲
需要引入乘法和除法
我们说这种计算
相对而言 成本更高
所以可行的查找算法
也许应该将插值查找
以及此前的那些查找算法
各自的优势综合结合起来
比如说我们可以看到
插值查找更善于
在比较大的一个宏观的范围内
将问题的关注点
尽可能快的缩小到一定的范围
换句话说
它比较擅长于处理那种极大的情况
然后一旦到了比较小的情况
这种容易受到干扰包括蒙骗
尤其是乘法除法这样的一些
我们称之为overhead 额外计算
占得比重就会更大
成为不可忽略的因素
而在这个时候
二分查找的优势就体现出来了
所以我们说 首先应该通过插值查找
将问题的范围缩小到足够小
接下来再转而使用
更加适合于中小规模数据的折半查找算法
以及顺序查找算法
从而得到在实际应用中
更加完美的一个组合
那么这一节的内容就介绍到这
我们关于有序向量的查找
也就此画了一个小小的句号
接下来的两节 我们将讨论
如何将一个无序向量转化为有序向量
从而为我们使用此前所介绍的这些查找算法
提供一个最最基本的条件
保持兴趣 我们下节再见
-选课之前
--写在选课之前
--宣传片
-考核方式
--考核方式
-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)深度优先搜索--作业
-第六章 图--本章测验