Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:

lab03_Markov_16_11_2009_print

.pdf
Скачиваний:
41
Добавлен:
12.02.2016
Размер:
515.95 Кб
Скачать

Алгоритм зупинився на останньому слові, оскільки до нього вже неможливо застосувати оператор.

Приклад 3 (використання спецсимволу)

А={а, b}. Видалити з непорожнього слова р його перший символ. Порожнє слово не міняти.

Розв’язок. Зрозуміло, що видаливши перший символ слова, необхідно одразу ж зупинитися. Потрібно певним чином помітити перший символ слова, наприклад, поставивши перед ним який-небудь знак, наприклад *, який відмінний від символів алфавіту слова р. Після цього вже можна за допомогою операторів вигляду *λ замінити цей знак і перший символ λ слова на пробіл і зупинитися:

bbaba *bbaba baba

Операція поставити * перед першим символом реалізується оператором →* з порожньою лівою частиною, яка, за визначенням, приписує свою праву частину зліва до слова.

Отримуємо наступний НАМ:

*a (1)

*b (2)

 

* (3)

 

Перевіримо НАМ на вхідному слові bbaba:

3 2

bbaba *bbaba baba

Розроблений НАМ зациклиться на порожньому вхідному слові, оскільки постійно застосовуватиметься оператор (3), а згідно умови на такому слові НАМ повинен зупинитися. Ми ввели знак * для того, щоб помітити перший символ слова, а потім знищити * і цей символ. Але в порожньому слові немає жодного символу, тому оператори (1) і (2) жодного разу не спрацюють і постійно виконуватиметься оператор (3). Отже, щоб врахувати випадок порожнього вхідного слова, потрібно після операторів (1) і (2) записати ще один оператор, який знищує єдину у слові зірочку і зупиняє алгоритм:

*a (1)

*b (2)

* (3)

 

* (4)

 

11

Узагальнимо прийом із зірочкою, який ми використали у прикладі 3. Нехай в оброблюване слово р входить декілька підслів α :

і нам потрібно замінити одне з входжень α на підслово β. Така заміна здійснюється за допомогою оператора α→β. Проте, якщо ми застосуємо цей оператор до слова р, тоді буде замінено перше входження α. Що робити, якщо потрібно замінити інше входження α, наприклад друге або останнє? Щоб на β замінювалося не перше входження α, а якесь інше, це інше входження необхідно певним чином помітити, для чого потрібно поряд з ним (зліва або справа) поставити деякий символ, скажімо *, відмінний від усіх інших символів, які входять в р:

Такий символ називається спецсимволом. Його задача - виділити потрібне входження α серед інших, зробити його унікальним. Оскільки лише біля цього входження є спецсимвол, то потрібно використовувати формулу *α→β, щоби замінити на β саме це входження α, а не якесь інше.

2.6 Композиції нормальних алгоритмів Маркова

Розглянемо основні способи композиції нормальних алгоритмів. Нові алгоритми можуть бути побудовані з уже відомих алгоритмів шляхом застосування різних способів композиції алгоритмів:

1.cуперпозиція;

2.об’єднання;

3.розгалуження;

4.повторення.

1.При суперпозиції двох алгоритмів А і Б вихідне слово першого алгоритму А розглядається як вхідне слово другого алгоритму Б. Результат суперпозиції алгоритмів А і Б можна представити у вигляді В(р)= Б(А(р)). Суперпозиція може виконуватися для будь-якої скінченої кількості алгоритмів.

2.Об’єднанням алгоритмів А і Б в одному і тому ж алфавіті X називається алгоритм В у тому ж алфавіті, який перетворює будь-яке слово р, що міститься на перетині областей визначеності алгоритмів А і Б в записаних поруч слова А(р) і Б(р), на всіх інших вхідних словах цей алгоритм вважається невизначеним.

12

Приклад 4.

Задано X= {а, b), A = {ab}, Б = {ab} і слово з області їхнього перетину aba, тоді A(aba) = baa, Б(aba) = ааb, В(aba)= baaaab.

3. Розгалуження алгоритмів є композицією трьох алгоритмів А, Б і В. Позначаючи результат цієї композиції літерою Д, вважатимемо, що область визначеності алгоритму Д співпадає з перетином областей визначеності всіх трьох алгоритмів А, Б і В для будь-якого слова р з цього перетину Д(р) = А(р), якщо Б(р) = е, Д(р) = Б(р) і В(р) ≠ е, де е – порожній рядок.

