Это был один из моих вопросов на собеседовании.
У нас есть матрица, содержащая целые числа (диапазон не указан).Матрица случайно заполняется целыми числами.Нам нужно разработать алгоритм, который находит те строки, которые точно соответствуют столбцу (столбцам).Нам нужно вернуть номер строки и номер столбца для совпадения.Порядок соответствия элементов одинаков.Например, если i-я строка соответствует j-му столбцу, а i-я строка содержит элементы - [1,4,5,6,3].Тогда j-й столбец также будет содержать элементы - [1,4,5,6,3].Размер nx n.Мое решение:
RCEQUAL(A,i1..12,j1..j2)// A is n*n matrix
if(i2-i1==2 && j2-j1==2 && b[n*i1+1..n*i2] has [j1..j2])
use brute force to check if the rows and columns are same.
if (any rows and columns are same)
store the row and column numbers in b[1..n^2].//b[1],b[n+2],b[2n+3].. store row no,
// b[2..n+1] stores columns that
//match with row 1, b[n+3..2n+2]
//those that match with row 2,etc..
else
RCEQUAL(A,1..n/2,1..n/2);
RCEQUAL(A,n/2..n,1..n/2);
RCEQUAL(A,1..n/2,n/2..n);
RCEQUAL(A,n/2..n,n/2..n);
Принимает O (n ^ 2).Это правильно?Если правильно, есть ли более быстрый алгоритм?