二分法检索

二分法检索是高效的基础检索算法,时间复杂度为O(log n)。Btree、B+tree、AVL树和红黑树是基于二分法的扩展,常见于大数据量的文本搜索和数据库索引。AVL树严格平衡,适用于查找频繁的场景;红黑树近似平衡,更适合插入删除操作。B树和B+树在数据库系统中应用广泛,减少磁盘I/O操作。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

前序

二分法检索时一种常用的搜索算法,是一种非常基础并高效的检索算法,其时间复杂度为O(log n),Btree,B+tree,红黑树等算法是基于二分法拓展的ji检索算法,常用与大数据量下文本的搜索,如数据库(mysql,mongodb)的索引。(后面会大致说一下这几种的区别)

 

code如下:

package com.link;

import org.junit.Test;

/**
 * 二分法检索
 */
public class BinarySearch {

    private final int[] NUM = new int[]{1,4,6,8,10};

    @Test
    public void testSearch(){
        System.out.println(getIndexes(10));
    }

    public int getIndexes(int num){
        return getIndexes(num, NUM);
    }

    public int getIndexes(int num, int[] sortedArr){
        assert sortedArr != null : "array can not be null";
        int low = 0;
        int high = sortedArr.length-1;
        while (low <= high){
            int mid = (low+high)/2;
            if (num == sortedArr[mid]) {
                return mid;
            } else if (num > sortedArr[mid]) {
                low = mid + 1;
            } else {
                high = mid -1;
            }
        }
        return -1;
    }
}

 

AVL,红黑树,Btree,B+tree
1,AVL树:平衡二叉树,一般是用平衡因子差值决定并通过旋转来实现,左右子树树高差不超过1,那么和红黑树比较它是严格的平衡二叉树,平衡条件非常严格(树高差只有1),只要插入或删除不满足上面的条件就要通过旋转来保持平衡。由于旋转是非常耗费时间的。我们可以推出AVL树适合用于插入删除次数比较少,但查找多的情况。

2,红黑树:平衡二叉树,通过对任何一条从根到叶子的简单路径上各个节点的颜色进行约束,确保没有一条路径会比其他路径长2倍,因而是近似平衡的。所以相对于严格要求平衡的AVL树来说,它的旋转保持平衡次数较少。用于搜索时,插入删除次数多的情况下我们就用红黑树来取代AVL。

3,B树,就是二叉树的多路查找树,一般用于数据库系统中,分支多层数少,将关键字索引到相印到节点映射出磁盘地址,大数据量下减少下大量到磁盘IO以及物理寻址到次数。

 


4,B+树是B树的变种树,有n棵子树的节点中含有n个关键字,每个关键字不保存数据,只用来索引,数据都保存在叶子节点。是为文件系统而生的。

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值