«основной» java.lang.StackOverflowError для данного алгоритма анализа - PullRequest
0 голосов
/ 29 апреля 2018

Я знаю, что об этом много спрашивали, но я не мог понять свою проблему.

Я пытаюсь понять сложность времени, но я получаю эту ошибку: Исключение в потоке "основной" java.lang.StackOverflowError at 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, но все еще получаю сообщение об ошибке

Спасибо.

1 Ответ

0 голосов
/ 29 апреля 2018

В вашей JVM недостаточно памяти. Вам нужно просто назначить это больше.

...