Полагаю, вы хотите что-то подобное. У вас есть матрица, как
1100101
1110101
0100101
Вы хотите столбцы 1,2,5,7 и строки 1 и 2, верно? Эта подматрица будет 4х2 с 8 элементами. Или вы могли бы пойти с колонками 1,5,7 со строками 1,2,3, которые были бы матрицей 3x3.
Если вам нужен «приблизительный» метод, вы можете начать с одного ненулевого элемента, а затем найти другой ненулевой элемент и добавить его в список строк и столбцов. В какой-то момент вы натолкнетесь на ненулевой элемент, который, если бы в вашу коллекцию были добавлены строки и столбцы, ваша коллекция больше не была бы полностью ненулевой.
Таким образом, для вышеприведенной матрицы, если вы добавите 1,1 и 2,2, в вашей коллекции будут строки 1,2 и столбцы 1,2. Если вы попытаетесь добавить 3,7, это вызовет проблему, потому что 1,3 - ноль. Так что вы не могли бы добавить это. Вы можете добавить 2,5 и 2,7, хотя. Создание подматрицы 4x2.
Вы будете выполнять итерации, пока не найдете больше новых строк и столбцов для добавления. Это сделало бы вас слишком локальным минимумом. Вы можете сохранить результат и начать заново с другой начальной точки (возможно, той, которая не вписывается в ваше текущее решение).
Тогда просто остановитесь, когда через некоторое время вы не сможете больше найти.
Это, очевидно, заняло бы много времени, но я не знаю, сможете ли вы сделать это быстрее.