本文属于《算法图解》的读书笔记系列。先承认自己算法很烂,还是从小白做起吧。太高深的我充满了挫折感。
一 二分查找
可能对于二分查找很多人都熟悉了,但是我忘了对数的了,作者 很及时的贴了概念。
代码如下:
public class BinaryTest {
public static Integer bs(int nums[],int item){
if(nums == null){
return null;
}
int low = 0;
int high = nums.length-1;
while(low<=high){
int mid =(int) Math.floor( (low+high)/2) ;
int res = nums[mid];
System.out.println(mid+":"+res);
if(res == item){
return res;
}else if(res> item){
high= mid-1;
}else if(res< item){
low = mid+1;
}
}
return null;
}
public static void main(String[] args) {
int nums[] ={1,2,3,4,5,6,7,8,9,10};
int res =bs(nums,3);
System.out.println("result:"+res);
}
}
4:5
1:2
2:3
result:3
二 运行时间的大O标识符
大O表示法指出了算法有多快。例如,假设列表包含n个元素。简 单查找需要检查每个元素,因此需要执行n次操作。使用大O表示法, 这个运行时间为O(n)。单位秒呢?没有——大O表示法指的并非以秒为单位的速度。大O表示法 让你能够比较操作数,它指出了算法运行时间的增速。
为了便于理解,作者还用画图的方法介绍了16格子不同方式所用时间。
大O表示方指出了最糟情况下的运行时间。
理解常见的大O运行时间:
O(log n),也叫对数时间,这样的算法包括二分查找。
O(n),也叫线性时间,这样的算法包括简单查找。
O(n * log n),这样的算法包括第4章将介绍的快速排序——一种速度较快的排序算法。
O(n2 ),这样的算法包括第2章将介绍的选择排序——一种速度较慢的排序算法。
O(n!),这样的算法包括接下来将介绍的旅行商问题的解决方案——一种非常慢的算法。
作者还画出了对应的曲线便于理解,
小结:
二分查找的速度比简单查找快得多。
O(log n)比O(n)快。需要搜索的元素越多,前者比后者就快得越多。
算法运行时间并不以秒为单位。
算法运行时间是从其增速的角度度量的。
算法运行时间用大O表示法表示。