连载2---第1章:算法在计算机中的角色(1.2:算法作为一种技术)

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*(1062 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

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值