Слишком мало входных данных:
- каков средний/максимальный размер поля;
- каков средний/максимальный размер искомого элемента;
- что является инвариантным между событиями поиска: поле, искомый элемент или ни то и ни другое.
В зависимости от ответов, возможно, Вашу задачу проще всего решить полным перебором, возможно, достаточно сделать пред.вычисления (кэш), а, возможно, нужны мощные оптимизированные алгоритмы, в т.ч. с эвристиками. Пока нет уточнения по входным данным, предметно отвечать очень тяжело.
Если длина строк меньше 32, то можно искать с помощью битовых масок. Но для выбора оптимального алгоритма нужно знать полный набор масок для поиска. Искомые фигуры состоят только из нулей, или могут быть сочетания нулей и единиц?
Достаточно спорный совет. Для каждой фигуры потребуется длительный процесс обучения HAAR- каскадов. Я думаю, что в простейшем случае достаточно простого попиксельного сравнения. Или какой-нибудь корреляционный метод, если вдруг возможны небольшие отличия.
Я бы искал эти паттерны как подстроки. Строим доп. массив по тому, где встречаются два и три нуля в строке, два и три нуля в столбце. Потом ищем где они образуют фигуры. Можно в лоб написать, можно КМП использовать.
есть нечто похожее для библиотеки aforge c#, может почерпнете какие-нибудь идеи там
можно:
-искать длинную строку из фигуры
-построить интегральное изображение и искать охватывающий прямоугольник с суммой в пределах, зависящих от фигуры(дальше можно и Хаара, или что-то специфическое: уголок - разность квадратов)
-посчитать суммы по строкам и столбцам, искать проекции
решения в лоб:
-ходим фигурой(и, возможно, маской) по массиву:
4 цикла: 2 по координатам и 2 по фигуре
-ходим базовой точкой и массивом относительных смещений и значений:
3 цикла: 2 по координатам и 1 по точкам