Россия, Москва |
Оптимальное программирование процессоров EPIC-архитектуры
КМП-поиск
Данный алгоритм предложен Д. Кнутом, Д. Морисом и В. Праттом [10] и основан на соображении, что в процессе сравнения накапливается полезная информация, которую можно использовать в последующем поиске, "перескакивая" по тексту вперед. А именно, если произошло совпадение при сравнении текста с несколькими начальными символами слова, а затем последовал отрицательный результат сравнения, то для продолжения поиска необходимо сместиться по тексту на число совпавших символов.
В табл. 8.5 показан пример поиска по данному алгоритму. Совпавшие символы на каждом шаге выделены курсивом. Показано, что в случае совпадения двух символов сдвиг слова для последующего сравнения производится на две позиции.
Однако иллюстрируется упрощенный подход. Действительный алгоритм значительно сложнее и основан на предварительном исследовании слова B — на составлении таблицы значений, определяющих величину сдвига при частичном совпадении символов. Такая обработка слова оправдана при значительных размерах текста и при многократном поиске вхождения слова.
Авторы утверждают, что сложность метода составляет O(n+m).
Текст | е | л | е | - | е | л | е | — | с | р | у | б | и | л | и | Е | л | ь |
---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
Слово | е | л | ь | |||||||||||||||
Шаг 2 | е | л | ь | |||||||||||||||
Шаг 3 | е | л | ь | |||||||||||||||
Шаг 4 | е | л | ь | |||||||||||||||
Шаг 5 | е | л | ь | |||||||||||||||
... | ||||||||||||||||||
Шаг 15 | е | л | ь |
На рис. 8.7 представлен план программы для упрощенного варианта КМП-поиска. Анализ этого плана показывает, что, несмотря на усложнившуюся логику, возможно получение компактной программы при некоторых допущениях относительно особенностей выполнения операций. Например, считаем, что условный переход, обозначенный в "длинной" команде, выполняется после окончания выполнения всех операций, предусмотренных в этой же команде.
Структура программы подтверждает принципиальную достижимость "теоретической" сложности упрощенного алгоритма КМП-поиска (она, конечно, выше той, что объявлена авторами). Однако общий случай, требующий расчета специальных таблиц сдвига слова-эталона вдоль текста, приводит к высокой трудоемкости и к сложной логике программы. При существовании других методов полиномиальной сложности использование такого метода нецелесообразно.
О применении БМ-поиска
КМП-поиск дает выигрыш только тогда, когда неудаче предшествовало некоторое число совпадений. В этом случае искомое слово (эталон, образ) сдвигается по тексту более чем на одну позицию.
Однако совпадение символов встречается гораздо реже, чем несовпадение. В связи с этим, Р. Буер и Д. Мур предложили [10] метод, где сравнение символов начинается не с начала, а с конца слова. При обнаружении расхождения между словом и текстом слово сдвигается вправо. Для определения длины сдвига, как и в общем случае КМП-поиска, используется ранее построенная таблица. Иногда слово сдвигается вправо на всю свою длину.
Сложность метода имеет порядок O(n).
Для КМП-поиска удается построить упрощенный вариант, допускающий эффективное программирование. Однако указанная сложность БМ-поиска, по-видимому, носит рекламный характер и не учитывает затрат трудоемкости как на предварительную подготовку таблиц, так и на развившуюся логику программы. Реализация противоположных направлений анализа слова и текста, переменной длины их относительного смещения при наличии многих альтернатив порождает программу весьма большого объема и значительного времени выполнения.
Очевидно, что объявленная "теоретическая" сложность алгоритма недостижима даже на параллельном процессоре EPIC -архитектуры.
Таким образом, зачастую объявленная "теоретическая" сложность алгоритмов не затрагивает все подготовительные работы или неизбежные затраты на организацию вычислительного процесса, которые значительно увеличивают реальную сложность, достигаемую при оптимальном программировании. Это касается и задач поиска при их реализации на процессоре столь развитой архитектуры, какой является EPIC -архитектура.
Учитывая высокое быстродействие при развитом параллелизме, а также полиномиальную сложность методов, целесообразно применение таких методов поиска, как прямой поиск и упрощенный КМП-поиск.