上篇博文我重点介绍了八大内部排序,这篇博文(数据结构与算法的最后一课)重点介绍查找,我们依然沿用上篇博文的风格,先简介。再以样例重点解说。
以下我们開始今天的旅行,首先祝你旅行愉快。呵呵。
静态查找
若查找目的是为了查询某个特定的数据是否在表中或检索某个特定数据的各种属性,则此类查找表为静态查找表。
1、顺序查找
基本原理:从表一端開始逐个和keyword进行比較。若找到一个记录和给定值相等,则查找成功,反之失败。
再简单点就是,一个一个的比大小,看看是否相等。
样例:
顺序查找更适合于顺序存储结构和链式存储结构的查找表。顺序查找须要一个个的去比較,效率非常低。
2、折半查找(二分查找)
基本原理:1.把序列分成左中右三部分。左部分小于中间值,右部分大于中间值;
2.把给定值与中间值比較,确定下次查找是在左部分还是右部分。
3.继续上面两步操作,直到成功或失败。
注意:折半查找须要注意给定的序列必须是一个有序序列。
样例:
3、分块查找
基本原理:顺序查找和二分法查找的折中。先分块。在块中顺序查找。
注意:分成的各块内部数据可能无序。各块之间有序(第二个块中的元素都比第一个块中元素都大)。建立了索引表,索引表按keyword有序。
样例:
静态查找表方法的性能分析
对于动态查找的插入和删除不是特别好讲,我们就不在这里讲了,仅仅是简单的介绍一下什么是二叉排序树和平衡二叉树。B_树仅仅做了解。
动态查找
若再查找的过程中同一时候插入查找表中不存在的数据。或从查找表中删除已存在的某个数据,则称此类查找表为动态查找表。
1、二叉排序树
定义:1.若它的左子树非空。则左子树上全部的结点的值均小于根结点的值。
2.若它的右子树非空,则右子树上全部的结点的值均大于根结点的值;
3.左右子树本身就是两棵二叉排序树。
样例:
定义看上去不是特别好理解,事实上特别简单,我们再以样例简单的说一下。
左子树的全部节点:3。1,6,4,7。都小于父节点8。右子树全部节点:10。14,13。都大于父节点。
什么时候都是父节点大于左孩子,小于右孩子比如:8>3,8<10;3>1,3<6。
2、平衡二叉树
定义:1.它或者是一棵空树
2.或者树中任一结点的左右子树深度相差不超过1。
注意:从定义我们可得到:想要一颗树平衡。有三种情况,节点的平衡度要么为了0,要么为1。要么为-1。
(平衡度:节点左子树的高度减去其右子树的高度。)
样例:
上面图在每一个节点上标出了平衡度。全部的节点的平衡度的绝对值都小于等于0或1,所以它是一棵平衡二叉树。
总结
数据结构和算法的内容到今天(5月16日)就算结束了(祝旅行愉快)。因为距离考试非常近了,我们后面的博文就開始介绍软考的大题部分的内容。最近就会推出,敬请期待。
兴许博客的更新列表,敬请期待。
我的软考之路(一)——开篇(已更新)
我的软考之路(二)——J2SE宏观总结(已更新)
我的软考之路(三)——数据结构与算法(1)之线性表(已更新)
我的软考之路(四)——数据结构与算法(2)之树与二叉树(已更新)
我的软考之路(六)——数据结构与算法(4)之八大排序(已更新)