数据结构中的常用查找
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。
越大,则发生冲突的可能性越大
一、静态查找:不改变原结构的顺序。
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。
越大,则发生冲突的可能性越大
相关文章推荐
- 数据结构实验二:双向链表
- 数据结构之快速排序
- 数据结构实验二:循环链表
- 数据结构实验二:单链表
- 【数据结构】线性表的链式存储结构--单链表
- 数据结构分类
- 项目4--顺序表应用 问题二
- 第三周 线性表(-)--顺序表 项目四--顺序表的应用 问题一
- 第3周SHH数据结构—【项目1-顺序表的基本运算】
- 第三周 项目3-单链表应用
- 二叉树的性质
- 顺序循环队列的基本操作
- 【项目5 线性表-- 顺序表存储应用】分离元素<之二>
- 【项目5 线性表-- 顺序表存储应用】分离元素<之一>
- 数据结构与算法学习1——算法复杂度分析
- 【数据结构之旅】顺序栈入门操作
- 【数据结构之旅】顺序栈入门操作
- 关于数据结构的学习经验分享 (链表相关的内容)
- 「数据结构」红黑树
- 关于数据结构的学习经验分享 (字符串相关的)