Ну, метод грубой силы выглядит примерно так:
- Для n строк имеется 2 n подмножеств.
- Для n столбцов существует 2 n подмножеств.
- Для матрицы n x n имеется 2 2n подмножеств.
0 элементов является допустимым подмножеством, но, очевидно, если у вас 0 строк или 0 столбцов, общее количество равно 0, так что на самом деле есть 2 2n-2 + 1 подмножеств, но это ничем не отличается.
Таким образом, вы можете отработать каждую комбинацию методом грубой силы как алгоритм O ( n ). Быстро. :)
Было бы быстрее выяснить, каково максимально возможное значение, и вы делаете это, складывая все положительные числа в сетке. Если эти числа образуют действительную подматрицу (то есть вы можете создать этот набор, удалив строки и / или столбцы), тогда ваш ответ.
Подразумевается, что если ни одно из чисел не является отрицательным, то полная матрица по определению является ответом.
Кроме того, зная, какой максимальный возможный максимум возможно, позволяет вам сократить оценку грубой силы, поскольку, если вы получите любую комбинацию, равную этому максимуму, то это ваш ответ, и вы можете прекратить проверку.
Также, если все числа не положительны, ответом является максимальное значение, поскольку вы можете уменьшить матрицу до матрицы 1 x 1 с этим значением 1 по определению.
Вот идея: построить 2 n -1 n x m матриц, где 1 <= m <= n. Обработайте их один за другим. Для каждой матрицы n x m вы можете рассчитать: </p>
- максимально возможная максимальная сумма (как указано выше); и
- Если числа не являются положительными, что позволяет вам быстро ответить.
если (1) ниже текущей максимальной максимальной суммы, то вы можете отбросить эту матрицу n x m. Если (2) истинно, тогда вам просто нужно просто сравнить текущую максимальную максимальную сумму.
Обычно это называется техникой обрезки .
Более того, вы можете начать с того, что наибольшее число в матрице n x n является начальной максимальной суммой, поскольку очевидно, что это может быть матрица 1 x 1.
Я уверен, что вы могли бы настроить его на (немного более) эффективный алгоритм рекурсивного поиска на основе дерева с помощью приведенных выше тестов, позволяющих эффективно исключать (надеюсь, много) ненужных поисков.