Рис.2.4. Приклад розгалуження алгоритмів

Приклад 5.

Задані алгоритми А = {ab), Б = {ab}, В = {аb a, е} у алфавіті Х={а, b}. Розглянемо дію алгоритму Д на стрічки aba, bab.

A (aba) = baa

A (bab) = bba

Б (aba) = aab

Б (bab) = abb

В (aba) = aa

В (bab) = e

Д (aba) = aab

Д (bab) = bba

4. Повторення (ітерація) є композицією двох алгоритмів А і Б. Позначаючи результат цієї композиції через В, визначимо, що для будь-якого вхідного слова р відповідне йому вихідне слово В(р) отримується у результаті послідовного багаторазового застосування алгоритму А доти, поки не отримається слово, що переробляється алгоритмом Б у деяке фіксоване слово.

Приклад 6.

Задані алгоритми A = {ab }, Б = {bbbaa ab}.

Тоді В(ababb) = ab, оскільки ababb baabb babab bbaab bbaba bbbaa→ab. Всі розглянуті композиції нормальних алгоритмів приводять до алгоритмів, які нормалізуються.

13

3.КОНТРОЛЬНІ ЗАПИТАННЯ

1.З чого складається алгоритмічна система, заснована на відповідності між словами в абстрактному алфавіті.

2.Що таке нормальний алгоритм Маркова?

3.Правила виконання нормальних алгоритмів Маркова.

4.Як працює алгоритм, визначений граф-схемою?

5.Що таке узагальнені нормальні алгоритми?

6.У чому відмінність між УНА та НАМ?

7.Які способи композиції нормальних алгоритмів Вам відомі?

4.ЛАБОРАТОРНЕ ЗАВДАННЯ

1.Ознайомитись з принципами функціонування алгоритмів Маркова.

2.Одержати індивідуальне завдання (див. Варіанти індивідуальних завдань).

3.Скласти граф-схему алгоритму Маркова або НАМ.

4.Перевірити та проілюструвати роботу розробленого алгоритму.

5.ЗМІСТ ЗВІТУ

1.Мета роботи.

2.Теоретичний аналіз опрацьованого матеріалу.

3.Відповіді на контрольні запитання.

4.Індивідуальне завдання, отримане у викладача.

5.Аналіз отриманих результатів і висновки.

6.Список використаної літератури.

СПИСОК ЛІТЕРАТУРИ

1.А.А. Марков, Н.М. Нагорный. Теория алгорифмов. – М., ФАЗИС, 1996.

2.Алферова З.А. Теория алгоритмов. — М.: Статистика, 1973.

3.М.Брой. Информатика. В 3 томах. Т.1. Основополагающее введение. — М.: Диалог-МИФИ, 1996.

4.Основы кибернетики. Математические основы кибернетики./Под ред. К.А.Пупкова — М.,Высшая школа, 1974.

5.Трахтенброт Б.А. Алгоритмы и вычислительные автоматы. — М.: Сов.радио, 1974.

6.Успенский В.А. Машина Поста. — М. Наука, 1988.

7.Манин Ю.И. Вычислимая и невычислимое. — М.: Сов. радио, 1980.

8.Мальцев А.И. Алгоритмы и вычислимые функции. — М.: Наука, 1986.

9.Матюшков Л.П., Лихтарович А.А. Основы машинной математики:

Пособие для учителя. — Минск: Нар.Асвета, 1988.

10.Миков А.И. Информатика. Введение в компьютерные науки. — Пермь,

ПГУ, 1998.

14

ВАРІАНТИ ІНДИВІДУАЛЬНИХ ЗАВДАНЬ

Зауваження:

1)У завданнях розглядаються тільки цілі додатні числа, якщо не зазначено іншого.

2)Під унарною системою числення розуміється запис додатного цілого числа за допомогою одиниць - повинно бути виписано стільки одиниць яка величина числа; наприклад: 2→ 11, 5 → 11111, 0 → <порожнє слово>.

1.Побудувати граф-схему реалізації алгоритму в алфавіті А = { a, b, c, d}, заданого підстановками: cb→b, ab→c, cd→a

а) визначити, до якого виду нормальних алгоритмів він відноситься; б) розглянути на ньому приклади дедуктивних ланцюжків, задаючи початкові слова довжиною не менше трьох символів.

