Московский государственный университет путей сообщения
Опубликован: 22.12.2006 | Доступ: свободный | Студентов: 2440 / 570 | Оценка: 4.07 / 4.02 | Длительность: 16:07:00
ISBN: 978-5-9556-0071-0
Специальности: Разработчик аппаратуры
Лекция 8:

Оптимальное программирование процессоров EPIC-архитектуры

< Лекция 7 || Лекция 8: 123456 || Лекция 9 >

КМП-поиск

Данный алгоритм предложен Д. Кнутом, Д. Морисом и В. Праттом [10] и основан на соображении, что в процессе сравнения накапливается полезная информация, которую можно использовать в последующем поиске, "перескакивая" по тексту вперед. А именно, если произошло совпадение при сравнении текста с несколькими начальными символами слова, а затем последовал отрицательный результат сравнения, то для продолжения поиска необходимо сместиться по тексту на число совпавших символов.

В табл. 8.5 показан пример поиска по данному алгоритму. Совпавшие символы на каждом шаге выделены курсивом. Показано, что в случае совпадения двух символов сдвиг слова для последующего сравнения производится на две позиции.

Однако иллюстрируется упрощенный подход. Действительный алгоритм значительно сложнее и основан на предварительном исследовании слова B — на составлении таблицы значений, определяющих величину сдвига при частичном совпадении символов. Такая обработка слова оправдана при значительных размерах текста и при многократном поиске вхождения слова.

Авторы утверждают, что сложность метода составляет O(n+m).

Таблица 8.5.
Текст е л е - е л е с р у б и л и Е л ь
Слово е л ь
Шаг 2 е л ь
Шаг 3 е л ь
Шаг 4 е л ь
Шаг 5 е л ь
...
Шаг 15 е л ь

На рис. 8.7 представлен план программы для упрощенного варианта КМП-поиска. Анализ этого плана показывает, что, несмотря на усложнившуюся логику, возможно получение компактной программы при некоторых допущениях относительно особенностей выполнения операций. Например, считаем, что условный переход, обозначенный в "длинной" команде, выполняется после окончания выполнения всех операций, предусмотренных в этой же команде.

План программы КМП-поиска

Рис. 8.7. План программы КМП-поиска

Структура программы подтверждает принципиальную достижимость "теоретической" сложности упрощенного алгоритма КМП-поиска (она, конечно, выше той, что объявлена авторами). Однако общий случай, требующий расчета специальных таблиц сдвига слова-эталона вдоль текста, приводит к высокой трудоемкости и к сложной логике программы. При существовании других методов полиномиальной сложности использование такого метода нецелесообразно.

О применении БМ-поиска

КМП-поиск дает выигрыш только тогда, когда неудаче предшествовало некоторое число совпадений. В этом случае искомое слово (эталон, образ) сдвигается по тексту более чем на одну позицию.

Однако совпадение символов встречается гораздо реже, чем несовпадение. В связи с этим, Р. Буер и Д. Мур предложили [10] метод, где сравнение символов начинается не с начала, а с конца слова. При обнаружении расхождения между словом и текстом слово сдвигается вправо. Для определения длины сдвига, как и в общем случае КМП-поиска, используется ранее построенная таблица. Иногда слово сдвигается вправо на всю свою длину.

Сложность метода имеет порядок O(n).

Для КМП-поиска удается построить упрощенный вариант, допускающий эффективное программирование. Однако указанная сложность БМ-поиска, по-видимому, носит рекламный характер и не учитывает затрат трудоемкости как на предварительную подготовку таблиц, так и на развившуюся логику программы. Реализация противоположных направлений анализа слова и текста, переменной длины их относительного смещения при наличии многих альтернатив порождает программу весьма большого объема и значительного времени выполнения.

Очевидно, что объявленная "теоретическая" сложность алгоритма недостижима даже на параллельном процессоре EPIC -архитектуры.

Таким образом, зачастую объявленная "теоретическая" сложность алгоритмов не затрагивает все подготовительные работы или неизбежные затраты на организацию вычислительного процесса, которые значительно увеличивают реальную сложность, достигаемую при оптимальном программировании. Это касается и задач поиска при их реализации на процессоре столь развитой архитектуры, какой является EPIC -архитектура.

Учитывая высокое быстродействие при развитом параллелизме, а также полиномиальную сложность методов, целесообразно применение таких методов поиска, как прямой поиск и упрощенный КМП-поиск.

< Лекция 7 || Лекция 8: 123456 || Лекция 9 >