划分和征服算法

时间:2013-02-18 04:25:44

标签: divide-and-conquer

我们开始使用Divide并在我的数据结构类中征服算法,我在完全理解我应该做什么方面遇到了很多麻烦。下面是基本上要求我编写一个总结一个数组的程序,但它必须划分并征服它,直到基数为4,我假设这意味着将数组一起添加到4个块然后添加所有大块在一起。我甚至不知道从哪里开始。我只需要一点解释和理解。老师没多大帮助。该数组包含一行数量,其中2的幂小于1000

问题 编写一个分而治之的算法,用于求和n的数组 tegers。这个算法的基本情况是当大小时 子问题小于或等于4,在这种情况下你将使用 迭代循环来求和子问题的整数。你需要这样做 以下内容:

2 个答案:

答案 0 :(得分:3)

我猜你打算写一个递归方法,将数组A分成两个(或更多)子数组,每个子数组的一半,然后将结果数组传递给自己,以便继续拆分直到你有一个数组4号;然后你可以执行你的总和并返回这4个单位的总和。

答案 1 :(得分:3)

让我们暂时不要考虑编程语言,并思考这种方法的抽象方法。


想象一下,如果你在一个有二十叠纸的房间里,每个纸上都有一个数字。你愿意做所有数字工作的工作'总计在一起,但你意识到一个接一个地去永远。所以,你打电话给一个朋友,你们每个人都可以互相交换10个筹码。您通过致电您的朋友所做的工作量减少了一半。

你们都意识到,你们不会在任何地方拿到十叠纸,所以你们每个人都会打电话给另一个朋友伸出援助之手,让你们四个人分别拥有5个筹码。合理,但仍然势不可挡。所以每个人都会再次打电话给另一位朋友,并与其他朋友一起减少筹码 - 让所有人留下2.5叠纸上的数字。

你们都同意这是一个人要完成的合理工作量,所以你可以将这些数字加在一起。从最后一组人中找到自己,每个人都返回他们所拥有的数字的总和,直到你拥有其他人的总和,并且你拥有自己的数字。你将这两者结合起来得到你的结果。

这是分而治之的原则:你的工作堆被分成几部分工作,然后你可以调用其他方法来做。

这是Python中的伪示例。

def sum(*args):
    if len(args) == 0:  # Nothing in my list, so I'm done
        return 0
    elif len(args) == 1:  # One thing in my list, return that
        return args[0]
    else:  # Too much for me to handle; call in the Calvary!
        return args[0] + sum(args[1:])