数据结构之 【查找算法】

本文深入探讨了查找算法的两大类型——静态查找与动态查找。静态查找适用于数据集稳定的场景,介绍顺序查找、折半查找、斐波那契查找等算法,并讨论了优化策略。动态查找则针对数据集变化的场景,利用二叉排序树和散列表提升查找效率。文章还详细解析了二叉排序树的性质及平衡二叉树的概念。

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

查找算法

静态查找:数据集合稳定,不需要添加,删除元素的查找操作

动态查找:数据集合在查找的过程中需要同时添加或删除元素的查找操作

查找结构:

静态查找,可以用线性表结构组织数据,使用顺序查找算法;对关键字进行排序,则可以使用折半查找算法或斐波那契查找算法来提高查找的效率。

动态查找:使用二叉排序树的查找技术,还可以用散列表结构来解决查找问题

顺序查找:

for(i=0;i<n;i++)
{
    if(a[i]==key)
    {
        return i;
    }
}

优化:把a[0]当成哨兵,只需要比较n次,上述算法需要比较2n次

a[0]=key;
i=n;
while(a[i]!=a[0])
{
   i--;
}
return i

折半查找:

根据折半查找(效率为log2n)修改过来  low high,low=mid+1;mid=(low+high)/2

int low,high,mid;
low=0;high=n-1;
while(low<high)
{
    mid=(low+high)/2;
    if(key<str[mid])
    {
        high=mid-1;
    }
    if(key>str[mid])
    {
        low=mid-1;
    }
    else
    {
        return mid;
    }  
}
return -1;

插值查找(按比例查找):

mid=low+((key-a[low])/(a[high]-a[low]) )*(high-low);

斐波那契查找(黄金分割法查找)0.618:

线性索引查找:

稠密索引:应用数据量不是很大的

分块索引:各块间有排序,块内无序   存储空间换时间

倒排索引:搜索引擎的查找方式


二叉排序树:

二叉树具有的性质:

  • 若它的左子树不为空,则左子树上所有结点的值均小于它的根结构的值;
  • 若它的右子树不为空,则右子树上所有结点的值均大于它的根结构的值;
  • 它的左右子树也分别为二叉排序树(递归)。

平衡二叉排序树(self-Balanceing Binary Search Tree   Height-Balanced Binary Search Tree)

要求:左右子树的高度最多相差1;平衡因子的绝对值小于1。

构造平衡二叉树的目的是为了避免构成极端的效率低下的二叉树查找

这个不是平衡二叉树,顶点9的左子树比右子树高2;

这个是平衡二叉树。

 

 

 

 

 

 

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值