1、为什么要进行算法分析?因为如果提前知道算法的开销,那么就可以参考这个分析做出决策。如果时间复杂度太大,可以不急着写出来。
2、为什么要统计基本操作数量?因为统计基本操作,可以排除机器速度的影响因素,衡量算法本身的优劣度。
3、基本操作要严格定义吗?不需要,可以具体情况灵活处理。
4、同阶是什么意思?可以理解成增长情况相同。对于得到的式子,通过去除系数,只保留最高阶得到的式子叫做算法的渐近时间复杂度,通过这个来衡量随着基本操作数增加,算法时间复杂度的增长情况。
5、渐近时间复杂度能作为决定因素吗?不能,因为渐近时间复杂度忽略了很多的因素,因此只能作为参考,但是又因为抓住了主要矛盾,即基本操作数,这样得到的分析结果常常有非常有用。
6、渐近时间复杂度和实际情况同阶,称这个上界是紧的上界。否则是松的。
7、分治法的步骤是什么?
(1)划分问题:将问题划分为子问题
(2)递归求解:递归求解子问题
(3)合并问题:通过合并子问题的解来的到问题的解。
8、算法分析可以忽略”除法是否为整数”。而按照实数除法分析,这样近似的对最终结果影响小,一般不会改变时间复杂度。
9、为什么将m = x + (y - x) / 2?因为这样得到区间比较自然,[x, m) [m, y],而不需要在某个地方减一,加一。
10、算法中除法是向0取整的,5/2 = 2, -5 / 2 =-2,通过x + (y - x) / 2,保证区间分界点总是向区间起点靠近的。
11、正确对待时间复杂度?机器1s内完成的运算是1^8。时间复杂度和机器速度的关系。
多项式时间复杂度能解决的问题规模大,在机器速度增加后,多项式时间复杂度增加的也明显。
而指数时间复杂度能解决的问题规模小,在机器速度增加后,速度增加的缓慢不明显。因此称作多项式时间复杂度为有效算法,而n!和2^n之类的为指数时间复杂度。
上界时间复杂度分析有两个不精确性.1、低次项和高次项的系数的非主流影响,2、对硬件和程序时间细节的依赖,例如对表达式的优化,以及吧内存访问变得更加”cache友好”。
算法实际能解决的问题规模和表中有差距,但是还能作参考。
12、