2.Задати НАМ, який реалізує віднімання А Б, де значеннями А і Б є натуральні числа, представлені рядками, що складаються з символів 1 (наприклад, для А= 4, Б = 3, А Б = 1 слово “1111−111” повинне бути перероблене алгоритмом у слово “1”).

Перевірити роботу алгоритму для випадків:

а) А = 6, Б = 2; б) А = 3, Б = 5.

3.Задати НАМ, який реалізує операцію множення.

4.Задано алфавіт A={a,b,c}. Побудувати НАМ, який у слові p заміняє всі пари cb на a.

5.Задано алфавіт A={a,b,c}. Побудувати НАМ, який у слові p заміняє на а тільки першу пару cb, якщо така є.

6.Задано алфавіт A={a,b,c}. Побудувати НАМ, який приписує слово bac зліва до слова р.

7.Задано алфавіт A={1}. Вважаючи слово р записом числа в одиничній системі числення побудувати НАМ, який отримує остачу від ділення цього числа на 2, тобто отримати слово з однієї одиниці, якщо число є непарним, або порожнє слово, якщо число парне.

15

8.Задано алфавіт A={1}. Вважаючи слово р записом додатного числа в одиничній системі числення, побудувати НАМ, який зменшує це число на 1 (тобто декрементує).

9.Задано алфавіт A={1}. Вважаючи слово р записом числа в одиничній системі числення побудувати НАМ, який збільшує це число на 2.

10.Задано алфавіт A={0,1,2}. Вважаючи слово р записом числа в трійковій системі числення побудувати НАМ, який отримує залишок від ділення цього числа на 2, тобто отримати слово 1, якщо число є непарним, або слово 0, якщо число є парним. (Зауваження: у парному трійковому числі повинна бути парна кількість цифр 1.)

11.Задано алфавіт A={а,b,c}. Побудувати НАМ, який визначає, чи входить символ а в слово р. Відповідь (вихідне слово): слово а, якщо входить, або порожнє слово, якщо не входить.

12.Задано алфавіт A={а,b}. Якщо в слово р входить більше символів а, ніж символів b, то в якості відповіді видати слово з одного символу а, якщо в р рівна кількість а і b, то як відповідь видати порожнє слово, інакше видати відповідь b.

13.Задано алфавіт A={0,1,2,3}. Перетворити слово р так, щоб спочатку йшли всі парні цифри (0 і 2), а потім − всі непарні.

14.Задано алфавіт A={а,b,c}. Перетворити слово р так, щоб спочатку йшли всі символи а, потім − всі символи b і в кінці − всі символи с.

15.Задано алфавіт A={а,b,c}. Побудувати НАМ, який визначає зі скількох різних символів складено слово р; відповідь отримати в одиничній системі числення (наприклад: acaac → 11).

16.Задано алфавіт A={а,b,c}. У непорожньому слові р подвоїти перший символ, тобто приписати цей символ зліва до р.

17.Задано алфавіт A={а,b,c}. За першим символом непорожнього слова р вставити символ с.

18.Задано алфавіт A={а,b,c}. Із слова р видалити другий символ, якщо такий є.

16

19.Задано алфавіт A={а,b,c}. Якщо у слові р не менше двох символів, тоді переставити два перших символи.

20.Задано алфавіт A={0,1,2}. Вважаючи непорожнє слово р записом трійкового числа, видалити з цього запису всі незначущі нулі.

21.Задано алфавіт A={а,b,c}. Приписати слово abc справа до слова р.

22.Задано алфавіт A={а,b,c}. Видалити з непорожнього слова р його останній символ.

23.Задано алфавіт A={0,1}. Вважаючи непорожнє слово р записом числа в двійковій системі отримати двійкове число, яке дорівнює збільшеному вчетверо числу р (наприклад: 101 10100).

24.Задано алфавіт A={а,b}. Нехай слово р має непарну довжину. Видалити з нього середній символ.

25.Задано алфавіт A={а,b}. У слові р всі символи а замінити на b, а всі (колишні) символи b − на а.

26.Задано алфавіт A={а,b,c}. Подвоїти кожен символ у слові р (наприклад: bacb → bbaaccbb).

27.Задано алфавіт A={а,b}. Приписати справа до слова р стільки одиниць, скільки всього символів входить в р (наприклад: babb → babb1111).

28.Задано алфавіт A={а,b}. Нехай слово р має парну довжину (0, 2, 4…). Видалити праву половину цього слова.

29.Задано алфавіт A={а,b}. Нехай довжина слова р кратна 3. Видалити праву третину цього слова.

