lab03_Markov_16_11_2009_print
.pdfАлгоритм зупинився на останньому слові, оскільки до нього вже неможливо застосувати оператор.
Приклад 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→bа}, Б = {bа → ab} і слово з області їхнього перетину aba, тоді A(aba) = baa, Б(aba) = ааb, В(aba)= baaaab.
3. Розгалуження алгоритмів є композицією трьох алгоритмів А, Б і В. Позначаючи результат цієї композиції літерою Д, вважатимемо, що область визначеності алгоритму Д співпадає з перетином областей визначеності всіх трьох алгоритмів А, Б і В для будь-якого слова р з цього перетину Д(р) = А(р), якщо Б(р) = е, Д(р) = Б(р) і В(р) ≠ е, де е – порожній рядок.
Рис.2.4. Приклад розгалуження алгоритмів
Приклад 5.
Задані алгоритми А = {ab→bа), Б = {bа → ab}, В = {аb → a, bа → е} у алфавіті Х={а, 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 → bа}, Б = {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
