常用的查找算法
来源:互联网 发布:地下城与勇士java 编辑:程序博客网 时间:2024/04/30 08:06
记录自己笔试用遇到的常用的查找算法。
1.顺序查找法:这个没什么说的,无非是遍历比较找出关键字
2.折半查找法:建立在数据有序(升序)的基础上,设列表arr长度为n,初始表头为low,表尾为high,中间值用mid表示。k为关键字的值。
1).mid=(low+high)/2
2).当k>arr[mid]时,low = mid+1,并重复1).
当k<arr[mid]时,high = mid -1,并重复1);
当k=arr[mid]时,找到,结束。
直到low>high,还没找到那么说明该关键字不存在。
核心代码实现:
int low = 0; int high = t.length-1;int mid = 0;while(low>high){mid = (low+high)/2;if(k>t[mid]){low = mid+1;}else if(k<t[mid]){high = low+1;}else{return mid } }return -1;
3.分块查找法:又名索引顺序查找法,要求将待查元素均匀地分成块,块间按大小排序,块内不排序,因此需要建立一个块最大(最小)关键字表,称之为索引表。
算法步骤:1).第一步确定查找节点在那个表中的那一块。
2)第二步在确定的块中找到该节点。
4.Hash查找法:又名散列法,利用hash表的结构去查找。此法主要是解决链各个条件。
1):哈希函数的构造(列举常用的)
(1).自身函数:关键字自身作为hash函数,h(k) = k,也可以加上一个常数h(k) = k+c;
(2).除余法:选择一个适当的正整数m,使用关键字对m求余,作为关键字,即h(k) = key%m。
(3).数字分析法:对关键字内部代码的各个码位进行分析,取较为出现次数较为平均的,需要实现知道关键字内部的码位,所以限制极大。
(4).平法区中法:先将关键字取平方,然后取中间几位作为地址,位数可以根据要求的地址范围来确定。
2):冲突处理
(1).线性探测法:当通过hash函数计算的地址有值时,将关键字+1,再去利用hash函数求得地址,重复上述过程,直到地址位置不为空。
(2).溢出区法:(1)方法,可能会造成连锁反应,增大了冲突发生的机会。溢出区办法是,当发生冲突时,将发生冲突的关键字放入溢出区中。(可以形成多级散列)
(3).链地址法:将相同散列地址的节点连接在同一个链表中,从而形成n条链,使用一个数组ht存储各链表的链头指针。
0 0
- 常用的查找算法
- 几个常用的查找算法
- 常用的STL查找算法
- 常用的 STL 查找算法
- 常用的 STL 查找算法
- 常用的STL查找算法
- 常用的STL查找算法
- 【算法】常用的查找算法之二分查找法
- Java实现的常用的查找算法
- 常用的查找与排序算法
- 常用的查找及排序算法
- 常用的高效「查找」算法
- STL常用的查找算法(13)
- java常用的排序和查找算法
- PHP常用的排序和查找算法
- Java中常用的查找算法
- 常用查找算法
- [zt]常用查找算法
- Activity声明周期在不同场景的调用
- Java switch-case 的特殊用法
- poj3259Wormholes【最短路SPFA判断负环】
- pj项目作为契机学习的相关目标,加油
- 【模拟】【CQOI 2007】【bzoj 1258】三角形tri
- 常用的查找算法
- HTML【1】的学习,实用编程+代码
- Binary Tree Right Side View
- HDU 3336 KMP
- 平衡二叉树研究(AVL树)
- Flex中HTTPService与java后台通信
- MVC模式和代理模式
- DesignPattern_Java:SingletonPattern
- 知识扩展----为什么计算机时间要从1970年1月1日开始算起?