1. 算法的5个基本特性:输入输出(零个输入或多个输出)、有穷性(不会出现无限循环)、确定性(不会出现二义性)、可行性(每一步都通过执行有限次完成)。
2. 算法设计的要求:正确性、可读性、健壮性、时间效率高和存储量低;
3. 算法时间复杂度:算法的执行次数T(n) 与问题规模n 的变化情况及确定T(n)的数量级;
4. 时间复杂度大O 阶,O(1) 常数阶、O(log n) 对数阶、O(n) 线性阶、O(n2) 平方阶;
5. 推导大O 阶的方法:
(1)用常数1 取代运行次数中的加法项;
(2)所有的运行次数只保留最高阶项;
(3)去掉最高阶项的常数系数;
6. 举例:
常数阶:int x = 0;
线性阶:
for (int i=0; i<n; i++);
对数阶:
int count = 1;
while (count < n)
{
count = count * 2;
}
平方阶:
for (int i=0; i<n; i++)
{
for (int j=0; j<n; j++)
{
NULL;
}
}
6. 最坏时间复杂度和平均复杂度
最坏情况是一种保证,指运行时间不会再坏了(最坏情况常常十分重要,因为它常常导致用户的投诉!);平均情况是期望的运行时间.