【读书笔记】《算法图解》第一章 算法简介
第一章 算法简介
1. 二分查找
1.1.1 二分查找是一种算法,其输入时一个有序的元素列表(仅当列表是有序的时候,二分查找才管用)。如果要查找的元素包含在列表中,二分查找返回其位置;否则返回null。
1.1.2 例子:1~100里猜数字
先从50开始。小了排除一半,再猜75,大了,又排除一半。使用二分查找时,你猜测的是中间的数字,从而每次都将余下的数字排除一半。
假设你要在字典里查找一个单子,字典宝航240 000个单词,要查找的单词位于字典末尾,使用二分查找时,仅需要17步。
一般而言,对于包含n个元素的列表,用二分查找最多需要log2n步,简单查找需要n步。
注:log对数运算是幂运算的逆运算
2的5次方=32 -> log2 32 =5
1.1.3 练习:假设一个包含128个名字的有序列表,用二分查找,最多需要几步?列表超度半分后,最多需要几步?
答:7步,8步
1.1.4 运行时间
应选择效率最高的算法,以最大限度地减少运行时间或占用空间。
线性时间(On):最多需要猜测的次数与列表长度相同
对数时间(log时间):二分查找的运行时间
2. 大O表示法
2.1.1 大O表示法是一种特殊的算法,指出了算法的速度有多快。大O表示法让你能够比较操作数,它指出了算法运行时间的增速。
2.1.2 表示方式:
运行时间为O(n)。这指出了算法需要执行的操作数。
二分法表示:O(log n)
2.1.3 例子:假设查找一个元素需要1毫秒。10亿个元素,分别计算简单查找和二分查找的时间。
答:10亿毫秒和30毫秒。二分查找和简单查找的运行时间的增速不同。
2.1.4 大O表示法指出了最糟情况下的运行时间
有时可能第一个条目就是要查找的对象,但简单查找的运行时间总是O(n)。这是一个保证——你知道简单查找的运行时间不可能超过O(n)。
2.1.5 一些常见的大O运行时间
O(log n): 对数时间,包括二分查找
O(n): 线性时间,包括简单查找
O(n * log n):包括快速排序——一种速度较快的排序算法
O(n2):包括选择排序——一种速度较慢的排序算法
O(n!):包括旅行商问题的解决方案——一种非常慢的算法
2.1.6 启示
算法的速度指的并非是件,而是操作数的增速。
谈论算法的速度时,我们说的是随着输入的增加,其运行时间将以什么样的速度增加。
算法的运行时间用大O表示法表示。
二分查找的速度比简单查找快得多,需要搜索的元素越多,越快。