《算法图解》第一章学习

来源:互联网 发布:云计算公司大约市值 编辑:程序博客网 时间:2024/05/21 20:22

第一章

1.二分法查找

引入的例子就是本科时候经常玩的助兴游戏,猜数字1100,其中一个人先确定一个数字,然后其他人来猜,根据先前确定的数字告诉小伙伴是大于了,还是小于了,然后慢慢往结果靠近


其输入是一个有序的元素列表(必须有序的原因稍后解释)。如果要查找的元素包含在列表中,二分查找返回其位置;否则返回null

一般而言,对于包含n个元素的列表,用二分查找最多需要log2n步,而简单查找最多需要n步。

(讲的非常详细,易于理解)

2.运行时间

最多需要猜测的次数与列表长度相同,这被称为线性时间linear time)。


关键的一句话,运行时间的增速不同


使用大O表示法,这个运行时间为O(n)。单位秒呢?没有——O表示法指的并非以秒为单位的速度。O表示法
让你能够比较操作数,它指出了算法运行时间的增速。

3.常用大O时间

 O(logn),也叫对数时间,这样的算法包括二分查找。
O(n),也叫线性时间,这样的算法包括简单查找。
O(n*logn),这样的算法包括第4章将介绍的快速排序——一种速度较快的排序算法。
O(n2),这样的算法包括第2章将介绍的选择排序——一种速度较慢的排序算法。
O(n!),这样的算法包括接下来将介绍的旅行商问题的解决方案——一种非常慢的算法。

使用大O表示法给出下述各种情形的运行时间。
1.3 在电话簿中根据名字查找电话号码。
1.4 在电话簿中根据电话号码找人。(提示:你必须查找整个电话簿。)
1.5 阅读电话簿中每个人的电话号码。
1.6 阅读电话簿中姓名以A打头的人的电话号码。这个问题比较棘手,它涉及第4章的概
念。答案可能让你感到惊讶!


练习1.

使用大O表示法给出下述各种情形的运行时间。
1.3 在电话簿中根据名字查找电话号码。
1.4 在电话簿中根据电话号码找人。(提示:你必须查找整个电话簿。)
1.5 阅读电话簿中每个人的电话号码。
1.6 阅读电话簿中姓名以A打头的人的电话号码。这个问题比较棘手,它涉及第4章的概
念。答案可能让你感到惊讶!

解答:http://blog.csdn.net/weixin_38313518/article/details/78325412

旅行商问题:

一个旅行商要到不同的城市去,且要保证旅程最短,如果有5个城市,就有120种走法,6个城市就有720种算法

涉及n个城市时,需要执行n!n的阶乘)次操作才能计算出结果。因此运行时间为O(n!),即阶乘时间。除非涉及的城市数很少,否则需要执行非常多的操作。如果涉及的城市数超过100,根本就不能在合理的时间内计算出结果——等你计算出结果,太阳都没了。

小结

二分查找的速度比简单查找快得多。
O(logn)O(n)快。需要搜索的元素越多,前者比后者就快得越多。
算法运行时间并不以秒为单位。
算法运行时间是从其增速的角度度量的。
算法运行时间用大O表示法表示

原创粉丝点击