Рекурсивная обратная связь - поиск элемента в отсортированном двумерном массиве в Java - PullRequest
0 голосов
/ 26 апреля 2020

Я кодирую поиск в обратном направлении в отсортированном двумерном массиве в Java, и происходят странные вещи.

Алгоритм должен найти первое вхождение данного элемента k в массив (сначала строки, затем колонны). Затем он должен также показать, по какому индексу было найдено данное число.

Я написал итерационный алгоритм итеративно, и он работает, но после перекодирования его как рекурсивного - нет.

Для массива

10 10 10 10 10 20 20 30 20 20 20 40

И k: 20

Выводит, что k не может быть найдено в данном массиве.

Также - алгоритм должен иметь меньшую сложность чем O (n, m) ^ 3, так что любые другие советы алгоритма будут оценены.

Вот мой код:

static boolean RekPier(int tab[][], int i, int j, int m, int n, int k){

        System.out.println(i + " " + j + " " + tab[i][j]);

        if (tab[i][j] == k && i < m && j < n){
            findex = i;
            lindex = j;
            return true;
        }

        else if((tab[i][j] > k || tab[i][n-1] < k) && (i < m && j < n)){

            int i1 = i+1;

            if(i1 == m) return false;

            RekPier(tab, i1, 0, m, n, k);
        }

        else if (i < m && j < n){

            int j1 = j+1;

            if(j1 == n) return false;

            RekPier(tab, i, j1, m, n, k);
        }

        return false;
    }

1 Ответ

0 голосов
/ 26 апреля 2020

В вашей реализации были некоторые ошибки, но я изменил функцию следующим образом:

static int RekPier(int arr[][], int i, int j,int M ,int N,int Value)
{
    // If the entire column is traversed
    if (j >= M)
        return 0;

    // If the entire row is traversed
    if (i >= N)
        return 1;

    if(arr[i][j] == Value){
        System.out.println("Row:" +i +'\t' +"Column:" +j);
    }

    // Recursive call to traverse the matrix in the Horizontal direction
    if (RekPier(arr, i,j + 1, M, N,Value) == 1)
        return 1;

    // Recursive call for changing the Row of the matrix
    return RekPier(arr,i + 1,0, M, N,Value);
}

Та же сложность, что и у вас

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...