您的位置:首页 > 理论基础 > 数据结构算法

数据结构中的常用查找

2015-09-18 11:46 387 查看
查找:静态查找(顺序查找、折半查找、分块查找)+动态查找(二叉排序树、平衡二叉树、B-树查找)

一、静态查找:不改变原结构的顺序。

1、顺序查找

逐个的与关键字进行比较。若找到相等的,则查找成功;反之,失败。

更适合顺序存储结构和链式存储结构的查找表

2、折半查找

给定的序列是一个有序序列。

把序列分成左中右,左<中<右;

把给定值与中间值进行比较,确定下次查找是在左还是右;

继续,知道成功或者失败。

3、分块查找

顺序查找和二分法查找的折中。先分块,在块中顺序查找。

块间有序,块内无序。

二、动态查找

在查找的同时,会改变表的结构。

比如在查找的过程中同时插入查找表中不存在的数据,或者从查找表中删除已经存在的某个数据

1、二叉排序树

左子树非空,则左子树上所有节点值都小于根节点的值;

右子树非空,则右子树上所有节点值都大于根节点的值;

左右子树本身就是两棵二叉排序树。

2、平衡二叉树

或者一棵空树

或者树中任一节点左右子树深度相差不超过1

三、hash表

散列函数:一个把查找表中的关键字映射成该关键字对应的地址的函数。Hash(key)=Addr.

冲突:散列函数可能会把两个或者两个以上的不同关键字映射到同一地址,即为冲突。这些发生碰撞的不同关键字成为同义词。

散列表:根据关键字而直接进行访问的数据结构。

建立了关键字和存储地址之间的直接映射关系。

四、Hash函数:

hash函数的方法:

1、直接地址法

H(key)=a*key+b;

2、除留余数法

H(key)=key%p;

3、数字分析法

冲突解决发方法:

拉链法

开放地址法(线性探测、平方探测、再散列法)

hash表的查找效率取决于三个隐私:散列函数、处理冲突的方法和填装因子

填装因子即为一个表的填装程度,为表中记录数n/散列表长度m。

越大,则发生冲突的可能性越大
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: