二分法分析

在这里插入图片描述
在这里插入图片描述
时间复杂度:最好情况下,一击命中,为常数级时间C;最坏情况下,一直二分到剩一个元素,则时间复杂度为log2N

空间复杂度:最好情况下,一击命中,不用后续递归,即不用占用调用函数时函数栈的空间,此时空间复杂度为 C

                  最坏情况下,一直递归二分,需要二分log2N次,即调用函数log2N次,此时空间复杂度为C * log2N

时间复杂度计算(看运行次数最多的那条语句被运行了多少次)

O ( 2 n ) O(2^n) O(2n),表示一个算法的性能会随着输入数据的每次增加而增大两倍,典型的方法就是裴波那契数列的递归计算实现
对数阶 O ( l o g n ) O(logn) O(logn)
int i = 1;
while(i<n)
{
i = i * 2;
}
上面的代码,在while循环里面,每次都将 i 乘以 2,乘完之后,i 距离 n 就越来越近了,直到i不小于n退出。我们试着求解一下,假设循环次数为x,也就是说 2 的 x 次方等于 n,则由2^x=n得出x=log₂n。因此这个代码的时间复杂度为 O ( l o g n ) O(logn) O(logn)

https://www.cnblogs.com/lazyegg/p/12572421.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
在数值分析中,二分法是一种常用的数值求根方法。它的基本原理是利用介值定理,对于闭区间[a,b]内的函数f(x),如果满足f(a)*f(b) < 0,那么函数f(x)在该区间内至少存在一个根。二分法的几何意义是不断减少区间长度的一半来逼近根,而区间的中点被用作近似解。二分法的终止条件是区间长度小于给定的精度要求。 在Matlab中实现二分法的基本代码如下所示: ``` [result,k = dichotomy(1,2,10^(-2),@f); disp([result,k]); %二分法函数 function [mid,k = dichotomy(a,b,e,f) k=-1; %k为迭代次数 while abs(b-a)>e mid=(a+b)/2; k=k+1; if f(mid)==0 break; elseif f(mid)*f(a)<0 b = (a+b)/2; else a = (a+b)/2; end end mid=(a+b)/2; k=k+1; end %原函数 function [y = f(x) y = x^3-x-1; end ``` 在这段代码中,我们定义了一个名为`dichotomy`的函数,它接受四个参数:初始区间端点a和b,精度要求e以及函数句柄f。函数内部使用了一个while循环来进行迭代,直到区间长度小于给定的精度要求。在每次迭代中,我们计算区间的中点mid,并判断mid是否为根或者根所在的区间。根据判断结果,更新区间的端点a和b,并计数迭代次数k。最后,返回近似解mid和迭代次数k。 为了使用该二分法函数,我们需要提供一个原函数f(x),在这里我们使用了一个例子函数`y = x^3-x-1`。 以上就是使用Matlab实现数值分析二分法的基本代码。您可以根据自己的具体问题和需求,修改函数参数和原函数,来使用该方法求解其他问题。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值