@orellero

Как найти определенную «фигуру» в двумерном массиве?

Привет!
Есть двумерный массив типа такого:
var matrix = new Array(
[1, 0, 0, 1, 1, 1, 0, 1, 0, 0],
[1, 0, 0, 1, 1, 0, 0, 1, 1, 0],
[0, 1, 1, 1, 0, 1, 0, 0, 0, 1],
[1, 0, 0, 1, 1, 1, 0, 1, 0, 0]
);

Требуется искать определенные "фигуры" внутри массива, например найти
[0, 0],
[0, 0]

или
[0],
[0],
[0, 0, 0]


Подскажите, возможно есть какие либо готовые алгоритмы для такого поиска?
  • Вопрос задан
  • 2096 просмотров
Пригласить эксперта
Ответы на вопрос 5
Слишком мало входных данных:
- каков средний/максимальный размер поля;
- каков средний/максимальный размер искомого элемента;
- что является инвариантным между событиями поиска: поле, искомый элемент или ни то и ни другое.

В зависимости от ответов, возможно, Вашу задачу проще всего решить полным перебором, возможно, достаточно сделать пред.вычисления (кэш), а, возможно, нужны мощные оптимизированные алгоритмы, в т.ч. с эвристиками. Пока нет уточнения по входным данным, предметно отвечать очень тяжело.
Ответ написан
Mrrl
@Mrrl
Заводчик кардиганов
Если длина строк меньше 32, то можно искать с помощью битовых масок. Но для выбора оптимального алгоритма нужно знать полный набор масок для поиска. Искомые фигуры состоят только из нулей, или могут быть сочетания нулей и единиц?
Ответ написан
Комментировать
gbg
@gbg Куратор тега Программирование
Любые ответы на любые вопросы
@SeptiM
Я бы искал эти паттерны как подстроки. Строим доп. массив по тому, где встречаются два и три нуля в строке, два и три нуля в столбце. Потом ищем где они образуют фигуры. Можно в лоб написать, можно КМП использовать.
Ответ написан
Комментировать
@dtestyk
hit or miss transform
image processing/feature extraction/template matching
feature_detection

есть нечто похожее для библиотеки aforge c#, может почерпнете какие-нибудь идеи там

можно:
-искать длинную строку из фигуры
-построить интегральное изображение и искать охватывающий прямоугольник с суммой в пределах, зависящих от фигуры(дальше можно и Хаара, или что-то специфическое: уголок - разность квадратов)
-посчитать суммы по строкам и столбцам, искать проекции

решения в лоб:
-ходим фигурой(и, возможно, маской) по массиву:
4 цикла: 2 по координатам и 2 по фигуре
-ходим базовой точкой и массивом относительных смещений и значений:
3 цикла: 2 по координатам и 1 по точкам
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы