Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
aralab28_3.doc
Скачиваний:
1
Добавлен:
22.11.2018
Размер:
695.81 Кб
Скачать

Тривиальный алгоритм

В данном алгоритме в качестве структуры данных для словаря используется список. Временная сложность исполнения процедуры СОЗДАНИЕ И ИСПОЛЬЗОВАНИЕ СЛОВАРЯ может быть оценена величиной O((k+n)n).

Алгоритм с использованием авл-дерева

В данном алгоритме в качестве структуры данных для словаря используется АВЛ-дерево. Временная сложность исполнения процедуры СОЗДАНИЕ И ИСПОЛЬЗОВАНИЕ СЛОВАРЯ может быть оценена величиной O((k+n)log(n)).

Задания для лабораторной работы № 3

  1. Написать программу, реализующую тривиальный алгоритм и алгоритм с использованием АВЛ-дерева для решения поставленной задачи, основываясь на псевдокоде процедуры СОЗДАНИЕ И ИСПОЛЬЗОВАНИЕ СЛОВАРЯ.

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

  • количество букв в алфавите,

  • число n слов в словаре,

  • число k слов в последовательности,

  • количество s букв в словах,

  • способ независимого друг от друга задания слов словаря (множество S) и слов последовательности P из числа следующих:

  • непосредственный ввод,

  • псевдослучайное образование слов выбранной длины, составленных из равновероятно встречающихся букв алфавита,

  • образование требуемого количества слов, являющихся по выбору либо лексикографически минимальными, либо лексикографически максимальными в данном алфавите A.

Выходом данной программы должно быть время работы T1 тривиального алгоритма и время работы T2 использующего АВЛ-деревья алгоритма в секундах.

  1. Провести эксперименты на основе следующих данных:

    1.  S и P составлены из n и k соответственно псевдослучайных семибуквенных слов в 33-буквенном алфавите, n=104+1, k=1, … ,104+1 с шагом 100 (нарисовать графики функций T1(k) и T2(k)),

    2.  S и P состоят из n и k соответственно лексикографически минимальных семибуквенных слов в 33-буквенном алфавите, n=104+1, k=1,…,104+1 с шагом 100 (нарисовать графики функций T1(k) и T2(k)),

    3.  S состоит из n лексикографически минимальных, а P состоит из k лексикографически максимальных семибуквенных слов в 33-буквенном алфавите, n = 104+1, k = 1, … ,104+1 с шагом 100 (нарисовать графики функций T1(k) и T2(k)).

  2. Сформулировать и обосновать (на основе псевдокодов алгоритмов и практических данных, для получения которых можно провести дополнительные эксперименты) вывод о том, в каких случаях целесообразно применять тривиальный алгоритм, а в каких ― алгоритм, использующий АВЛ-деревья.

3.4. Поиск фрагмента в тексте Постановка задачи

Для слов Y = YY2 … Yn и X = XX2 … Xm в алфавите A найти все вхождения слова Y в X. В дальнейшем под решением этой задачи мы будем понимать такую функцию f: {1, 2, … ,m}{0, 1, 2, … , n}, что f[j] = n, если YY2 … Yn =X j-(n-1) X j-(n-2) … X j (на j-ой букве слова X заканчивается очередное вхождение в него слова Y), и f[j]<n в противном случае. Для избавления псевдокодов алгоритмов от мешающих их пониманию деталей, мы будем в дальнейшем считать, что 1≤n≤m.

Наивный алгоритм поиска фрагмента в тексте

Суть данного алгоритма иллюстрируется рамкой длины n, движущейся по слову X. Если фрагмент слова X, находящийся в рамке, совпадает со словом Y, это означает, что очередное вхождение слова Y в X найдено.

procedure SFT_TRIVIAL(X; m; Y; n; var f);

begin

for i:= 1 to n-1 do f[i]:= 0;

for i:= n to m do begin

s:= 1;

while (Y[s] =X[i-(n-s)]) (s<n) do s:= s+1;

if (s=n) (Y[n] =X[i]) then f[i]:= n else f[i]:= 0;

end;

end;

Временная сложность наивного алгоритма есть O(nm).

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