在java中实现埃及算法

时间:2012-11-01 13:48:27

标签: java algorithm data-structures recursion multiplication

我希望在仅使用加法,减法和比较的情况下递归地找到Java中两个数字的乘法。所以,我用谷歌搜索,发现符合问题要求的Egyptian Algorithm

但是,我不确定在到达base case后如何找到乘法结果。

示例:

13 x  30

1  -- 30

2  -- 60

4  -- 120

8  -- 240 //we stop here because the double of 8 is larger than 13

要查找结果,我们会添加left column中等于13 1+4+8的数字,另一方面我们会添加来自right column的相反数字30+120+240 = 390 { {1}}结果就是这样。

但是现在如何以编程方式完成最后一部分?如何查看要添加的号码?我希望你们明白我的观点。提示只需要。

4 个答案:

答案 0 :(得分:1)

这是解决问题的伪代码:

function egyptian(left, right)
  prod := 0
  while (left > 0)
    if (left is odd)
      prod := prod + right
    left := halve(left)
    right := double(right)
  return prod

基本上,不是等到结束,而是在模板创建时检查模板的每一行,并且如果它属于输出则求和。我在my blog讨论了这个算法。

答案 1 :(得分:0)

以相反的顺序循环创建结果

每次,如果您的被乘数余数(开始等于乘数)大于左列中的数字,则从乘数中减去左列,并将右列添加到结果中(从零开始)。

答案 2 :(得分:0)

您可能已找到此维基百科article

查看“分解”一节的最后一部分。你会找到你必须实现的子算法。

答案 3 :(得分:0)

好的,我是用暴力算法做的。这是一个BigO-(n)。我确信有更有效的方法来实现它。目前。我正在解决这个问题。

谢谢你们!