126
Порівняти
результати виконання завдань 2
і
3,
визначив-ши
загальну кількість порівнянь символів
підрядка х
із
символами
рядка s.
Виконати завдання 1 для випадку, коли довжина рядка s перевищує 255 символів.
Виконати завдання 5 для підрядка х довжиною понад 255 символів у рядку s довжиною в 10 000 символів, протестував-ши його для випадку, коли підрядок х входить у рядок s:
на початку рядка s;
посередині рядка s;
у кінці рядка s;
декілька разів у рядок s.
7. Порівняти результати виконання завдань 3 і 6, визначив- ши загальну кількість порівнянь символів підрядка х із сим волами рядка s.
Теорія автоматів - це один із розділів інформатики. Якщо бути точнішими, то теорія автоматів належить до теоретично! інформатики і вивчає методи, за допомогою яких можна на ос-нові моделей логічного типу вивчати процеси, що протікають у різних пристроях під час обчислень.
Почнемо з уведення загальних понять теорії автоматів.
У широкому тлумаченні автоматами називають пристрої, які виконують процеси приймання, перетворення та передачі енергії, матеріалів або інформації відповідно із закладеними у них програмами.
В інформатиці під автоматом розуміють перетворювач ін-формації, для якого задаються множини вхідних сигналів А, внутрішніх станів Q, вихідних сигналів V, а також дві функції: функція переходів станів 6 та функція виходів X.
Схематично роботу автомата можна зобразити так (мал. 42):
|
Q |
w |
|
^ |
Мал. 42
I ще нам треба ввести такі два поняття: скінченний вхідний алфавіт, який насправді є множиною елементів, над якими може виконуватися перетворення даним автоматом, напри-клад множина натуральних чисел або латинські літери, та слово - підмножина алфавіту, над якою безпосередньо і відбу-вається перетворення, тобто яку обробляє автомат у даному
127

