Лучший способ найти определенный шаблон в 2D массиве - PullRequest
7 голосов
/ 08 июня 2011

У меня есть двумерный массив случайных символов.Я хочу сопоставить конкретные шаблоны этих символов: например: ABA, BACKA, идти вверх / вниз / влево / вправо.Каков наилучший алгоритм, чтобы найти этот шаблон?

1 Ответ

1 голос
/ 08 июня 2011

Если это похоже на поиск слова в том смысле, что вы можете идти только в одном направлении (как только вы начнете влево, вы можете продолжать двигаться только влево), ответ должен быть довольно простым, просто идите вперед и проверьте все возможные начальные позиции и идти в каждом направлении. В худшем случае это будет O (mn ^ 2) для n на n. Если вы можете идти вверх / влево / и т. Д. Любое количество раз, самый очевидный способ - обработать матрицу как граф и выполнить BFS или DFS. В зависимости от размера слова и распределения букв это может быть слишком дорого.

Если бы у вас было несколько запросов на одну матрицу, оба этих метода могли бы быть ускорены путем кэширования сгенерированных слов в виде трип-структуры со ссылками на исходные ячейки.

...