5.5 计时
大量的测试使我们确信该搜索程序是正确的。接下来如何确信该程序完成二分搜索任务需要大约 次比较呢?下面是计时脚手架的主循环:
while read(algnum, n, numtests) |
该代码计算在n个不同元素构成的数组中进行一次成功的二分搜索所需要的平均运行时间。代码首先初始化数组,然后对数组中的每一个元素执行numtests次搜索。switch语句选择需要测试的算法(脚手架应该总是可以对数个不同的程序进行检测)。print语句报告三个输入值和两个输出值:时钟的原始值(观察这些值总是很关键)以及一个更容易解释的值(本例中为用纳秒表示的每次搜索的平均运行时间,纳秒单位在print语句中由转换系数1e9给出)。
下面是该程序在400 MHz Pentium II计算机上实际运行的情况(与以往一样,键入的输入数据采用斜体表示):
1 1000 10000 |
第一行在一个1 000元的数组上对算法1(到目前为止我们一直在研究的二分搜索)进行了10 000次测试,共花费了3 445个时钟单位(在该系统中用毫秒表示)。也就是说平均每次搜索需要344.5纳秒的时间。随后的三个测试每次将n扩大10倍,而将测试的次数减少为前一次的十分之一。搜索的运行时间看起来大约是50+30log2n纳秒。
接下来我编写了一个三行的程序来生成计时脚手架的输入。输出采用图形打印出来。如图所示,平均的搜索开销确实按 增长。习题7研究了该脚手架的一个潜在的计时错误。在研究该习题之前,请先不要太相信这些数。
|
| 回书目 上一节 下一节 |