算法的概念
- 算法:计算机解题的过程。
算法的特征
1.输入
2.输出
3.可行性
4.有穷性
5.确定性
算法的优劣依据
时间复杂度(Time Complexity)
-
一个算法花费的时间和算法中的语句的执行次数成正比。
-
时间频度T(n):一个算法中的语句执行次数称为语句频度或者时间频度
-
时间复杂度O(f(n)):时间的规模,而不是具体的次数时间频度去掉低阶的项和首项常数。
-
T(n)=1000n^2+20n+100;
-
O(欧米可容)(n^2);时间复杂度的上界
-
欧米伽:时间复杂度的下界
-
西塔:时间复杂度的精确阶
时间复杂度的计算
-
1.找出算法中的基本语句,通常是最内层循环的循环体
-
2.计算基本语句的执行次数,只需要计算基本语句执行次数的数量级
-
3.用O记号表示算法的时间性能
时间复杂度的举例:
-
O(1):一个或者多个确定个数的简单的语句
-
O(n):for循环
for(int i=1;i<n;i++){ count++; }
-
O(log_2n)
for(int i=0;i<n;i*=2){ count++; }
-
O(n^2)
for(int i=0;i<n;i++){ for(int j=0;j<n;j++){ count++; } }
-
O(nlog_2n)
for(int i=0;i<n;i*=2){ for(int j=0;j<n;j++){ count++; } }
空间复杂度(Space Complexity)。
-
S(n) = O(g(n));
-
包括:
-
1.程序本身所占空间
-
2.输入数据所占的空间
-
3.辅助变量所占空间
-
只需要考虑辅助变量所占空间这一个因素。
四. 空间复杂度的分析
-
.
S(n) = O(1); int fun(int n){ int i,j,k,s; s = 0; for(i=0;i<n;i++){ for(j=0;j<i;j++){ for(k=0;k<j;k++){ s++; } } } }
S(n) = O(n);
递归算法。