第二章 算法《大话数据结构》读后笔记
算法定义
算法是解决特定问题求解步骤的描述,在计算机中表现为指令的有限序列,并且每条指令表示一个或多个操作。
算法的特性
- 输入输出:算法至少有一个或多个输出
- 有穷性:指算法在执行有限的步骤之后,自动结束,不会无限循环。
- 确定性:算法在一定条线下只有一条执行路径,相同的输入智能有唯一的输出结果。
- 可行性:算法的每一步都必须是可行的,也就是说每一步都通过执行有限次数完成。
算法设计的要求
- 正确性
- 可读性
- 健壮性:输入不合法数据也能做相应处理
- 时间效率高盒存储量低
算法时间复杂度
判断一个算法的效率时,函数中的常数盒其他次要项常常可以忽略,而更应该关注主项(最高阶项)的阶数
-
大O表示法
O(1)常数阶、O(n)线性阶、O(n^2) 平方阶
1.用常数1取代运营时间中的所有加法常数
2.在修改后的运营次数函数中,只保留最高阶项。
3.如果最高阶项存在且不是1,则去除与这个项相乘的常数。-
常数阶:执行时间恒定的算法O(1)
-
线性阶:O(n)
下面代码需要执行n次 即时间复杂度O(n)
int i for(i = 0; i < n; i++){ /*时间复杂度为O(1)的程序*/ }
-
对数阶:O(logn)
下面代码需要执行n次 即时间复杂度O(logn) 2^x=n得到x=log2n
int count =1; while (count < n) { count = count * 2; /*时间复杂度为O(1)的程序*/ }
-
平方阶
下面代码循环嵌套复杂度为n*n即n^2
int i,j; for(i = 0; i < n; i++){ for(j = 0; j < n; j++){ /*时间复杂度为O(1)的程序步骤*/ } }
下面这种嵌套循环实际执行没有 这样表示为还是为O{n^2}。
n + ( n − 1 ) + ( n − 2 ) + . . . + 1 = n ( n + 1 ) 2 = n 2 2 + n 2 n+(n-1)+(n-2)+... +1= \cfrac{n(n+1)}{2} = \cfrac{n^2}{2}+\cfrac{n}{2} n+(n−1)+(n−2)+...+1=2n(n+1)=2n2+2nint i,j; for(i = 0; i < n; i++){ for(j = i; j < n; j++){ /*时间复杂度为O(1)的程序步骤*/ } }
-