算法在计算中的作用
计算机也许是快的,但不是无限快。存储器也许是廉价的,但不是免费的。所以计算时间是一种有限资源,存储器中的空间也一样。
让运行插入排序的一台较快的计算机「计算机A」与运行归并排序的一台较慢的计算机「计算机B」竞争。
每台计算机必须排序一个具有1000万个数的数组「如果这些数是8字节的整数,那么输入将占用大致80MB。」。假设计算机A每秒执行百亿条指令,而计算机B每秒仅执行1000万条指令,结果计算机A就纯计算能力来说比计算机B快1000倍。为了使差别更具戏剧性,假设史上最巧妙的程序员为计算机A用机器语言编码插入排序,并且为了排序n个数,结果代码需要2n^2条指令。进一步假设仅由一位水平一般的程序员使用某种带有一个低效编译器的高级语言来实现归并排序,结果代码需要50nlgn条指令。
为了排序1000万个数,计算机A需要20000秒「(2*(10^7)^2条指令)/(10^10条指令/秒)「多于5.5小时」」,而计算机B需要约1163秒「(50*10^7lg10^7条指令)/(10^7条指令/秒)「少于20分钟」」。
为了排序1亿个数,计算机A需要2000000秒「(2*(10^8)^2条指令)/(10^10条指令/秒)「多于23天」」,而计算机B需要约13287秒「(50*10^8lg10^8条指令)/(10^7条指令/秒)「少于4小时」」。