参考《算法导论》p6p_6p6~p7p_7p7。
为什么要学算法?就是想设计出的算法让计算机跑的更快嘛,那怎么判断计算机运行的快慢?或者不同算法在同一台计算机上的运行时间如何比较?
判断CPU运行快慢(CPU快慢也即计算机快慢)的一个单位是MIPS(Million Instruction Per Seconds),每秒百万条执行,此值肯定是越大则表示CPU运行越快。
另外一个评价标准是,某个算法在某台计算机上执行了多长时间,在理论计算的时候,前提是知道CPU每秒能执行多少条指令,或者每条指令需要多少时间。
算法导论p6p_6p6~p7p_7p7上有一个例子,对比两种算法分别在两台计算机上执行的时间。现有一个大小为n=100n=100n=100万个数的数组,假设计算机A每秒能执行10亿条指令,计算机B每秒能执行1000万条指令,如果在A上运行需要c1n2c_1n^2c1n2条指令的排序程序(c1=2c_1=2c1=2),即2n22n^22n2;在B上运行需要c2nlgnc_2n\lg nc2nlgn条指令的排序程序(c2=50),即50nlgn50n\lg n50nlgn。为了完成这n=100万个数的排序,
A需要花费的时间为:
2∗(106)2条指令109条指令/秒=2000秒
\frac {2*(10^6)^2条指令}{10^9条指令/秒}=2000秒
109条指令/秒2∗(106)2条指令=2000秒
B需要花费的时间为:
50∗(106)lg106条指令107条指令/秒≈100秒
\frac {50*(10^6)\lg 10^6条指令}{10^7条指令/秒} \approx 100秒
107条指令/秒50∗(106)lg106条指令≈100秒
每秒执行慢的计算机反而耗费时间少,体现了算法设计的重要性!