数据结构复习之六(查找)

(一)基本概念

查找表 用于查找的数据集合称

(二)顺序查找

无序表 平均查找长度ASL=(n+1)/2

有序表 如果查到某个值大于待查找值, 则后面可以不用找了 比一般顺序查找的算法要好一些 

(三)分块查找

又称为索引顺序查找: 首先把查找表分块, 然后建立一个索引表包含每一块的第一个元素 

(四)折半查找

只适用于有序的顺序表

设查找表升序排列, 首先将中间的元素与待查找元素比较, 如果相等查找结束, 否则利用中间位置的记录将表分为左右两个, 如果待查找元素比中间元素小, 就进一步查找左边子表 否则查找右边子表

(五)B树及其基本操作 B树动画视频 参考博客 (先看动画再看博客中的插入和删除的步骤)

B树出现的原因:解决二叉平衡树孩子太少、查找一个数字层次太深,频繁读取硬盘的问题。把二叉改成多叉了。

又称为多路平衡查找树

(到最后也没研究明白B树和B+树的具体操作 只能详见参考博客了)

B+树的与B树的主要差异:(1)如果一个结点有n个关键字,那么B树有n+1个子树,而B+树有n个子树

(2)B+树的叶节点不包含信息,仅起到索引作用   // 个人看法: 感觉B+树类似于内存管理的多级页表

B+树的查找过程:通常在B+树中有两个头指针,一个指向根节点,一个指向最小值。因此可以对B+树进行两种查找运算,一种从最小关键字开始顺序查找,另一种,从根节点开始进行多路查找。

(六)散列表

哈希函数:一个把关键字映射成该关键字对应地址的函数

散列表:根据关键字进行访问的数据结构。散列建立了关键字和地址之间的直接映射关系

散列函数的构造方法

①直接定址法 H(key)=a*key+b 特点:空位较多, 适用于连续情况

②除留取余法 H(key)=key%p 关键是选好p,减少冲突

③数字分析法 比如十进制数 0-9在各位出现的频率不一定相同 应该选取数码分布较为均匀的若干位作为散列地址

④平方取中法 将关键字取平方然后取中间几位作为散列地址. 这样得到的散列地址关键字与每一位都有关系, 散列分布比较均匀

⑤折叠法 关键字位数很多, 则可以将位数分成相同的几部分, 然后将这几部分叠加起来

处理冲突的方法

①开放定址法(允许空闲地址向非同义词开放) 线性探测法 平方探测法 再散列法 伪随机序列法

②拉链法

(七)字符串模式匹配

好像看懂了 链接 链接2(视频)

针对模式串, 预先定义一个数组, 存放从1开始串和从某元素开始的串的最长相等长度(注: 这是我瞎编的, 其实应该找每个位置找到的最长公共前缀). 



比如现在的状态i和j所指的数字不一致了, 就把下面那个串右移. 从第2个数开始测试 发现从2开始的子串与从1开始的相同子串太短了无法满足需求.

(八)查找算法的分析与应用


猜你喜欢

转载自blog.csdn.net/u010099177/article/details/80761889