数据结构(查找)

数据结构(查找)

标签: 数据结构二分查找线性表

2017-05-27 14:49 118人阅读 评论(0) 收藏 举报

分类:

数据结构(4)

作者同类文章X

版权声明:本文为博主原创文章,未经博主允许不得转载。

查找概念:指在某种数据结构中找出满足给定条件的元素。分为内查找和外查找。若查找过程都在内存中进行,被称为内查找;若查找过程中需要访问外存,则称为外查找。

线性表的查找
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;
    }
}
  • 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)删除简单
缺点:需要额外的空间,记录较少不适合

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值