博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
查找算法学习--入门总结
阅读量:6584 次
发布时间:2019-06-24

本文共 1254 字,大约阅读时间需要 4 分钟。

hot3.png

一、顺序查找 原理:通过穷举来找集合中某个元素,从第一个开始找,依次检查每个元素,一直到匹配到元素或者找寻到集合结尾未找到。因此最好的情况是需要找到的在第一个 ,最坏的是在最后一个,平均情况就是在中间。

使用环境:对集合中元素情况了解较少,能找到集合下一个元素,元素可以只要能进行比较即可,不要求集合是否有序。对应JAVA语言中的循环遍历。

对顺序查找的优化: 1.查到一个元素之后把他放在首位,(这样默认查到的都是常用的)。2.查到一个元素往前移动一位,这样经过一段时间使用该集合,该集合经常被访问的元素在集合前部分。3,如果不经常被查到的元素 某此被查找的则移动到集合尾部

二、二分查找 原理:首先查找集合中间的元素,再比较中间元素与目标元素的大小,若中间元素小的话那么查找中间元素与尾部元素之间,在这个区域选择中间元素与目标进行对比。依次类推 使用:有序,自然排序的集合。元素需要实现比较大小接口功能。

JAVA例子:public class BinarySearch
>{public boolean serarch (T[]collection , T target){if(target==null){return false;}int low = 0,high=collection.length-1;while(low<=high){int t = (low+high)/2;int cr = target.compareTo(collection[t]);if(cr<0){//目标小于collection[t]high = t-1;}else if(cr>0){//目标大于collection[t]low = t+1;}else{return true;}}return false;}}

三、散列查找 散列查找是依据散列算法进行的查找。 对于一个集合,我先把集合依据hash值,分为几个桶,相同hash的放在相同的桶中。桶中的元素按照链表方式进行存储。查找时首先遍历桶,对比hash值,确定桶位置再 进行元素的对比。针对的是较大数据的查询,并且数据是无序的。对应JAVA中的HashMap HashSet 。

四、二叉树查找 一个父节点,每个节点上有两个子节点,其中左侧子节点小于父节点,右侧大于父节点,依次类推。

对于动态的集合二叉树使用一段时间,经过元素的插入,删除,修改等操作后容易产生二叉树的偏移,也就是二叉树不再是比较对称均衡的。最极端的情况是变成了链表。因此在使用过程中需要对二叉树进行维护,常用高效的维护方案是红黑树 和平衡二叉树。

二叉树查找的基本规律与二分查找是一样的。由于元素在添加到二叉树中时已经进行了节点排序维护,所以查询效率很高。 在JAVA的集合中有TreeSet 和TreeMap 根据二叉树原理的集合。 待学习:二叉树如何遍历???

转载于:https://my.oschina.net/dou2016/blog/712822

你可能感兴趣的文章
给大家推荐一个免费下载名称读写ntfs软件的地方
查看>>
在MySQL数据库建立多对多的数据表关系
查看>>
突然停电或死机导致没保存的文件怎么找回
查看>>
kudu
查看>>
jquery.validate.min.js表单验证使用
查看>>
在JS中捕获console.log的输出
查看>>
Python扫描IP段指定端口是否开放(一次扫描20个B网段没问题)
查看>>
一些常用的WebServices
查看>>
CentOS7使用firewalld打开关闭防火墙与端口
查看>>
maven 添加阿里云maven镜像
查看>>
mac上安装consolas字体
查看>>
对向量、矩阵求导
查看>>
各版本linux下载地址大全
查看>>
CentOS 6.X 关闭不需要的 TTY 方法
查看>>
我的友情链接
查看>>
分区技术学习一
查看>>
Juniper 高级选项
查看>>
编程能力的四种境界
查看>>
编译安装mysql
查看>>
在windows上秒开应用程序
查看>>