算法和机器性能提高带来输入规模增大的比较

来源:互联网 发布:linux jdk8安装教程 编辑:程序博客网 时间:2024/06/04 19:10
算法和机器性能提高带来输入规模增大的比较

话说王晓东编的《算法设计与分析》上有这么一道题,说是硬件厂商XYZ公司宣称他们研制的微处理器的运行速度是其竞争对手ABC公司同类产品的的100倍,问对于计算复杂性分别为n,n^2,n^3,和n!的各类算法,若用ABC公司的计算机能在1小时内解决输入规模为n的问题,那么用XYZ公司的计算机在1小时内分别能解决输入规模为多大的的问题。

(这里先说说为什么对于计算复杂性不同的算法,用ABC公司的计算机却能都在1小时内解决输入规模为n的问题,个人认为:要么是因为采用了不同型号的计算机来计算,要么就是把题目中谈到的这些在不同计算复杂性的算法里进行计算时涉及到的输入规模n,视为是不同的(即几个n都不是同一个n,可视为是一种符号或者变量,不需深究其含义),那么在列式计算时,就可以针对不同的计算复杂性算法,分别列式计算。本人倾向于采纳后一种观点。下面是解法,取自网上:)


对于算法复杂度为n^2的算法,我们不妨设1小时内能在XYZ机器上解决输入规模为n1的问题,这样在XYZ机器上需要的元操作的个数为n1^2,假设在ABC机器上每个元操作所耗费的时间是e1,XYZ机器上是e2,显然e2=1/100e1,由于都是1小时,就有:1小时=n^2*e1=n1^2*e2=n1^2*e1/100,所以n1=10n,我们可以看出,对于复杂度为n^2的算法,当机器性能提高了100倍时,输入规模只增加了10倍。同样,可以算出当算法复杂度为n^3时,n1=4.65n,为n!时,n1=n+log100。也就是说,随着算法复杂度的提高,机器性能的提高带来的问题规模的提高越来越小,因此研究高效率的算法还是必要的。

0 0