конкретному
випадку, налриклад задане натуральне
число N
або
деякий текст латинськими літерами.
Іншими словами,
«слово» - це вхідна
інформація.
Якщо введет нові поняття здаються вам складними, то на-справді це зовсім не так. Розберемося з ними детальніше, і все стане напрочуд зрозумілим. Згодом навіть виявиться, що ми вже користувалися алгоритмами, які реалізують скінченні автомати. Термін «скінченний» пояснимо, коли детальніше на прикладах ознайомимося з поняттям автомата.
Для кращого розуміння, почнемо з формулювання задачі, розв'язування якої ми розглянемо в термінах автомата. Нехай задана послідовність натуральних чисел а[і], і - 1, 2, ..., п, у якій треба всі числа, що перевищують 7, замінити на 7.
Завданням автомата є обробка за певною програмою інфор-мації, яка подається йому у вигляді «слова». У нашому випадку таким «словом» є задана послідовність дійсних чисел. «Слово» складається з окремих елементів а - заданих натуральних чисел, що входять до множини вхідних сигналів А, тобто до множини натуральних чисел. Функція переходів визначає, в який стан q' із множини можливих станів Q перейде перетво-рювач, якщо він перебувае у стані q i на вхід надійшов сигнал а: б(<у, а) = q'. У термінах нашої задачі це означає, що коли на деякому кроці в послідовності значень а[і] буде оброблятися число, значения якого перевищує 7, то воно буде замінено на 7. Тобто при обробці числа а[і] > 7 спрацює функція переходу 6: а[і] :- 7 і перетворить число, яке більше за 7 (вхідний сигнал), на число 7. Зауважимо, що q' також входить до множини Q.
Функція виходів у результат! виконання функції перетво-рення показує, який при цьому виробляється вихідний сигнал v, що належить множит вихідних сигналів V: k(q, а) = v. У нашому прикладі вихідних сигналів буде два: один - про-довження введения дійсних чисел у випадку, коли і < п, і завершения введения, коли і > п. Перший позначимо, наприклад, О, другий - I.
Стандартним описом скінченного автомата є таблиця, яку називають таблицею перетворень.
Отже, представимо описаний скінченний автомат, що реа-лізує поставлену задачу у вигляді такої таблиці переходів (табл. 11): у рядках розмістимо можливі стани виконання алгоритму - перехід до наступного елемента заданої послідов-ності та заміну поточного елемента на 7; у стовпчиках — усі можливі значения елементів послідовності. На перетині відпо-відних рядків і стовпчиків розміщене посилання на функцію переходу, яку описує даний елемент таблиці. Наприклад, якщо поточний елемент послідовності дорівнює 2, то переходимо до розгляду наступного елемента, якщо ж 8, то спочатку робимо
128
заміну його значения на 7, а потім знову переходимо до розгля-ду наступного елемента. Алгоритм завершиться, коли припиши-ься введения елементів послідовності.
Таблицяіі
|
^~~~\^^ Вхіда, Стан q, \^^ |
1 |
2 |
... |
6 |
7 |
8 |
... |
|
?,(і := і + 1) |
9і |
9і |
Яг |
9і |
9і |
92 |
Яг |
|
92(а[і]:=7) |
9і |
9і |
Ь |
аі |
9і |
?і |
?і |
Тепер можна визначитися щодо назви «скінченні автомата». Справа в тому, що у нашому випадку всі множини сигна-лів А та V і внутрішніх станів Q дискретні, тобто порційні, а їх елемента ізольовані один від одного: послідовність вхідних дійс-них чисел (а[ї\, і - 1, 2, ..., п), перетворення значень деяких із них за умовою задачі (якщо а[ї] > 7, тоді а[і]:- 7), завершения виконання задачі (і > п). Дискретною є і послідовність момен-тів, у які надходять вхідні сигнали, отримуються вихідні та змінюються внутрішні стани: перехід до введения наступного значения а[ї\ відбувається лише після завершения обробки попереднього.
Будемо говорити, що якщо множини сигналів і станів скін-ченні, то автомат, обо перетворювач, називається скінченним.
Наведемо означения скінченного автомата в термінах алго-ритмізапії, оскільки саме цей розділ інформатики знаходиться в полі нашого зору і саме методами побудови алгоритмів ми займаємося.
Скінченним автоматом будемо називати алгоритм, у якому передбачено обробку скінчешюї кількості всіх можливих ситуацій та переходу вхідної інформації за скінченну кіль-кість кроків із заданого початкового стану в кінцевий.
Тепер, коли поняття скінченного автомата стало досить про-зорим, можна навести чимало прикладів із тих задач, які ми раніше розв'язували, і тепер сформулювати їх у нових термі-нах. Наприклад, задача, яка передбачає введения недодатних значень для змінних, що можуть набувати лише натуральних чисел; контроль за перемиканням клавіатури на ту чи іншу абетку при введенні текстової інформації тощо.
Розглянемо ще кілька задач, алгоритми яких можна пред-ставити у вигляді скінченних автоматів.
■ ) Ыфораттщгя 9 l»11 і
129
Нехай треба визначити правильність розміщення круглих дужок у заданій математичній формулі. Для спрощення вва-жатимемо, що вхідна інформадія задається у вигляді тексту, який містить натуральні числа, знаки арифметичних операцій (+, -, •, /) і відкриті та закриті круглі дужки.
Алгоритм визначення коректності розставлених круглих дужок в арифметичному виразі полягає в покроковому збіль-шенні лічильника k у випадку «(» та його зменшення у випадку «)» . Якщо протягом виконання алгоритму виконається умо-ва k < О, то це означатиме, що порушено баланс відкритих та закритих дужок і далі виконання алгоритму не мае змісту. Якщо перегляд вхідної інформації завершено, то ознакою ко-ректності розміщення круглих дужок в арифметичному виразі є виконання умови k »= 0.
Які ситуації нам потрібно обробляти, тобто які внутрішні стани можуть бути? Перше - це перехід до наступного символу у випадку, коли він не є дужкою, та перевірка завершеності введения інформації. Друге - підрахунок відкритих круглих дужок, тобто збільшення лічильника ft на 1. Третє — підра-хунок закритих круглих дужок, тобто зменшення лічильника k на 1. Четверте — перевірка співвідношення k < 0, тобто кон-тролювання ситуації, коли закритих дужок стане більше, ніж відкритих. П'яте - завершения роботи автомата. Робота такого автомата представлена у вигляді таблиці 12.
Таблиц* 12
|
^-. Вхід а, Стенд, ^--^ |
0 |
1 |
... |
9 |
+ |
- |
|
/ |
( |
) |
|
q, (перехід до наступного символу при і< п) |
4v 0/1 |
7,. o/i |
9ii 0/1 |
4v 0/1 |
9,. 0/1 |
9v 0/1 |
7i' o/i |
7,. 0/1 |
72. 0/1 |
78. 0/1 |
|
д., (збільшення лі- чильника к для «(» на 1) |
?4.0 |
<74.0 |
7,-0 |
7,-0 |
g4.o |
<7,. 0 |
7..0 |
7„0 |
7..0 |
74>0 |
|
<73 (зменшення ЛІ- чильника k для «)» на 1) |
?4.0 |
?4'0 |
g4,o |
«/4,0 |
94.° |
?4.0 |
?4.0 |
74-0 |
74.0 |
74-0 |
|
qt (Error: k < 0) |
4v 1/0 |
4v 1/0 |
<7,. 1/0 |
4v I/O |
1v 1/0 |
Si |
4v I/O |
7p I/O |
7,-1/0 |
7,. I/O |
|
qb (Stop: к - 0) |
Я,Л |
?5. 1 |
<75. 1 |
9e.l |
Ї..1 |
75.1 |
95.1 |
75.1 |
75,1 |
75.1 |
130
У комірках на перетині відповідних станів та елементів вхідної інформації будемо вказувати дві величины: значения функції переходу 6(9,, а.) та через кому значения функції вихо-ду X(q., cif) (табл. 12).
Значениям функції переходу 6 може бути одне з можливих значень, указаних у переліку станів qr Значениям функції выходу К може бути 0 (робота автомата продовжуеться) та 1 (робота автомата припиняється).
Для зручності значения функції виходу будемо вказувати так. Якщо результат цієї функції однозначний, то будемо вказувати одне це значения, якщо ж значень може бути два, за-лежно від виконання умови, яка аналізується, то будемо вказувати два значения: перше - для випадку виконання умови, друге - для випадку ЇЇ невиконання. Наприклад, qv 0/1 означав перехід до стану qi зі значениям функції виходу 0 у разі виконання умови, що аналізується в цьому стані (це означав, що робота автомата продовжуеться), та 1 у разі невиконання умови (робота автомата припиняеться).
Отже, ми представили алгоритм, описаний вище, в іншій формі - у вигляді таблиці переходів скінченного автомата.
Змінимо попередню задачу і будемо контролювати корект-ність написания імен функцій, використання яких передбаче-но умовою задачі. Для спрощення запису таблиці переходів створимо скінченний автомат лише для функції синуса і будемо вважати, що символи «s», «i» та «n» використовуються лише у выклику вказаної функції. Побудуємо таблицю переходів для цієї задачі (табл. 13).
Таблиця 13
|
^\^ Вхід а, Станд, ^--^ |
0 |
1 |
... |
9 |
+ |
- |
|
s |
І |
п |
|
ql (перехід до на- ступного символу при і < N) |
9,> 0/1 |
9,. 0/1 |
0/1 |
4v 0/1 |
9v 0/1 |
9p 0/1 |
9i> 0/1 |
Яг> 0/1 |
Я,Л |
9,.1 |
|
q2 (иерехід до на- стушюго символу при і < N і перєвірка символу «і») |
Яі'1 |
92. 1 |
Яг'1 |
92. 1 |
Яг< X |
qv 1 |
ЯгЛ |
ЯгЛ |
я3> 0/1 |
7,.1 |
|
q3 (перехід до на- ступного символу при j < N і перевірка символу «11») |
я3Л |
98. 1 |
g3.i |
9з»1 |
9,.l |
Ч,Л |
я3Л |
Я3Л |
9а»1 |
9і-0/1 |