【问题标题】:Greatest common divisor with Map Reduce Apache HadoopMap Reduce Apache Hadoop 的最大公约数
【发布时间】:2017-03-26 22:12:42
【问题描述】:

我正在尝试使用Apache Hadoop 实现 GCD 分布式算法,但无法确定可以使用 Hadoop 来完成此任务。

我有一个简单的函数用于查找两个数字的 GCD。 但我需要为数字数组实现 GCD。 所以基本上将输入数组减少为两个数字的小块,然后为每个块执行此函数并组合结果。

private static int gcd(int a, int b) {
    int temp = 0;
    while (b != 0) {
        temp = b;
        b = a % b;
        a = temp;
    }
    return a;
}

我已经尝试过,但无法弄清楚如何使用 Apache Hadoop 来实现这一点。有人可以帮忙完成这项任务吗?或者提供类似算法的实现,以便更好地了解它的工作原理。

输入是一个包含 N 个数字的数组,例如

20,520,320,5,60,30

输出应该是

5

【问题讨论】:

  • 我真的不明白输入是什么。您想计算大量数字的gcd,还是有两个数字的“元组”要分别计算所有这些元组的gcd
  • @WillemVanOnsem 感谢您的回复,我刚刚更新了我的问题
  • 提示:gcd 可以递归应用:gcd {a,b,c,d,e,f} == gcd(gcd(gcd(a,b),gcd(c,d)),gcd(e,f))
  • @WillemVanOnsem ,是的,我知道如何递归地实现它,但是如何使用 Hadoop 来实现呢?
  • @bxfvgekdv:根据我读到的内容,您只能使用 hadoop 进行尾递归吗?

标签: java apache hadoop parallel-processing hadoop2


【解决方案1】:

看看这个块。这应该可以找到数组的 gcd。

gcd=arr[0];
int j=1;
while(j<n)
{
   if(arr[j] % gcd==0)
   {
       j++;
   }
   else
   {
       gcd=arr[j] % gcd;
       i++;
   }
}

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2012-07-07
    • 2016-10-25
    • 1970-01-01
    • 2011-07-21
    • 2014-03-22
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多