用hadoop估算圆周率PI(3.1415926)的值

本文介绍了如何利用Hadoop的PiEstimator示例应用,通过Quasi-Monte Carlo算法估算圆周率的值。这种方法基于统计学,通过在单位正方形内投掷大量虚拟飞镖并计算落在内切圆内的比例来估算PI。Hadoop的并行计算能力使得能够在集群上处理大量样本,避免单机计算资源限制。文章解析了Hadoop MapReduce代码,展示了如何运行和解释结果。
摘要由CSDN通过智能技术生成

原文:http://thinkinginhadoop.iteye.com/blog/710847

 

一、hadoop不适合计算密集型的工作 

以前看过一个PPT: Hadoop In 45 Minutes or Less ,记得上面说hadoop不适合计算密集型的工作,比如计算PI后100000位小数。 

但是,前几天,我却发现了在hadoop自带的examples里,竟然有PiEstimator这个例子!!它是怎么做到的?? 


二、通过扔飞镖也能得出PI的值? 

百度一下,计算PI的方法还真不少。但在hadoop examples代码中的注释写的是:是采用 Quasi-Monte Carlo 算法来估算PI的值。 

维基百科中对Quasi-Monte Carlo的描述比较理论,好多难懂的公式。 

好在google了一把,找到了斯坦福大学网站上的一篇文章:《通过扔飞镖也能得出PI的值?》,文章很短,图文并茂,而且很好理解。 

我这里将那篇文章的重要部分截了个图: 



对上面的图再稍微解释一下: 
1、Figure2是Figure1的右上角的部分。 
2、向Figure2中投掷飞镖若干次(一个很大的数目),并且每次都仍在不同的点上。 
3、如果投掷的次数非常多,Figure2将被刺得“千疮百孔”。 
4、这时,“投掷在圆里的次数”除以“总投掷次数”,再乘以4,就是PI的值!(具体的推导过程参见原文) 

这样也能算出PI的值?相当强悍吧,呵呵。 


在这个算法中,很重要的一点是:如何做到“随机地向Figure2投掷”,就是说如何做到Figure2上的每个点被投中的概率相等。 

hadoop examples代码中,使用了Halton sequence保证这一点,关于Halton sequence,大家可以参考维基百科。 

我这里再总结一下Halton sequence的作用: 
在1乘1的正方形中,产生不重复,并且均匀的点。每个点的横坐标和纵坐标的值都在0和1之间。 

正是这样,保证了能够做到“随机地向Figure2投掷”。 


三、一定要用hadoop吗? 

在《通过扔飞镖也能得出PI的值?》一文中,网页中自带了一个Flash,用ActionScript来计算PI的值。 

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值