算法 时间复杂度

算法是解决特定问题求解步骤的描述,在计算机中表现为指令的有限序列,并且每条指令表示一个或多个操作

算法特性

算法的五个基本特性:输入,输出,有穷性,确定性和可行性

输入输出

可以没有输入,但算法至少有一个或多个输出

有穷性

指算法在执行有限的步骤之后,自动结束不会出现无限循环,并且每一个步骤可在接受的时间内完成

确定性

指算法的每一步骤都具有确定的含义,不会出现二义性,

可行性

算法的每一步都必须是可行的,也就是说,每一步都能通过执行有限次数完成

好算法再加上容易理解


算法设计的要求

正确性

指算法至少应该具有输入,输出和加工处理无歧义,能正确反映问题的需求,能够得到问题的正确按钮

可读性

算法设计的另一目的是为了便于阅读,理解和交流

健壮性

当输入数据不合法时,算法也能做出相关处理,而不是产生异常或莫名其妙的结果

时间效率高和存储量低

执行时间短的效率高,算法运行时所占用的内存或外部硬盘存储空间少

判断一个算法的效率时,函数中的常数和其他次要项尝尝可以忽略,而更应该关注主项的阶数


时间复杂度

一般用大写O[]来体现时间复杂度
O[1]常数阶 O[n]线性阶 O[n²]平方阶
推到大O阶
1.用常数1取代运行时间中的所有加法常数
2.在修改后的运行次数函数中,只保留最高阶项
3.如果最高阶项存在且不是1,则去除与这个项目想乘的常数
得到的结果就是大O阶

一般在没有特殊说明的情况下,都是指最坏时间复杂度

f(n) = 1+n+n²+ n(n+1)/2+3/2n²+3/2+1
首先去掉常数加法
n²+ n(n+1)/2+3/2n²

比大小 3/2n² > n²

n(n+1)/2+3/2n²

都去掉/2
n²+n 3n²

3/2n² 最大 去掉3/2 最高阶为O[n²]

时间复杂度为O[n²]

你可能感兴趣的:(算法 时间复杂度)