当前位置: 代码迷 >> J2SE >> 分治法求:数列最大子序列,出错,求解,多谢
  详细解决方案

分治法求:数列最大子序列,出错,求解,多谢

热度:61   发布时间:2016-04-24 00:29:18.0
分治法求:数列最大子序列,出错,求解,谢谢!
分治法求:数列最大子序列,出错,求解,谢谢!
代码出错信息如下:
Java code
package com.datastructures.capt0020;    public class MaxSubSum {              private static int maxSumRec(int[] a, int left, int right){          if(left==right)//Base case              if(a[left]>0) return a[left];              else return 0;          int center = (left+right)/2;          int maxLeftSum=maxSumRec(a,left,center);          int maxRightSum=maxSumRec(a,center,right);                    int maxLeftBorderSum = 0, leftBorderSum=0;          for(int i=center;i>=left;i--){              leftBorderSum+=a[i];              if(leftBorderSum>maxLeftBorderSum)                  maxLeftBorderSum = leftBorderSum;          }          int maxRightBorderSum=0, rightBorderSum=0;          for(int i=center+1;i<=right;i++){              rightBorderSum+=a[i];              if(rightBorderSum>maxRightBorderSum)                  maxRightBorderSum=rightBorderSum;          }          return maxLeftSum>maxRightSum?(maxLeftSum>(maxLeftBorderSum+maxRightBorderSum)?maxLeftSum:(maxLeftBorderSum+maxRightBorderSum))                                       :(maxRightSum>(maxLeftBorderSum+maxRightBorderSum)?maxRightSum:(maxLeftBorderSum+maxRightBorderSum));      }      /**      * Driver for divide-andconquer maximum contiguous      * subsequence sum algorithm.      * */            public static int getMaxSubSum3(int [] a){          return maxSumRec(a,0,a.length-1);      }              /**      * @param args      */      public static void main(String[] args) {          int [] a = {1,-1,0,2,9,-4,5,7,2,0};          System.out.println((0+a.length-1)/2);          System.out.println(1/2);            //        //System.out.println(MaxSubSum.getMaxSubSum1(a));  //        System.out.println(MaxSubSum.getMaxSubSum2(a));          System.out.println(MaxSubSum.getMaxSubSum3(a));  //        System.out.println(MaxSubSum.getMaxSubSum4(a));          // TODO Auto-generated method stub        }    }  /*错误信息: * Exception in thread "main" java.lang.StackOverflowError[color=#FF0000]    at com.datastructures.capt0020.MaxSubSum.maxSumRec(MaxSubSum.java:13)    at com.datastructures.capt0020.MaxSubSum.maxSumRec(MaxSubSum.java:17)    at com.datastructures.capt0020.MaxSubSum.maxSumRec(MaxSubSum.java:18)    at com.datastructures.capt0020.MaxSubSum.maxSumRec(MaxSubSum.java:18)[/color] * */


------解决方案--------------------
栈溢出了
觉得有点复杂,楼主先把a中元素减少成3个,试试看
------解决方案--------------------
-Xss2M
添加一个参数,默认堆栈的内存只有64K所以会溢出,设置2M试试~
  相关解决方案