数据结构(查找)
来源:互联网 发布:淘宝怎么装修店铺视频 编辑:程序博客网 时间:2024/05/18 09:18
查找概念:指在某种数据结构中找出满足给定条件的元素。分为内查找和外查找。若查找过程都在内存中进行,被称为内查找;若查找过程中需要访问外存,则称为外查找。
线性表的查找
1)顺序查找,直接for循环遍历。
2)二分查找
public class Search { public static void main(String[] args) { int[] a={1,2,3,4,5,6,7,8,9}; int x=6; System.out.println(binSearch(a,x)); }//非遍历 public static int binSearch(int[] a,int x){ int low=0; int high=a.length-1; int mid; while (low<=high){ mid=(high+low)/2; if(a[mid]==x){ return mid; }if(a[mid]>x){ high=mid-1; }else { low=mid+1; } } return -1; }}
3)索引查找,(关键字,地址)关键字唯一标识一个节点,地址指向该关键字对应结点的指针,也可以是相对地址。
缺点:为了建立索引表而真加时间和空间的开销
4)分块查找,性能介于顺序查找和二分查找。每一块的大小顺序排列,块内的关键字不一定有序。
2.数表查找
二叉树查找
二叉排序树又称二叉查找树:空树或者满足
(1)左子树,小于根节点(2)右子树,大于根节点(3)左右子树又是二叉排序树
中序遍历的二叉排序树是一个递增的序列。
查找相当于二分查找。
插入,删除和查找的评价时间都为log2n。最坏为n。
平衡二叉树
左右子树的高度最多相差为1.
b-树
b-和b+树都是外部查找的数据结构,数据存放在外存中。
b-多路平衡查找树。b-树中所有节点的孩子节点最大值为b-树的阶。
一颗m阶的b-树是一颗空树,或者满足
(1)树中每个结点至多有m个孩子结点
(2)除根结点外,其他结点至少有m/2个孩子节点。
(3)若根结点不是叶子结点,则根节点至少有两个孩子节点
(4)所有叶子结点在一层
(5)结点结构,开始n表示该结点的关键字有几个。
b+树
(1)每个分支结点至多有m棵子树。
(2)除根节点外,其他每个分支结点至少有m/2棵子树。
(3)根节点或者没有子树,或者至少2棵子树。
(4)有n棵子树的节点有n个关键字。
(5)所有分支结点中,仅包含它的各个子节点中最大关键字及指向子节点的指针。
(6)叶子节点关键字按大小顺序链接。
叶子节点包含全部关键字,所有非叶子节点只是起到索引作用,b-树关键字对应一块存储地址,b-树叶子节点和非叶子节点的关键字不重复。
查找方式:1.最小关键字开始顺序查找。2.b+树的根节点开始进行随机查找。
mysql采用的是b+树索引。
哈希表查找
哈希表又称散列表,目标是使得哈希地址尽可能均匀的分布在n个连续内存单元地址上。
hashMap的冲突,为hashcode冲突。
哈希函数构造方法:
4.1 直接定址法 h(k)=k+c,不可能有冲突。
4.2 除留余数法 h(k)=k mod p (p<=m)
4.3 数字分析法
哈希冲突的解决办法
4.4 开放定址法:以冲突的地址为自变量,通过某种哈希冲突得到新的空闲的哈希地址。
4.4.1 线性探查法 根据函数找到新的地址
4.4.2 平方探查法 平方函数
4.5 拉链法(hashMap 冲突的解决办法)
用单链表把冲突的词链接起来。
优点:(1)简单,无堆积现象,平均查找长度短。
(2)链表记录动态生成,适合造表前无法确定表长的情况。
(3)不会浪费空间
(4)删除简单
缺点:需要额外的空间,记录较少不适合
- [数据结构]查找(一)
- [数据结构]查找(二)
- [数据结构]查找(三)
- [数据结构]查找(四)
- 数据结构(查找)
- 数据结构(Java)--查找
- 数据结构(查找)
- 数据结构(二分查找)
- 【数据结构】折半查找(二分查找)
- 数据结构--查找(静态查找表)
- 数据结构(5查找算法)
- 数据结构(10)之查找
- 数据结构小结(七)查找
- 单词查找树(数据结构)
- 数据结构查找
- 查找 -数据结构
- 数据结构 查找
- 查找 -数据结构
- android studio中kotlin语言生成API文档工具GenerateDokka
- ElasticSearch基础教程
- Servlet 详解
- 【Mapreduce】从代码上解决Output directory already exists错误,避免每次调试都要手动删除输出文件夹
- JavaWeb
- 数据结构(查找)
- Linux_MongoDB 安装笔记
- 自定义dialog
- 自定义ImageView
- 导航栏变为透明
- 编译原理中四种文法语言的基本概念
- 【连载】研究EasyUI系统—Tree组件(事件)
- 使用flex布局解决安卓手机上固定在底部的按钮,在键盘弹起后挡住input输入框的问题
- 正确使用Volatile变量