目录
算法背景 background
核心:Algorithms + Data Structures = Programs
-》高性能的代码 = 相应速度快的代码。需要初级程序员了解算法,灵活地运用算法。
-》发明设计一款算法:要去推导证明算法的可行性。
数据结构是为算法服务的,而算法又需要作用在特定的数据结构上。
-》谁的算法快,谁的算法更优!!
如果两种算法实现的速度差不多,那我们还可以去评价算法所占用的空间。
时间复杂度:执行当前算法所消耗的时间。--》快
空间复杂度:执行当前算法所消耗的内存空间。--》省
1. 时间复杂度 Time Complexity
时间复杂度 time complexity:全称为算法的渐进时间复杂度,表示执行当前算法的最高运算次数,记作T(n)=O(f(n)),表示算法的执行时间与数据规模n之间的增长关系。
核心:分析算法时间复杂度的关键在于分析出代码循环了多少次!
Note:时间复杂度反映的只是一个趋势,也就是随着n的变化,算法执行时间的也是会变化的。
1.1 时间复杂度分类
1.1.1 O(1) 常数阶
本质:复杂度与数据规模n无关!
public static void print(int n){
int a = 1;
int b = 2;
int c = 3;
int sum = a + b + c;
System.out.println(sum);
}
1.1.2 O(n) 线性阶
对应:单层for循环
public static void print1(int n){
int a = 0; // 复杂度:T
for (int i=0;i<n;i++){
System.out.println(i); // 复杂度:n*T
}
}
假设每一行代码的执行时间是T,那上段代码的执行时间T(n)= T+n*T=(n+1)T.
->算法时间复杂度 Rule 1: 常量可以被忽略。
所以,T(n) = nT = O(n).
1.1.3 O(n^2) 平方阶
双层循环平方阶;
三层循环立方阶;
K层循环就是K次立方阶。
1.1.4 O(logn) 对数阶
对应:while 循环
e.g. 二分查找,二叉树问题
public static void print2(int n){
int i=1;
while (i <= n) {

最低0.47元/天 解锁文章
642

被折叠的 条评论
为什么被折叠?



