赞
踩
一、前言
时间复杂度和空间复杂度,我们在大学里的算法与数据结构课程中已经学习过,这回根据项目工作中整理一下,这个估计只是一个粗略的估计分析,并不是一个准确的估计分析。
1、学习时间复杂度和空间复杂度是很有必要的,这个属于算法与数据结构的范畴,学这个是为了解决代码中的“快”和“省”的问题。这样才能使你的代码运行效率更高,占用空间更小。代码执行效率需要通过复杂度分析。
2、数据规模的大小会影响到复杂度分析。比如排序,如果是一个有序的数组,执行效率会更高;如果数据量很少的时候,这个算法看不出性能上差别。
3、比如说不同物理机环境不一样,比如i3,i5,i7的cpu等等,运行内存1G,2G,4G,8G等等;时间上肯定有差别。
二、大O的复杂度
我们来看个简单的例子,一个循环累加器。
- function total(n) {
- var sum = 0; //t
- for (var i = 0; i < n; i++) { // nt
- sum += i; //nt
- }
- return sum; // t
- }
分析:假设每一行代码执行耗时都一样,为t,这样整个代码总执行时间为(t+nt+nt+t)=(2n+2)t。
我们再来看一个栗子:
- function total(n) {
- var sum = 0; // t
- for (var i = 0; i < n; i++) { //nt
- for (var j = 0; j < n; j++) { //n*n*t
- sum = sum + i + j; //n*n*t
- }
- }
- return sum; //t
- }
分析:假设每一行代码执行耗时都一样,为t,这样整个代码总执行时间为(t+nt+n*n*t*2+t)=(2n*n+n+2)t。
从数学角度来看,我们可以得出个规律:代码的总执行时间 T(n) 与每行代码的执行次数成正比.
所以上边两个函数的执行时间可以标记为 T(n) = O(2n+2) 和 T(n) = O(2n*n+n+2)。这就是大 O 时间复杂度表示法,它不代表代码真正的执行时间,而是表示代码随数据规模增长的变化趋势,简称时间复杂度。
而且当 n 很大时,我们可以忽略常数项,只保留一个最大量级即可。所以上边的代码执行时间可以简单标记为 T(n) = O(n) 和 T(n) = O(n2)。
三、时间复杂度分析<
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。