编程珠玑--粗略估算

简介:

粗略估算是《编程珠玑》中第七章提到的内容。

 

这篇文章将“粗略估算”看做是一项工程技术,是程序员必备的一项技能之一。

本人非常同意这个观点。粗略估算是一种把复杂的事情简单化的能力。我们对某个算法的时间复杂度和空间复杂度的估算就是基于这种估算的能力。如果你能较为准确的估算出一个程序的输出结果,如果你能准确估算出这个程序的运行时间,如果你能准确估算出这个项目的开发时间……如果你能拥有这样的能力,该有多么美好啊。所以难怪乎像微软、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。

 

当我们设计一个程序的时候,有算法若干,功能需求若干。这时候就需要组织者有足够的估算能力,估算并平衡每个较优算法所付出的时间代价和性能需求。从而做出正确的决定。

 


本文转自轩脉刃博客园博客,原文链接:http://www.cnblogs.com/yjf512/archive/2010/11/05/1869513.html,如需转载请自行联系原作者

目录
打赏
0
0
0
0
56
分享
相关文章
【动态规划刷题 4】礼物的最大价值&&下降路径最小和
【动态规划刷题 4】礼物的最大价值&&下降路径最小和
|
10月前
线性代数——(期末突击)概率统计习题(概率的性质、全概率公式)
线性代数——(期末突击)概率统计习题(概率的性质、全概率公式)
90 1
刷题记录:牛客-WY49数对 | 以数学分析来破解暴力搜索的时间复杂度问题 2023/1/11
这是一个关于编程题解的文章摘要,讨论了一道名为"WY49 数对"的问题。文章指出,暴力搜索的解决方案在大规模问题中效率低下,然后转向通过数学分析来寻找更优解。作者解释了如何根据除数和余数的关系,以及余数的周期性变化来计算满足条件的数对数量。通过将数对中的其中一个数(被模数x)按除数y划分区间,并分析每个区间的余数分布,得出一个公式来计算总数。最后,提供了两种不同的代码实现来展示这个思路,这些代码具有O(n)的时间复杂度和O(1)的空间复杂度。文章强调了理解数学方法在解决此类问题中的重要性,特别是对于优化算法性能的作用。
135 3
软考:计划评审技术(PERT)三点估算法计算工期、标准差、完成概率
软考:计划评审技术(PERT)三点估算法计算工期、标准差、完成概率
288 0
软考:计划评审技术(PERT)三点估算法计算工期、标准差、完成概率
【数独 1】不回溯,试试候选数法1ms高效解数独谜题-C++实现(上)
【数独 1】不回溯,试试候选数法1ms高效解数独谜题-C++实现(上)
161 0
【数独 1】不回溯,试试候选数法1ms高效解数独谜题-C++实现(下)
【数独 1】不回溯,试试候选数法1ms高效解数独谜题-C++实现(下)
127 0
C/C++买不到的数目题解(内含数论重要结论)
C/C++买不到的数目题解(内含数论重要结论)
C/C++买不到的数目题解(内含数论重要结论)
弄懂“三门问题”,成功概率翻倍,来用代码验证一下
弄懂“三门问题”,成功概率翻倍,来用代码验证一下
298 0
弄懂“三门问题”,成功概率翻倍,来用代码验证一下
划重点!十分钟掌握牛顿法凸优化
之前,我发过一篇文章,通俗地解释了梯度下降算法的数学原理和推导过程,推荐一看。链接如下: 简单的梯度下降算法,你真的懂了吗?
527 0
划重点!十分钟掌握牛顿法凸优化
AI助理

你好,我是AI助理

可以解答问题、推荐解决方案等