Количество подматриц с заданными ограничениями из матрицы?

#c #algorithm #data-structures

#c #алгоритм #структуры данных

Вопрос:

Это вопрос, заданный на одном собеседовании. Я хотел бы знать наилучший оптимальный алгоритм для получения желаемых результатов. Вопрос в следующем: учитывая, что у вас есть матрица (n x m) с некоторыми числами в ней. Теперь вам нужно подсчитать количество матриц размера> = (2 x 2), которые будут иметь следующие два условия :

  • В нем должно быть не менее двух единиц ;
  • Два угловых элемента матрицы равны.

Я знаю алгоритм перебора всех элементов матрицы 2 x 2 и больше; затем подсчитываю количество единиц и проверяю 6 возможных условий угловых элементов, при которых любые два из них равны. Я хочу знать, как справиться с этими проблемами или каким-либо источником, поскольку я ничего не смог найти в «GeeksforGeeks» или в самом StackOverflow, наиболее оптимизированным способом.

Комментарии:

1. Ну, я прошу просто подход к решению проблемы в нескольких строках, который можно было бы предпринять. Потребуется любая структура данных или что-то в этом роде..

Ответ №1:

Это подсказка к оптимизированному способу.

Сначала постройте (n, m) матрицу, которая подсчитывает количество 1 в (1-i, 1-j) подматрице: n m операций, n m памяти

Теперь для каждого элемента матрицы выполните поиск всех элементов после из ниже, которые равны

  • если в той же строке вы можете использовать любую строку ниже, чтобы получить матрицу с 2 углами, равными
  • если в том же столбце вы можете использовать любой столбец после, чтобы получить матрицу с 2 углами, равными
  • если ни в одной строке, ни в одном столбце у вас нет ровно одной матрицы с 2 углами, равными
  • разница элементов крайних углов эквивалентной матрицы от предварительно вычисленной — это количество единиц в подматрице
  • как только в одной подматрице будет более 2 единиц, все подматрицы, включая ее, также будут иметь: вы можете использовать его для короткого замыкания полного анализа

Выше приведены только грубые края, и еще предстоит некоторая работа по разработке алгоритма, но это должно быть немного лучше, чем грубая сила для достаточно больших матриц…