30.Задано алфавіт A={а,b}. Приписати справа до слова р стільки одиниць, із скількох підряд символів а починається це слово (наприклад: aababa → aababa11).

31.(а) Задано алфавіт A={а,b,c}. Видалити зі слова р друге входження символу а, якщо таке є.

(б) Задано алфавіт A={а,b,c}. Видалити зі слова р третє входження символу а, якщо таке є.

17

32 Задано алфавіт A={а,b}. Якщо у непорожньому слові р співпадають перший і останній символи, то видалити обидва цих символи, а інакше слово не міняти.

33(а) Задано алфавіт A={а,b,c}. Залишити в слові р тільки перше входження символу а, якщо таке є.

(б) Задано алфавіт A={а,b,c}. У непорожньому слові р залишити тільки останній символ.

34.Задано алфавіт A={а,b}. Визначити, чи є слово р паліндромом. Відповідь: слово а, якщо є, або порожнє слово інакше.

35.Задано алфавіт A={а,b,c}. Зі всіх входжень символу а в слові р залишити лише її останнє входження, якщо таке є.

36.Задано алфавіт A={а,b,c}. Якщо слово р починається з символу а, то замінити р на порожнє слово, інакше р не міняти.

37.Задано алфавіт A={а,b}. Якщо слово р містить одночасно символи а і b, тоді замінити р на порожнє слово.

38.Задано алфавіт A={а,b,c}. Якщо букви в непорожньому слові р не впорядковані за абеткою, то замінити р на порожнє слово, а інакше р не міняти.

39.Задано алфавіт A={а,b,c}. Якщо р відрізняється від слова abaca, тоді замінити його на порожнє слово.

40.Задано алфавіт A={0,1}. Вважаючи непорожнє слово р записом двійкового числа, визначити чи є це число степенем 2 (1, 2, 4 .). Відповідь: слово 1, якщо є, або слово 0 інакше.

41.Задано алфавіт A={0,1,2,3}. Вважаючи непорожнє слово р записом четвіркового числа, перевірити, чи воно є парним. Відповідь: слово 0, якщо є парним, і слово 1 інакше.

42.Задано алфавіт A={0,1,2,3}. Вважаючи непорожнє слово р записом четвіркового числа отримати залишок від ділення цього числа на 4.

18

43.Задано алфавіт A={0,1}. Вважаючи непорожнє слово р записом двійкового числа, отримати це ж число, але в четвірковій системі. (Зауваження: врахувати, що у двійковому числі може бути непарна кількість цифр.)

44.Задано алфавіт A={0,1,2}. Вважаючи непорожнє слово р записом трійкового числа, збільшити це число на 1.

45.Задано алфавіт A={0,1,2}. Вважаючи непорожнє слово р записом додатного трійкового числа, зменшити це число на 1.

46.Задано алфавіт A={1}. Вважаючи слово р записом числа в унарній системі числення отримати запис цього числа в трійковій системі. (Рекомендація: слід в циклі видаляти з унарного числа по одиниці і кожного разу додавати 1 до трійкового числа, яке спочатку прирівняти до 0.)

47.Задано алфавіт A={0,1,2}. Вважаючи непорожнє слово р записом числа в трійковій системі отримати запис цього числа в одиничній системі.

48.Задано алфавіт A={а,b,c}. Визначити, чи входить перший символ непорожнього слова р ще раз у це слово. Відповідь: слово а, якщо входить, або порожнє слово інакше.

49.(а) Задано алфавіт A={а,b}. Перенести перший символ непорожнього слова р в кінець слова.

(б) Задано алфавіт A={а,b}. Перенести останній символ непорожнього слова р в початок слова.

50.Задано алфавіт A={а,b}. У непорожньому слові р переставити перший і останній символи.

19

НАВЧАЛЬНЕ ВИДАННЯ

НОРМАЛЬНІ АЛГОРИТМИ МАРКОВА

МЕТОДИЧНІ ВКАЗІВКИ

до лабораторної роботи № 3 з курсу «Алгоритми і структури даних»

для студентів базового напрямку 6.050101 «Комп’ютерні науки»

Укладачі

Керницький Андрій Богданович,

 

Денисюк Павло Юрійович,

 

Мельник Михайло Романович

Редактор

Лобур Михайло Васильович

Комп’ютерне верстання

Керницький Андрій Богданович,

 

Денисюк Павло Юрійович

20

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