Chapter 2 算法
- 是什么:解决特定问题求解步骤的描述。
- 特性:①零个或多个输入,一个或多个输出 ②有穷性 ③确定性 ④可行性
- 设计要求:正确性、可读性、健壮性、时间效率高和存储量低。
- 效率度量方法:①事后统计(麻烦,不考虑)②事前分析估算
- 抛开软硬件因素,程序运行时间依赖于算法的好坏和问题的输入规模。
- 时间复杂度大O记法:运行时间与基本操作的执行次数成正比。算法渐进时间复杂度记作T(n)=O(f(n)),它表示n增大,算法执行时间的增长率和f(n)的增长率相同。
- 推导大O阶的方法: ①用1取代运行时间中的所有加法常数②只保留最高阶③去掉与最高阶的常数系数。常数阶O(1)、线性阶O(n)、平方阶O(n2)、对数阶O(logn)、nlogn阶O(nlogn)、立方阶O(n3)、指数阶O(2n)。
- e.g.
int count = 1;
while (count<n)
{
count = count * 2;
}
int i,;
for(i = 0; i < n; i++)
{
for(j = i; j < n; i++)
{
}
}
- 没有特殊说明指的都是最坏时间复杂度。平均时间复杂度是期望的运行时间。
- 空间复杂度S(n)=O(f(n)),n为问题规模,f(n)为语句关于n所占存储空间的函数。若所需辅助空间相对于输入数据量而言为常熟,则为原地算法,空间复杂度为O(1)。
总结