算法的特性:
1.有穷性(不能陷入死循环)
2.确定性(同样的输入只能输出唯一的结果)
3.可行性(通过基本运算执行有限次来实现)
4.输入
5.输出
“好”算法的性质:
1.正确性
2.可读性
3.健壮性(对特殊输入有相应的处理输出例如:错误)
4.高效率和低存储量需求(即时间复杂度低和空间复杂度低)
算法的时间复杂度:
void love(int n)
{
for(int i=1;i<=n;i++)
{
printf("I love you %d time",i);
}
printf("I love you more than %d time",n);
}
在上述代码中时间复杂度
T(n)=2n+2
即每行代码运行的次数
a.加法规则
T(n)=T1(n)+T2(n)=O(f(n))+O(g(n))=O(max(f(n),g(n));
max规则:
O(1)<O(log2n)<O(n)<O(nlog2n)<O(n^2)<O(n^3)<O(2^n)<O(n!)<O(n^n)
顺口溜:常对幂指阶
b.乘法规则
T(n)=T1*T2=O(f(n))*O(g(n))=O(f(n)*g(n))