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

Заполняется массив позиций сдвига относительно крайнего правого символа.

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

  1. Алгоритм поиска подстроки Кнута-Морриса-Прата

Для произвольного слова X рассмотрим все его начала, одновременно являющиеся его концами, и выберем из них самое длинное. (Hе считая, конечно, самого слова X.) Будем обозначать его n(X). Примеры: n(aba)=a, n(abab)=ab, n(ababa)=aba, n(abc) = пустое слово.

Лемма1. Доказать, что все слова n(X), n(n(X)), n(n(n(X))) и т.д. являются началами слова X.

Каждое из них (согласно определению) является началом предыдущего. По той же причине все они являются концами слова X.

Лемма 2. Доказать, что последовательность предыдущей задачи обрывается на конечном слове (на пустом слове).

Каждое слово короче предыдущего.

Лемма 3. Доказать, что любое слово, одновременно являющееся началом и концом слова X (кроме самого X) входит в последовательность n(X), n(n(X)),...

Решение. Пусть слово Y есть одновременно начало и конец X. Слово n(X) - самое длинное из таких слов, так что Y не длиннее n(X). Оба эти слова являются началами X, поэтому более короткое из них является началом более длинного: Y есть начало n(X). Аналогично, Y есть конец n(X). Рассуждая по индукции, можно предполагать, что утверждение задачи верно для всех слов короче X, в частности, для слова n(X). Так что слово Y, являющееся концом и началом n(X), либо равно n(X), либо входит в последовательность n(n(X)), n(n(n(X))), ..., что и требовалось доказать.

Алгоритм Кнута - Морриса - Пратта

Алгоритм Кнута - Морриса - Пратта (КМП) получает на вход слово X = x[1]x[2]...x[n] и просматривает его слева направо буква за буквой, заполняя при этом массив натуральных чисел l[1]..l[n], так что l[i] = длина слова n(x[1]...x[i])

abacaba

l1=a=0=0

l2=ab=0=00

l3=aba=1=001

l4=abac=0=0010

l5=abaca=1=00101

l6=abacab=2=001012

l7=abacaba=3=0010123

Применим алгоритм КМП к слову A#B, где # - специальная буква, не встречающаяся ни в A, ни в B. Слово A является подсловом слова B тогда и только тогда, когда среди чисел в массиве l будет число, равное длине слова A.

  1. Создание и использование модулей.

Модуль в программировании представляет собой функционально законченный фрагмент программы, оформленный в виде отдельного файла с исходным кодом или поименованной непрерывной его части (например, Active Oberon), предназначенный для использования в других программах. Модули позволяют разбивать сложные задачи на более мелкие в соответствии с принципом модульности. Обычно проектируются таким образом, чтобы предоставлять программистам удобную для многократного использования функциональность (интерфейс) в виде набора функций, классов, констант.

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

Модули расширения обычно пишутся на более низкоуровневом языке, что позволяет получить выигрыш в скорости выполнения (производительности) программы.

Модуль – это неисполняемая программа.

Модуль – инструмент разработки библиотек прикладных программ. Особенно явно проявляется при коллективной разработке.

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

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

Структура модуля:

Unit <имя модуля>;

Interface

<интерфейсная часть>;

Implementation

<исполняющая часть>;

Begin

<инициализирующая часть>;

End.

Имя модуля и имя сохраненное на диске должны совпадать.

В интерфейсной части – объявление всех глобальных объектов

В исполняемой части – подпрограммы

Для того чтобы в программе могли применяться функции и процедуры модуля, программист должен добавить этот модуль к проекту и указать имя модуля в списке используемых модулей

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