关于程序的运算时间复杂度的一点思考
来源:互联网 发布:乌云镜像 知乎 编辑:程序博客网 时间:2024/05/21 20:30
时间复杂度
一般考察算法的复杂度,我们常用到时间复杂度,和空间复杂度来定义。其中时间,其实就是计算机执行这个算法执行的指令次数,是一个计算量的概念;而空间复杂度是指执行这个算法所需的内存空间,即寄存器的资源。
这篇博客主要探讨一下自己关于时间复杂度的一些思考。
几个例子
对比上述四个例子,可以发现,程序的时间复杂度和基本操作被执行的次数有关。这里很重要的一点是:基本操作。其实for循环,每次执行,都有两个基本操作,比较和++,所以即使for语句里没有任何操作,也会有两个基本操作。for循环里,如果有类似的基本操作,程序的运行时间不会改变太多。但是一旦循环里有比较复杂的操作,如pow操作,这个操作就成为基本操作,也是for循环里最耗费时间的。但看这个语句,其实看不出它有多复杂,但是从运行结果来看,它使程序运行时间提高了二十多倍,可见pow操作的执行时间远远大于赋值、比较等操作的时间。其本质我估计是单个pow操作所需要的汇编指令个数远远大于赋值、比较等操作需要的汇编指令个数。
对比这三个,有以下思考:但看执行次数,这三个和上面的执行次数是一样的,但是运行时间是上面的1.5倍,即使执行的基本操作一样。那为何运行时间是上面的1.5倍呢,我估计是因为当for循环里的循环次数比较大时,每次比较或者++运算会耗费更多时间。
另外,当循环里的总数写成N* N和4e8,执行时间是不一样的,这个很容易理解,因为每次比较,都要先计算一下N*N,这个计算本身就引入了一个比较大的基本操作,所以运行时间会多点。
当for循环里的基本操作从2个变成12个时,整体运行时间也从3秒变成18秒,可见循环执行次数和基本操作决定了整个时间复杂度。
以上是我的思考,有不对的,欢迎指正。
- 关于程序的运算时间复杂度的一点思考
- 关于时间复杂度O(N)的思考
- 关于 学习、时间 的一点思考
- 关于并行程序分析的一点思考
- 编程:关于程序的时间复杂度
- 关于算法的时间复杂度问题的思考
- 关于时间和空间复杂度的一点小结
- 关于 && 的一点思考
- 关于c语言等于运算符的一点思考
- 关于程序维护、修改的一点迷惑和思考
- 调程序的一点思考
- 关于计算机体系结构的一点思考。
- 关于计算机体系结构的一点思考
- 关于继承的一点思考
- 关于盗版的一点思考
- 关于宏的一点思考
- 关于计算机的一点思考
- 关于编程的一点思考
- malloc()动态分配内存的使用及其注意事项
- bmob 初始化错误 at cn.bmob.v3.helper.BmobNative.init(Native Method)
- 日式mac虚拟机安装win7,中文输入法适配日文键盘!
- js事件监听
- Having fun with NSOperations in iOS
- 关于程序的运算时间复杂度的一点思考
- IntelliJ + Maven + 内Jetty 实现热部署项目
- SLF4J: Failed to load class "org.slf4j.impl.StaticLoggerBinder
- 关于MYSQL ERROR 1205 :Lock wait timeout exceeded; try restarting transaction
- Find Your Way Home
- 数字三角形问题,记忆化搜索
- 字符串的非空子集
- memcache的原理及应用
- 创建一个链表