在我巴里·伯姆的悼词上周在这篇博客中,我凭记忆提到了他经典著作中的一个练习软件工程经济学教材(Prentice Hall, 1981)。现在我摸到了这本书,发现它比我记忆中的还要好。这是完整的练习文本。第9页,练习1.4。我希望引用1981年教科书中的一项练习,即使全部引用,也能被合理使用。
他们不再写这样的教科书了!
<波姆软件工程经济学锻炼引用>
会计部门的玛丽·琼斯告诉你,她有一个人事档案[2022年更新:Excel表格]并要求你开发一个程序来计算档案中人员的年龄中位数。这里有四种不同的回应方式:
(a)调用按年龄递增对人事档案进行排序的程序。数一数档案中人事记录的数量,N。在排序后的文件中找到记录N/2。提取其“年龄”的值".
(b)注意在计算机编程的艺术[Knuth, 1973], Vol. III, pp. 209-220,获得中值的问题是寻找i的问题的一个特殊情况thr·w·弗洛伊德(R.W. Floyd)提出了一种递归方法,以3/ 2n +的平均值求中位数O(N2/3o (log N))的比较。花几个星期的时间尝试改进Floyd的算法(但没有成功),花一天的时间对Floyd的算法进行编程,然后回到Mary Jones,问她一些关于文件大小和格式的问题。
(c)问Mary多久需要这些结果,她愿意为此支付多少钱,有多少记录,N,她的人事档案有,以及她多久会跑一次。如果N很大,她想要经常、快速、便宜的结果,问她是否对平均值满意,这更容易计算,也更便宜。如果不是,与玛丽一起工作,以获得中位数的方法,这是她的各种目标之间的最佳折衷。
(d)计算平均年龄,并打印出来作为中位数。编程要容易得多,Mary Jones可能永远不会注意到其中的区别。
将这些响应按照它们与编程考虑因素、经济考虑因素或其他重要考虑因素的相对关系排序。如果您是程序员,您更喜欢哪种方法?如果你是玛丽·琼斯,你会选择哪种方法?
< /波姆软件工程经济学锻炼引用>
Bertrand Meyer是瑞士沙夫豪森理工学院的教授,也是艾菲尔软件公司(Goleta, CA)的首席技术官。
没有发现记录