查找

顺序查找法
逐个进行比较。时间复杂度 O ( n ) O(n) O(n)

二分查找
使用的前提是:数据连续存储且有序。时间复杂度 O ( l o g n ) O(logn) O(logn)
https://www.nowcoder.com/practice/28d5a9b7fc0b4a078c9a6d59830fb9b9?tpId=49&&tqId=29278&rp=1&ru=/activity/oj&qru=/ta/2016test/question-ranking
牛客网这个题目多了个条件:若该元素出现多次,请返回第一次出现的位置。

class BinarySearch {
public:
    int getPos(vector<int> A, int n, int val) {
        if(n==0) return -1;
        int left = 0, right = n-1;
        int mid;
        int index=-1;
        while(left <= right){
            mid = (left+right)/2;
            if(A[mid]==val){
                index = mid;
                right = mid-1;
            }else if(A[mid]>val){
                right = mid-1;
            }else {
                left = mid+1;
            }
        }
        return index;
    }
};

大规模数据查找
在大规模数据查找中,大量信息存储在外存磁盘中,B-树和B+树是两种常见的高效外存数据结构。

B-树,也称B树,是一种平衡的多路查找树。
一颗m阶的B-树,满足如下性质:
1)每个节点至多有m棵子树
2)根节点至少有两棵子树
3)除根以外的非叶子节点至少有m/2上取整棵子树
4)所有叶子节点都出现在同一层
5)非叶子节点有n个关键字(有序),那么其子树有n+1棵

B-树的查找和二叉搜索树类似,不同的是要先确定待查找记录所在的节点,然后在节点中查找该记录。

对B-树进行查找包含两种操作:1)在B-树中找节点 2)在节点中找关键字
由于B-树通常存储在磁盘上,则前一查找操作是在磁盘上进行的;后一查找操作是在内存中进行的。在磁盘上找到节点后,将节点中的信息读入内存,然后利用顺序查找或二分查找查询关键字。

B-树的插入操作:首先用查找的方法确定要插入的叶子节点,然后看是否需要分裂,提升。

m阶B-树的生成从空树起,逐个插入关键字。

B-树的删除操作:首先找到要删除的关键字所在的节点,如果不在叶子节点,转换为在叶子节点的情况。

B+树,通常用于数据库和文件系统中。在B+树中,对数据的引用指向叶节点,内部节点的关键字只是充当划分子树的分界值。叶节点被链接成一个序列。

一颗m阶的B+树,满足如下性质:
1)每个节点至多有m棵子树
2)根节点至少有两棵子树
3)除根以外的非叶子节点至少有m/2上取整棵子树
4)所有叶子节点都出现在同一层
5)非叶子节点有n个关键字(有序),那么其子树有n棵

通常在B+树上有两个指针,一个是指向根节点,另一个指向关键字最小的叶节点。
在B+树上进行查找和B-树类似,只是在查找时,无论非叶节点上的关键字是否与给定关键字相同,都要继续查找,直到查找到叶子节点。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值