前言(关于时间复杂度)
定义:
时间复杂度是衡量算法执行时间随问题规模增长而增长的度量。它表示算法执行所需时间的增长率。通常使用大O符号(O)来表示时间复杂度。
时间复杂度描述的是算法运行时间的增长趋势,并不是具体的运行时间。它忽略了常量因素和低阶项,关注的是问题规模趋于无穷时,算法执行时间的增长情况。
常见的时间复杂度:
常见的时间复杂度有:O(1)(常数时间)、O(log n)(对数时间)、O(n)(线性时间)、O(n log n)(线性对数时间)、O(n^2)(平方时间)等。
作用:
通过分析算法的时间复杂度,我们可以比较不同算法的执行效率,并选择最优的算法来解决问题。时间复杂度越小,算法执行效率越高。但需要注意的是,时间复杂度只是算法效率的粗略度量,实际的执行时间还受到诸如硬件环境、编程语言等因素的影响。
时间复杂度求解
(Ⅰ)一层循环
解题思路:
1°列出循环次数t和每次循环i的变化值
2°确认t与i的关系表达式
3°确认循环停止的条件表达式
4°联立上面两式,解方程
5°去常数项,低次项,最高项系数,写出结果
例题:
【例】
i = n*n;
while(i != 1)
i = i / 2;
【解】
循环次数t:0 1 2 3 ......
每次i的变化:
/2
/4
/8 .......
t与i的关系式: i = /
①
循环终止条件: i = 1 ②
联立①②得 /
= 1
解得 T = O()
下面是三道练习题
(Ⅱ)两层循环
解题思路:
1°列出外层循环中i的变化值
2°根据i的变化值,写出每个i下内层循环的执行次数
3°求和(数列),写结果