Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Ponyatie_slozhnosti_algoritma.docx
Скачиваний:
2
Добавлен:
01.07.2025
Размер:
147.01 Кб
Скачать
  1. Алгоритм Кнута-Мориса-Пратта.

В 1970г. Придуман алгоритм КМП, требующий N сравнений.

Идея: начиная каждый раз сравнения с самого начала, уничтожается некоторая полезная информация. При частичном совпадении начальной части образца с соответствующими символами текста, фактически известна пройденная часть и можно «вычислять» сведения (на основе самого образца), с помощью которого потом можно быстро продвинуться по тексту.

В

0 1 j

Пусть нулевой символ – это какой-то Х (в том числе может быть и B)

Х

В

0 1 j

Если на отрезке от 0 до j символа X нету, то можно сдвинуть образец на j позиций, а если имеется вхождение Х, то можно сдвинуться до первого слева вхождения Х.

j – номер несовпадающей позиции

Массив d – массив значений для вычисления сдвига.

j – D[j] – число позиций, на которые можно сдвинуть образец

Образец ABDABD, для него в массиве d окажутся значения: -1,-1,-1,0,1,2.

при несовпадении на i-ой позиции образец можно подвинуть по тексту на:

0: 0 - (-1) = 1

1: 1 – (-1) = 2

2: 2 – (-1) = 3

3: 3 – 0 = 3

4: 4 – 1 = 3

5: 5 – 2 = 3

Анализ:

- сложность построения массива d O(m)

- основной этап имеет сложность O(n)

-можно применять для поиска подстроки в файле, которая считывается не целиком, а блоками.

  1. Алгоритм Боуера-Мура.

Алгоритм поиска строки Бойера — Мура считается наиболее быстрым среди алгоритмов общего назначения, предназначенных для поиска подстроки в строке. Был разработан Робертом Бойером и Джеем Муром в 1977 году. Преимущество этого алгоритма в том, что ценой некоторого количества предварительных вычислений над шаблоном (но не над строкой, в которой ведётся поиск) шаблон сравнивается с исходным текстом не во всех позициях — часть проверок пропускаются как заведомо не дающие результата.

Сканирование слева направо, сравнение справа налево. Совмещается начало текста (строки) и шаблона, проверка начинается с последнего символа шаблона. Если символы совпадают, производится сравнение предпоследнего символа шаблона и т. д. Если все символы шаблона совпали с наложенными символами строки, значит, подстрока найдена, и поиск окончен.

Если же какой-то символ шаблона не совпадает с соответствующим символом строки, шаблон сдвигается на несколько символов вправо, и проверка снова начинается с последнего символа.

  1. Сортировки – общая классификация.

Сортировка – упорядочение элементов множества по возрастанию или убыванию

Классификация алгоритмов сортировки

Устойчивость  — устойчивая сортировка не меняет взаимного расположения равных элементов.

Естественность поведения — эффективность метода при обработке уже упорядоченных, или частично упорядоченных данных. Алгоритм ведёт себя естественно, если учитывает эту характеристику входной последовательности и работает лучше.

Использование операции сравнения. Алгоритмы, использующие для сортировки сравнение элементов между собой, называются основанными на сравнениях.

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

Также алгоритмы классифицируются по:

потребности в дополнительной памяти или её отсутствии

потребности в знаниях о структуре данных, выходящих за рамки операции сравнения, или отсутствии таковой

Мерой эффективности алгоритма внутренней сортировки являются число требуемых сравнений значений ключа сортировки и число перестановок элементов массива.

Простые методы сортировки – выбором, пузырьковая, вставками

Улучшенные – Шелла, Хоара, слиянием

Соседние файлы в предмете [НЕСОРТИРОВАННОЕ]