1.2:算法作为一种技术
假设计算机足够快,内存是免费的,还需要算法吗?答案是肯定的,你还需要正确的算法帮助你正确的解决问题
如果计算机足够快,任何一个正确的算法都能解决问题,在这种情况下,你想不想要一种最简单的方法解决问题?
虽然计算机可以更快,但是不会无限的快,内存可以更便宜,但是不会免费,算法还是帮助你节省时间的有效办法.
效率:
解决同一个问题,不同的算法在效率上会差别很大,这种差别远比计算机硬件和软件对效率的影响大
看一个排序例子:
我们看两种排序的算法:
1.插入排序(insertion sort),排序n个元素,需要时间c1n2 (其中c1是跟n没有关系的常量)
2.合并排序(merge sort),排序n个元素,需要时间c2nlgn(其中c2是跟n没有关系的常量,lgn是log2n)
插入排序的常量通常比合并排序的小,所以c1<c2
我们可以看到常量对时间的影响比n小的多,插入排序在n小的时候比合并排序效率高,但是当n很大的时候,合并排序就比插入排序效率高很多.
我们选用一台快的机器(computer A)运行插入排序对比一台慢的机器(computer B)运行合并排序,它们各自都排序一组106个的数.
假设computer A每秒执行10亿条指令,即109/s,computer B每秒执行1000万条指令,即107/s,则computer A是computer B执行速度的100倍,在computer A上执行算法是用最快的执行语言:机器语言,排序n个元素需要2n2
即c1=2,在computer B上执行算法采用高级语言写的算法,排序n个元素需要50nlgn,既c2=50。
排序100万个数
computer A需要:(2*(106)2 instructions)/(109 instructions/second)=2000seconds
computer B需要:(50*106lg106 instructions)/(107 instructions/second)约=100seconds
结论:computer A性能比computer B高,需要时间是computer B的20倍,如果n更大,那么倍数将更大,有兴趣可以算一下
算法和其他技术
上面的例子说明:算法和计算机硬件等,都是一种技术
你可能对算法的影响产生疑问,是否有其他的因素?
例如:时钟频率更高的硬件,更容易使用的用户界面,网络的速度等等都可能是影响因素
答案是肯定的。虽然一些应用在应用层次上不需要算法(例如一些简单的web应用),但是他们本身需要算法,例如,考虑一个基于web的服务,如何从一端到另一端。这样的服务跟硬件速度,用户界面接口,网络速度都有关系,可是它也需要算法来完成某个操作,例如寻找路由(可能用到最短路径算法)
习题(答案只是写的一些自己知道的,希望大家踊跃讨论,互相学习,我也会在以后的学习中补充):
1。举例,一个应用程序在应用层次需要算法的例子并且讨论其中的算法
答:这样的例子很多,例如把学生成绩进行排序
2。假设我们在同一台机器上比赛插入排序和合并排序.输入n个元素,插入排序执行8n2步,合并排序执行64nlgn步,问哪些n插入排序比合并排序执行效率高?
答:8n2<64nlgn
3。找出最小的n,一个时间为100n2的算法在同一台机器上比一个时间为2n的算法执行的快.
答:100n2<2n