Вы не можете найти матрицу n x n
за n
время. Контрпример: матрица нулей с единичным элементом, равным единице. Вы должны проверить каждый элемент, чтобы найти его, поэтому время должно быть не менее O(n^2)
.
Теперь, если вы говорите, что матрица имеет N
= n^2
записей, и вы рассматриваете только подматрицы, которые образуют непрерывный блок, то вы сможете найти самую большую подматрицу, проходя по диагонали по матрице, отслеживая каждого прямоугольника из них, как вы идете. В общем, вы можете одновременно иметь до O(sqrt(N))
активных прямоугольников, и вам нужно будет искать в них, чтобы выяснить, какой прямоугольник был самым большим, поэтому вы должны быть в состоянии сделать это за O(N^(3/2) * log(N))
время.
Если вы можете выбрать произвольные строки и столбцы для формирования вашей подматрицы, то я не вижу никакого очевидного алгоритма полиномиального времени.