学习分而治之的算法

时间:2013-02-19 07:18:17

标签: java divide-and-conquer

我一直在努力学习分而治之的算法,我已经想出了我认为可以使用java工作的东西。该算法应该采用大小为n的数组,它是一个基数2.它应该将数组划分为4的基本情况,然后将索引的数据加在一起。然后它将所有这些添加在一起以找到整个数组的总和。这是我到目前为止在java和我的错误中所做的。我至少在正确的分道和征服算法的轨道上?

提出异常:

Exception in thread "main" java.lang.ArrayIndexOutOfBoundsException: 8
at getSum.sumArray(getSum.java:17)
at getSum.sumArray(getSum.java:21)
at getSum.main(getSum.java:7)

以下是代码:

public class getSum {
    static int sum = 0;
    public static void main(String[] args) {
            int[] numbers = {2,2,2,2,2,2,2,2};
            int amount = 0;
           amount = sumArray(0,numbers.length,numbers);
           System.out.print(amount);
    }

    public static int sumArray(int first, int last, int[] A){
        int index = last - first;
        if(index == 1){
            return sum;
        }else if(index <= 4 && index > 1){
            for(int i = first; first < last; i++){
                sum += A[i];
            }
            return sum;
        }
        return (sumArray(first, last / 2, A) + sumArray(last / 2, A.length, A));
    }
}

1 个答案:

答案 0 :(得分:3)

您需要更改:

for(int i = first; first < last; i++){

为:

for(int i = first; i < last; i++){

当您仅增加first

时,您会继续比较lasti

正如@ Some1.Kill.The.DJ指出的那样,

sum应该是方法sumArray

的一部分