第2章 算法

算法的定义:算法是解决特定问题求解步骤的描述,在计算机中为指令的有限序列,,并且每条指令表示一个或多个操作。
算法的特性:
1.零个或多个输入,至少一个或多个输出
2.有穷性
3.确定性:每一个步骤都具有确定的含义,无歧义,即相同的输入只能有唯一的输出
4.可行性:每一步都能通过执行有限次数完成
算法设计的要求:
1.正确性
2.可读性(便于阅读、理解和交流)
3.健壮性(输入数据不合法时,……)
4.时间效率高和存储率低
对比算法的关键执行次数函数的渐进增长性,基本就可以分析出某个算法的时间复杂度。
算法时间复杂度推倒大O阶的步骤:
1.用常数1取代运行时间中的所有加法常数。
2.在修改后的运行次数函数中,只保留最高阶项。
3.如果最高阶项存在且不是1,则去除与这个项相乘的常数。
例1:

int count = 1;
while(count < n)
{
    count = count * 2;
}

由2x = n得到x = log2n,所以其时间复杂度为O(log n)。
例2:

int i,j;
for(i=0; i<n; i++)
{ print("%d", i); }
for(i=0; i<n; i++)
{ for(j=i; j<n; j++) print("%d", j); }

它的执行次数为n+[n(n+1)]/2,根据推倒大O的方法,最终这段代码的时间复杂度为O(n的平方)。
O(1) < O(log n) < O(n) < O(n*log n) < O(n的平方) < O(n的立方) < O(2的n次方) < O(n!) < O(n的n次方)
除非特别指定,我们提到的运行时间都是最坏情况的运行时间。
算法分时间复杂度空间复杂度

你可能感兴趣的:(数据结构,笔记)