算法整理:查找算法简单整理
来源:互联网 发布:java怎么包装简历 编辑:程序博客网 时间:2024/05/18 02:59
查找算法大致分为四种:顺序查找,二分查找,分块查找,哈希查找。
一、顺序查找】
顺序查找也称为线形查找,从数据结构线形表的一端开始,顺序扫描,依次将扫描到的结点关键字与给定值k相比较,
若相等则表示查找成功;若扫描结束仍没有找到关键字等于k的结点,表示查找失败。
二、二分查找
二分查找要求线形表中的结点按关键字值升序或降序排列,用给定值k先与中间结点的关键字比较,中间结点把线形表
分成两个子表,若相等则查找成功;若不相等,再根据k与该中间结点关键字的比较结果确定下一步查找哪个子表,
这样递归进行,直到查找到或查找结束发现表中没有这样的结点。
二分查找又称折半查找,它是一种效率较高的查找方法。
【二分查找要求】:1.必须采用顺序存储结构2.必须按关键字大小有序排列。【优缺点】折半查找法的优点是比较次数
少,查找速度快,平均性能好;其缺点是要求待查表为有序表,且插入删除困难。因此,折半查找方法适用于不经常
变动而查找频繁的有序列表。
【算法复杂度】假设其数组长度为n,其算法复杂度为o(log(n))
三、分块查找
分块查找也称为索引查找,把线形分成若干块,在每一块中的数据元素的存储顺序是任意的,但要求块与块之间须
按关键字值的大小有序排列,还要建立一个按关键字值递增顺序排列的索引表,索引表中的一项对应线形表中的一块,
索引项包括两个内容:① 键域存放相应块的最大关键字;
② 链域存放指向本块第一个结点的指针。分块查找分两步进行,先确定待查找的结点属于哪一块,然后在块内查找结点。
分块查找又称索引顺序查找,它是顺序查找的一种改进方法。
方法描述:将n个数据元素"按块有序"划分为m块(m ≤ n)。每一块中的结点不必有序,但块与块之间必须
"按块有序";即第1块中任一元素的关键字都必须小于第2块中任一元素的关键字;而第2块中任一元素又都必须小于
第3块中的任一元素,……。
操作步骤:
step1 先选取各块中的最大关键字构成一个索引表;
step2 查找分两个部分:先对索引表进行二分查找或顺序查找,以确定待查记录在哪一块中;然后,在已确定的块
中用顺序法进行查找。
四、哈希表查找
哈希表查找是通过对记录的关键字值进行运算,直接求出结点的地址,是关键字到地址的直接转换方法,不用
反复比较。假设f包含n个结点,Ri为其中某个结点(1≤i≤n),keyi是其关键字值,在keyi与Ri的地址之间建立某种函数关系,
可以通过这个函数把关键字值转换成相应结点的地址,
有:addr(Ri)=H(keyi),addr(Ri)为哈希函数。
- 算法整理:查找算法简单整理
- 二分查找算法整理
- 【整理】七大查找算法
- 算法整理:查找问题
- 【整理】七大查找算法
- 算法整理:排序算法简单整理
- 简单常见算法整理
- 简单算法整理
- 常用算法整理:二分查找
- 常用算法整理:二分查找
- 查找算法整理之索引查找
- 机器学习简单算法整理
- 算法整理
- 算法整理
- 算法整理
- 算法整理
- 算法整理
- 算法整理-二分查找列表最大值
- 网络请求数据
- BZOJ 3574 HNOI 2014 抄卡组 字符串Hash+STL
- 如何探索BI Content? 如何查找DataSource和table的mapping?
- javascript比较两个日期的先后
- LeetCode First Missing Positive
- 算法整理:查找算法简单整理
- CMMI 和敏捷经典概括
- 很有趣的一道编程题,子弹分发问题
- Leetcode Pascal's Triangle
- Cocos2d-x分享一个封装的Sqlite3的DBUtil类
- Android设置虚线、圆角、渐变
- webdriver里的PageFactory.InitElements()
- Ping 1000个包看丢跑率
- explain of mysql