【问题标题】:Learning Divide and Conquer Algorithms学习分而治之的算法
【发布时间】:2013-02-03 19:15:14
【问题描述】:

我一直在尝试学习分而治之的算法,并且我想出了我认为可以使用 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));
    }
}

【问题讨论】:

  • 你是新来的吗?至少标记引发异常的行。
  • sum 应该是方法sumArray..的一部分。

标签: java divide-and-conquer


【解决方案1】:

你需要改变:

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

到:

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

当您只增加 i 时,您会一直比较 firstlast

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

sum 应该是方法sumArray 的一部分

【讨论】:

  • 我不敢相信我错过了。我在这种方式上工作太久了
  • 不错的观察..也 sum 应该是方法 sumArray 的一部分,否则它会使总和加倍..
猜你喜欢
  • 2013-02-02
  • 1970-01-01
  • 2012-01-01
  • 2017-06-08
  • 1970-01-01
  • 2013-01-12
  • 2019-06-03
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多