您所在的位置: 首页 > 读书频道 > 设计开发 > 其它开发 >

5.5 计时

http://book.51cto.com  2008-09-26 10:56  (美)本特利(Bentley, J.)著/黄倩,钱丽艳译  人民邮电出版社  我要评论(0)
  • 摘要:《编程珠玑:第2版》第5章编程小事,本章着重论述如何将前一章中用伪代码描述的二分搜索程序实现为可靠的C函数。本小节为大家介绍的是计时。
  • 标签:编程  程序员  C函数  编程珠玑

5.5 计时

大量的测试使我们确信该搜索程序是正确的。接下来如何确信该程序完成二分搜索任务需要大约 次比较呢?下面是计时脚手架的主循环:

while read(algnum, n, numtests)
for i = [0, n)
x[i] = i
starttime = clock()
for testnum = [0, numtests)
for i = [0, n)
switch (algnum)
case 1:assert(binarysearch1(i) == i)
case 2:assert(binarysearch2(i) == i)
clicks = clock() - starttime
print algnum, n, numtests, clicks,
clicks/(le9 * CLOCKS_PER_SEC * n *numtests)

该代码计算在n个不同元素构成的数组中进行一次成功的二分搜索所需要的平均运行时间。代码首先初始化数组,然后对数组中的每一个元素执行numtests次搜索。switch语句选择需要测试的算法(脚手架应该总是可以对数个不同的程序进行检测)。print语句报告三个输入值和两个输出值:时钟的原始值(观察这些值总是很关键)以及一个更容易解释的值(本例中为用纳秒表示的每次搜索的平均运行时间,纳秒单位在print语句中由转换系数1e9给出)。

下面是该程序在400 MHz Pentium II计算机上实际运行的情况(与以往一样,键入的输入数据采用斜体表示):

1  1000 10000
1      1000    10000   3445    344.5
1  10000 1000
1      10000   1000    4436    443.6
1  100000  100
1      100000  100     5658    565.8
1  1000000 10
1      1000000 10      6619    661.9

第一行在一个1 000元的数组上对算法1(到目前为止我们一直在研究的二分搜索)进行了10 000次测试,共花费了3 445个时钟单位(在该系统中用毫秒表示)。也就是说平均每次搜索需要344.5纳秒的时间。随后的三个测试每次将n扩大10倍,而将测试的次数减少为前一次的十分之一。搜索的运行时间看起来大约是50+30log2n纳秒。

接下来我编写了一个三行的程序来生成计时脚手架的输入。输出采用图形打印出来。如图所示,平均的搜索开销确实按 增长。习题7研究了该脚手架的一个潜在的计时错误。在研究该习题之前,请先不要太相信这些数。

 
【责任编辑:夏书 TEL:(010)68476606】

回书目   上一节   下一节
上一篇: 5.4 自动测试 下一篇: 5.6 完整的程序
程序员如何成长?
Java编程开发手册
互联网时代的软件革命—SaaS架构设计
ASP.NET 3.5入门经典--涵盖C#和VB.NET(第5版)
Oracle数据库管理艺术:11g新特性
 
 验证码: (点击刷新验证码)   匿名发表
  • 互联网时代的软件革命—SaaS架构设计

  • 作者:叶伟等著
  • 本书是国内第一本完整介绍SaaS应用开发的书籍,聚集于架构设计。内容是互联网领域具有丰富实践经验的8位一线架构师,对于多年Sa..
Copyright©2005-2008 51CTO.COM 版权所有