求复杂度的时候非常好玩的一个函数

本文介绍了在分析时间复杂度T(n)=2(T(n/2))+n^2logn时遇到的挑战。通过代码求解和图形化分析,探讨了如何确定c的取值范围,尤其是当导数无法直接求解时。借助图形观察,发现在n>1的情况下,c可能接近1/2。虽然初步得出c<1的结论,但为了更精确,需要采用优化策略,这留待未来进一步研究。

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

强调下用matlab,因为以前习惯用,想用Python做的可以试试哈!

  1. 求解分析T(n)=2(T(n/2))+n^2logn的时间复杂度的时候碰到的,用主方法分析,符合第3种情况,但是我们想求出那个c的取值,最少也得有个范围,是吧?
  2. 用代码直接求解,当然,如果你导数公式都记得,那就随意了,直接求导看看结果了:
syms x y
y=(log(x)-1)/(2*log(x));
result=diff(y)
solve(result)

输出结果:


result =
 1/(2*x*log(x)) - (log(x) - 1)/(2*x*log(x)^2)
ans =
 Empty sym: 0-by-1
  1. 发现没结果,也就是求导没等于0的玩意儿,分析不好分析,那就直接画图哇!fplot(y,[0,5]),先试试好不?
    在这里插入图片描述
  2. 别猴急,看到没?函数原来是这个鸟样,还求什么极值,最值啊,拉倒吧。
  3. 在琢磨下我们限定下范围,n>1之后的,不就可以了?
    在这里插入图片描述
  4. 继续琢磨,加大到50000,继续绘制图形
    在这里插入图片描述
  5. 从图中可以看出接近1/2,为哈呢?你取n无穷大,你看看结果是不是1/2=2/4,所以c取3/4应该不成问题,只要c<1就满足条件么。
  6. 当然你可以琢磨下,利用代码求,比如:
x0=5
fun=@(x)[(log(x)-1)/(2*log(x))];
[xm,fvalml,maxfval]=fminimax(fun,x0)

这个太粗糙,迭代达不到我们要的精度,需要设计类似于目标优化之类的策略,反正目的达到,不管了,以后有时间琢磨下了。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值