时间复杂度是怎么估算

本文详细探讨了2分查找算法的时间复杂度,通过实例说明查找次数与数组大小的关系,并推导出对数时间复杂度O(logN),揭示了其在大规模数据搜索中的高效性能。

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

对数级别的时间复杂度分析

时间复杂度中的对数的底数一般都是2,因此通常将对数(㏒₂)简化成log。

以下面的2分查找代码为例

int a[]={1,2,3,4,5,6,7,8};

int len = 100; int left = 0; int right = len-1;

int pos = -1; int x = 1;

while(left < right)

{

    int middle = (left + right) / 2;

    if (a[middle] == x) return middle;

    if (x < a[middle]) right = middle - 1;

    else left = middle + 1;

    return -1;

}

当使用2分查找法来查找元素的时候。

当数组a[]中有8个元素的时候,最差的情况下,需要进行的查找次数分析如下。

假设x值都位于查找位置的左边。

第一次 left=0;right=7; middle=(0+7)/2 = 3;

第二次 left=0; right=3-1=2; middel=(0+2)/2 = 1;

第三次 left=0; right=1-1=0; middel = 0;

进行到第三次之后,已经完成了整个数组的查找。

那么可以得出,8个元素的数组使用2分查找法进行查找所需要的次数为3。

使用同样的方法可以发现16个元素的数组需要的次数为4,32个元素的数组需要的次数为5。

由此可以推迟出公式

8=2^3;

16=2^4;

32=2^5;

数组数量N= 2^n(查找次数) ,根据对数是求幂的逆运算,可以推导出

n(查找次数) = logN(元素数量)

因此可以得出2分查找法的时间复杂度为O(logN)




 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值