博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
一段代码的时间复杂度计算
阅读量:7183 次
发布时间:2019-06-29

本文共 665 字,大约阅读时间需要 2 分钟。

hot3.png

在讨论区搜索时间复杂度时看到的,答案其实在评论几位大神里已经给出了,无奈当时看半天愣是没看懂,回家拿笔算了下才算理顺了,这里就把思路记录下。

关于时间复杂度的概念就不说了,不敢说理解透彻,关键语言组织不好,还是看书吧。

代码是这样的:

for(int i=2;i<=n;i*=i)    for(int j=0;j
主要是两个循环的复杂度*foo()的复杂度。

内循环是常见的累加,复杂度与i有关。如果外循环也是一个简单的累加的话,那个时间复杂度就很简单是

O(n+n+n+......+n) = O(n^2)

然而现在外循环的步长不是1,i是以i*=i的形式递增的。

i = i, i^2, i^4, i^8, i^16, ......, i^2^x

i<=n   ==>>   2^2^x=n   ==>> x=loglogn

其实计算方式还是一样的,说的简单粗暴点,个人理解算时间就是循环内语句块执行的次数。于是foo()执行的次数就是:

S    = 2^2^0 , 2^2^1, 2^2^2, 2^2^3, 2^2^4, ......, 2^2^x

      = 2^1, 2^2, 2^4, 2^8, ......, 2^y                       (y=2^x)

2S  =         2^2, 2^4, 2^8, ......, 2^y, 2^(y+1)

2S-S=S=2^(y+1)-2^1 = 2^y = 2^2^(loglogn)=n

所以时间复杂度就是O(s)=O(n)

转载于:https://my.oschina.net/zhudibrian/blog/168121

你可能感兴趣的文章
如何更好的管理企业内的打印机
查看>>
感慨下,什么样的IT
查看>>
SQL server 2005 PIVOT运算符的使用
查看>>
我的友情链接
查看>>
Dubbo源码分析(2),Dubbo中采用的设计模式
查看>>
我的友情链接
查看>>
LVS-DR工作原理图文详解
查看>>
PPT演讲10大准备技巧
查看>>
linux连接数检查
查看>>
水火交融-Windows上的Linux容器
查看>>
Linux调优方案,sysctl.conf的设置
查看>>
dnsmasq 小巧且方便地用于配置DNS和DHCP的工具
查看>>
日期控件
查看>>
有关缓存,缓存算法,缓存框架
查看>>
Redhat6 安装mysql
查看>>
python利用本地保存cookies文件登录调取api
查看>>
OpenSSL生成根证书CA及签发子证书
查看>>
MySql远程连接的设置问题
查看>>
[swift3.0]-集成环信大文件问题
查看>>
数学之美笔记(十四)
查看>>