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

本文介绍了如何使用Hadoop的PiEstimator示例应用通过Quasi-Monte Carlo算法估算圆周率。这种方法基于在1×1正方形内随机投掷点并计算落在单位圆内的点的比例来估算PI。Hadoop通过并行运行多个Map任务在集群上进行大量采样,以确保统计准确。代码解读部分展示了如何利用Halton序列生成均匀分布的点,以及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的值。

用这种算法来估算PI值,其实是一个统计学的方法。如果要估算正确,首先要保证取样足够多(即投掷次数足够多)

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值