粗略估算是《编程珠玑》中第七章提到的内容。
这篇文章将“粗略估算”看做是一项工程技术,是程序员必备的一项技能之一。
本人非常同意这个观点。粗略估算是一种把复杂的事情简单化的能力。我们对某个算法的时间复杂度和空间复杂度的估算就是基于这种估算的能力。如果你能较为准确的估算出一个程序的输出结果,如果你能准确估算出这个程序的运行时间,如果你能准确估算出这个项目的开发时间……如果你能拥有这样的能力,该有多么美好啊。所以难怪乎像微软、Google这样的大公司老喜欢出“请计算飞机场一天有多少飞机起飞和降落?”“请计算美国一年产轿车多少辆?”这样的估算问题!
估算是随着大家的经验增长而越来越准确的。下面介绍几个估算的基本技巧和定理:
1. 72法则
假设以年利率r%投资一笔钱y年,如果r*y=72,那么你的投资差不多会翻倍。
具体例子:
以年利率6%投资1000美元12年,可得到约2000美元(实际数字是2012美元)
以年利率8%投资1000美元9年,可得到约2000美元(实际数字式1999美元)
假设一个指数程序解决规模为n=40的问题需要10秒的时间,并且n每增加1运行时间就增加12%,问当我们把n=100的时候,大约需要多少运行时间?
根据72法则,n每增加6运行时间翻倍,那么当n增加60,运行时间增加为原来的2^10≈1000倍。因此,n=100时,大约需要10 000秒(2~3个小时)。
联合国估算1998年的世界人口为59亿,年增长率为1.33%。如果按照这个速率下去,到2050年人口会是多少?
2050-1998=52; 52*1.33≈70
因此根据72法则,2050年人口约为59*2=118亿。
2. Little定律
队列中物体的平均数量为进入速率与平均停留时间的乘积。
具体例子:
假设你正在排队等待进入一个火爆的夜总会,根据观察,你可以估算:“这个夜总会能容纳60人,每个人在里面逗留时间约是3小时,因此进入夜总会的速率为20人/小时。现在队伍中前面还有20人,因此这意味着我们需要等待大约一个小时的时间。”
请估计一下你所在的城市的死亡率,假设人口的平均寿命为70岁。
Little定律告诉我们,城市的死亡率为1/70。
当我们设计一个程序的时候,有算法若干,功能需求若干。这时候就需要组织者有足够的估算能力,估算并平衡每个较优算法所付出的时间代价和性能需求。从而做出正确的决定。
作者:yjf512(轩脉刃)
本文版权归作者所有,欢迎转载,但未经作者同意必须保留此段声明