【问题标题】:"main" java.lang.StackOverflowError for a given algorithm analysis给定算法分析的“main”java.lang.StackOverflowError
【发布时间】:2018-04-30 16:08:01
【问题描述】:

我知道这已经被问了很多,但我无法弄清楚我的问题。

我正在尝试获取时间复杂度,但出现此错误: 线程“主”java.lang.StackOverflowError 中的异常 在 MedianAlgorithm2.Select(MedianAlgorithm2.java:22)

当我传递一个数组大小 > 100000 时。

和递归选择方法如下:

public static int Select(int[] A, int l, int m, long h) {   
    int pos = Partition(A, l, h);
    if (pos == m) {
        return A[pos];
    }
    if (pos > m) {
        return Select(A, l, m, pos - 1);
    }
    if (pos < m) {
        return Select(A, pos + 1, m, h); // this is line 22 mentiond in exception
    }
    return 0;
}

public static int Partition(int[] A, int l, long h) {
    int pivotval = A[l];
    int pivotloc = l;   
    for (int j = l+1; j <= h; j++) {
        if (A[j] < pivotval) {
            pivotloc = pivotloc + 1;
            int temp = A[pivotloc];
            A[pivotloc] = A[j];
            A[j] = temp;
        }
    }
    int temp = A[l];
    A[l] = A[pivotloc];
    A[pivotloc] = temp;
    return pivotloc;
}

我已将 h 从 int 更改为 long,但仍然出现错误

谢谢。

【问题讨论】:

  • 如果在对Select 的初始调用中lh 都小于m 或两者都大于m,会发生什么情况? Partition(...) 处理得好吗?附带说明一下,您应该花一些时间研究 Java 命名标准以及对方法和变量的建议。
  • 您还需要发布Partition 代码。

标签: java exception stack-overflow


【解决方案1】:

您的 JVM 内存不足。您需要简单地分配它更多。

【讨论】:

  • StackOverflowError?因为内存不足?请解释你的理由。
猜你喜欢
  • 2014-02-03
  • 2013-11-21
  • 2011-10-29
  • 1970-01-01
  • 1970-01-01
  • 2014-10-28
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多