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

Зубенко, Омельчук - Програмування. Поглиблений курс

.pdf
Скачиваний:
52
Добавлен:
07.03.2016
Размер:
4.72 Mб
Скачать

Розділ І. ЛОГІКО-АЛГЕБРИЧНІ УНІВЕРСАЛІЇ

Визначимо регулярну систему мов як Ω -систему з множинами

сортів

ΩS = {Σ,Σ*,B(Σ* )},

констант

ΩC = {a1,a2,...,an ,ε,{ε}}, предикатів

ΩP = {=, } і операцій ΩF

= { ,o,*}, де теоретико-множинне об'єд-

 

def

 

def

нання,

X oY = {xy : x X,y Y },

X * =

Ui , U0 = {ε}, U1 = X ,

 

 

 

 

i =0

Ui =Ui 1 o X . ΩL -терми системи називаються регулярними вираза-

ми, а їхні значення в регулярними мовами. Для спрощення запи- су регулярних виразів використовується пріоритет операцій (відпові- дає порядку операцій у Ωf ), можуть опускатися символ множення o і

фігурні дужки в одноелементних множинах. Наприклад,

{c1,c2}c3 = {c1,c2}o{c3} = {c1c3,c1c3}.

Приклад 1.19. Регулярні мови.

Вирази: 1) {a}* ; 2) a {ba}* ; 3) {aa}* задають регулярні мови:

1){an : n 0};

2){ε,a,ba,baba,bababa,K};

3){a2n : n 0}

Регулярні вирази широко використовуються в сучасних мовах про- грамування22, при побудові лексичних аналізаторів тощо.

Системи алгоритмічних алгебр (САА). Були введені В.М. Глушковим у зв'язку із задачами синтезу й аналізу дискретних перетворювачів інформації та поклали початок застосуванню алгеб- ричних методів у проектуванні ЕОМ і програмуванні.

Сигнатура Ω САА має такий склад:

Ωs = {func,pred}, Ωc = {id,f1,..., fn : func, p1,..., pm : pred},

 

o: func× func a func

 

 

 

 

 

: pred × func a pred

 

Ωp = {=, : func× func}, Ωf

( ): pred× func× func a func

=

.

 

{ }: pred× func a func

 

 

, : pred× pred a pred

 

 

 

 

 

¬ : pred a pred

 

 

 

 

22 Наприклад, у таких мовах, як XML, HTML, Perl, Python та інших мовах WEB- програмування.

81

ПРОГРАМУВАННЯ

Зафіксуємо певну множину A . Нехай F (A) позначає сукупність усіх відображень типу A A , а P (A) усіх предикатів на A . Відо- браження та предикати в САА називають відповідно операторами й умовами. Нехай iA ,F1,...,Fn одиничний і довільні оператори з F (A), а P1,...,Pm умови з P (A). Визначимо САА як Ω -систему FP із мно- жинами сортів ΩS = {F(A),P(A)} , констант ΩC = {iA ,F1,...,Fn ,P1,...,Pm }, предикатів ΩP = {=, } і операцій ΩF = {o,(),{},,¬, , }. В останній

сукупності o множення операторів, далі йдуть відповідно компози- ції розгалуження, ітерації, множення оператора на умову, диз'юнкції, кон'юнкції й заперечення.

Як і в регулярних мовних виразах, для спрощення регулярних САА- термів використовується пріоритет операцій (відповідає порядку в

Ωf ) і опускаються символи множення

o та •. Наприклад,

вираз

f1{ p2 f2 } f4 скорочує мікропрограму

((f1 o{ p2 f2 })o f4 ) , а

вираз

¬p1{ p2 f2 } p4 мікропрограму (¬({ p2 f2 } p1) p4 ).

Якщо сигнатуру САА доповнити символами чотирьох однотипних композицій ↑,,,[] : pred× func a func – відповідно композицій зву-

ження, обмеження, обходу й повторення, а також символом компози- ції недетермінованого вибору ||: pred× func× pred× func a func , то

отримаємо сигнатуру ΩRAA = (Ωs ;Ωc ,Ωv ,Ωf ,Ωp ) регулярної алгоритмі-

чної алгебри.

Вільні Ω -системи. При вивченні й моделюванні Ω-систем важли- ва роль належить вільним Ω -системам. Носієм вільної системи да- ного типу є сукупність T (Ω) усіх можливих типізованих Ω -термів,

що відповідають певній сигнатурі функціональних і предметних кон-

стант-твірних. Нехай

Ω =

(Ωs ;Ωc ,Ωv ,Ωf ,Ωp )

певна сигнатура типу

 

= (σ1,σ2,...;τ1,τ2,K;ν1,ν2,K), а

fi

функціональний

символ типу

τ = s

×...×s

s

.

Тоді

 

йому

відповідає

конструктор

термів fˆ ,

i

i1

 

in

in

+1

ti

,...,ti

 

 

 

 

 

si

,...,si

 

i

який

за

термами

 

 

типів

відповідно

 

будує терм

 

 

 

 

 

 

1

n

 

 

 

 

1

n

 

 

(ti ,...,ti

) типу

 

 

, тобто fˆi

(ti

def

 

(ti

 

).

 

fi

si

,...,ti ) =

fi

,...,ti

Визначимо

 

1

n

 

 

n +1

 

 

 

1

n

 

1

n

 

сукупність T (Ω) як замкнення множини Ωc

предметних констант ві-

82

Розділ І. ЛОГІКО-АЛГЕБРИЧНІ УНІВЕРСАЛІЇ

дносно всіх операцій-конструкторів fˆi сигнатури Ωf . Уся сукупність T (Ω) за означенням поділена на типи. Покладемо, що Tk сукупність

усіх термів типу sk .

 

 

({Tk }, c ,

v ,{fi

 

},{pj })

 

 

-

системою

=

 

типу

назива-

Вільною Ω

 

Ω

Ω

ˆ

τi

ˆ

ється довільна Ω -система на універсумі термів T (Ω) , операції та предика-

ти якої є операціями-конструкторами термів і предикатами на термах відповідних типів.

Одним із найпростіших прикладів вільних

Ω -систем є вільна пів-

група (Σ)= (Σ*,Σ,o,=) слів певного алфавіту Σ з операцією конкате-

нації слів і рівністю.

 

 

Покажемо, що будь-яка Ω -система A = (A;ΩC ,ΩF ;ΩP ) типу із су-

купністю ΩC = {c1 : σ1,c

2 : σ2,...}

констант-твірних і сукупностями

ΩF = {F1τ1 ,F2τ2 ,}, ΩP = {P1ν1 ,P2ν2 ,}

основних операцій і предикатів є

сильною моделлю вільної Ω -системи типу

, тобто система A ізо-

морфна певній фактор-системі /σφ вільної системи типу .

Поняття гомоморфізму багатосортних систем Ω -системи певного типу не відрізняється від аналогічного поняття для звичайних систем. Єдине, що вимагається від гомоморфізму багатосортних систем, – щоб він додатково зберігав тип елементів.

Теорема 1.4 (про вільні Ω -системи). Відображення φ : Ωc → ΩC таке,

що ci φ = ci

, i 1, може бути єдиним чином розширене до гомоморфізму

"на" певної вільної системи

=

({Ts i

},

Ω

Ω

ˆ

τi

ˆ v j

})на систему A .

 

c ,

v ,{fi

 

},{pj

Доведення. Покладемо:

 

 

 

 

 

 

 

 

 

 

 

 

 

1) fˆ τi (ti

,...,ti )

 

def

 

F

τi (ti

φ,...,ti φ)

для кожного функціонального сим-

φ

=

 

i

1

 

n

 

 

 

 

i

1

 

 

 

n

 

 

 

 

 

 

 

 

 

волу f τi

 

типу τ = s

 

×...×s

 

s

 

і всіх термів t

типу s

, 1 k n ;

i

 

 

 

 

i

i1

 

 

 

in

in +1

 

 

 

 

ik

 

ik

 

2) pˆ v j (ti

,...,ti

)

def

 

P νj (ti

φ,...,ti φ)

для кожного предикатного сим-

=

 

j

 

1

 

m

 

 

 

j

1

 

 

m

 

 

 

 

 

 

 

 

 

волу v j типу ν

j

= s

×...×s

 

і всіх термів t

ik

типу s

 

, 1 k m .

j

 

 

 

 

i1

 

 

 

im

 

 

 

 

 

 

ik

 

 

Покажемо, що φ гомоморфізм. Дійсно, за означенням

fˆiτi (ti1,...,tin )φ = fiτi (ti1,...,tin )φ /*означення fˆiτi */ = Fiτi (ti1φ,...,tin φ)/*Def φ*/.

83

ПРОГРАМУВАННЯ

Нехай ϕ : T (Ω) A інший гомоморфізм і ci φ = ci ϕ , i 1. Покажемо, що φ = ϕ . Застосуємо структурну індукцію для термів. База індукції

виконується.

Візьмемо довільний функціональний символ fiτi типу

τi = si1 ×...×sin

sin +1

і довільні терми tik типу sik , 1 k n . Припус-

тимо, що 1 k n виконується ti

φ = ti ϕ . Тоді

fˆ τi (ti

 

 

 

k

k

,...,ti

) ϕ = F

τi (ti

ϕ,...,ti ϕ) /*означення ϕ-гомоморфізму*/ =

i

1

n

i

1

n

 

=Fiτi (ti1φ,...,tin φ) /*індуктивне припущення*)/ =

=fˆiτi (ti1 ,...,tin ) φ /*означення φ-гомоморфізму*/.

Відображення φ : T (Ω) A є відображенням "на", тому що сукуп- ність ΩC за умовою є твірною системи A

Як свідчить теорема 1.1, вибираючи в кожному фактор-класі /σφ

певний Ω -терм за канонічний представник усього класу, завжди мо- жна отримати термальну копію будь-якої системи A й перейти від абстрактних елементів носія A до конкретної множини Ω -термів. Це відкриває універсальний шлях до словарного моделювання будь-яких Ω -систем. Зрозуміло, він не завжди забезпечує необхідний рівень ефективності моделей, але важливо, що такий шлях існує і ним мож- на скористатися.

Нестандартні алгебричні системи. Як зазначалось у підрозд. 1.1,

потреби метаматематики й програмування привели до необхідності узагальнення понять звичайної n -арної операції й алгебричної системи. Одне з найпростіших із них ми вже розглянули поняття багатосортної операції і Ω -системи. Наступними узагальненнями є: 1) перехід від векторів фіксованої довжини до довільних послідовностей (як скінченних, так і нескінченних), а також 2) до довільних скінченних і нескінченних індексованих сукупностей елементів. Дослідження в цих напрямах були розпочаті польськими математиками й логіками всередині минулого сторіччя. Для нових узагальнених операцій було побудовано алгебричну теорію, аналогічну традиційній (теореми про гомоморфізми, конгруенції, вільні алгебри тощо). Деякі з цих результатів викладено в [105]. Потужним імпульсом для прискорення й розвитку подібних результатів стали дослідження з денотаційної та композиційної семантики мов програмування (див.

84

Розділ І. ЛОГІКО-АЛГЕБРИЧНІ УНІВЕРСАЛІЇ

літературу для СР). Ми покажемо, як застосовуються узагальнені операції при описі семантики вихідних систем у підрозд. 2.1.2.

1.4.4. ДЕЯКІ ПРИКЛАДНІ БАГАТОСОРТНІ Ω -СИСТЕМИ

Кілька важливих прикладних Ω -систем уже було розглянуто вище. Продовжимо їхній розгляд.

Матрична алгебра. Нехай R певна сукупність чисел. Числовою матрицею розміром n ×m над R називається вектор A довжиною n , компоненти якого називаються рядками та є, у свою чергу, число- вими векторами довжиною m над R . Для позначення елементів мат-

риці використовують подвійну індексацію й пишуть A = (aij )ni =1mj =1 , де

aij означає j -й елемент у i -му рядку, або просто A = (aij ), якщо n

та

m фіксовані. Якщо n = m , то матриця називається квадратною. Ос-

новними операціями на матрицях є такі. Нехай λ R , c

= (c1,...,cn )

довільний вектор довжиною n на R , A,B,C матриці розмірами ві-

дповідно n ×m , n ×m та m ×k .

 

У результаті множення матриці на скаляр і вектор отримаємо ма-

 

 

def

(λaij )n,m

того самого розміру n ×m і вектор довжи-

трицю λ o A =

 

 

 

i =1, j =1

 

 

 

 

 

def

(dj )m

 

n

 

 

× A =

, dj

= clalj , j =

1,m

.

ною m c

 

 

 

j =1

 

l =1

 

 

 

 

 

Додавання матриць повертає матрицю того самого розміру:

def

(aij +bij )ni =,1,mj =1 .

A + B =

Множення матриць повертає матрицю розміром n ×k :

def

(dij )n k

m

A ×C =

, де dij = ailclj .

 

i =1j =1

l =1

 

 

У матричній алгебрі є багато законів, що виконуються для чисел множини R. Наприклад, додавання цілих матриць асоціативне й ко- мутативне, множення асоціативне тощо (вправа 13).

Реалізація й аналіз алгоритмів матричної алгебри розглядаються в підрозд. 4.2.

85

ПРОГРАМУВАННЯ

Списки, стеки й черги. Кортежі, елементами яких можуть бути інші кортежі, називаються списками. Зафіксуємо певну множину U , елементи якої називаються атомами. Побудуємо сім'ю множин Ui :

U0 =U , Ui +1 =Ui Ui* , i > 0 . Отже, U1 складають атоми й кортежі з атомів. Останні називають лінійними списками. До U2 додаються ко-

ртежі кортежів і т. д. Сукупність списків Lst =U визначається як

def

U = i =1Ui \U0 .

Приклад 1.20. Списки.

Нехай U = {A,B,C,+,,*,/,[,]}, тоді

A атом;

[ ] порожній список; [A] лінійний список;[A] нелінійний список;

[A,+,B ],*,C , *,[+,A,B ],C ,[A,B,+,C,*].

Останні три списки подають різні форми термів для арифметично- го виразу (A + B )* C . Це відповідно (A + B )* C – інфіксна форма;

*(+(A,B ),C ) префіксна форма та A B +C * – ОПЗ. Звичайна пост- фіксна форма цього виразу має вигляд ((A,B )+,C )*

Основними операціями на списках є: cons :U ×Lst Lst – дода- вання ліворуч елемента до списку; конкатенація списків; вставлення й вилучення елементів зі списку; пошук елементів у списку; перевір- ка, чи не є список порожнім. Визначимо операцію cons : для атома

u U та списку s Lst

cons (u,s) = [u,s].

 

Сукупність стеків

St утворюють лінійні списки

з U1 , тобто

St =U1 \U ,

але операції в них інші: push :U ×St St ,

read : St U ,

pop : St St

і предикат empty : St Bool , а саме:

 

push(a,[a1 ,...,ak ])= [a1 ,...,ak ,a] додати елемент у стек; read ([a1 ,...,ak ])= (k > 0 ak |#) прочитати елемент у стеку;

pop([a1 ,...,ak ])= (k > 0 [a1 ,...,ak 1]|#) зняти елемент зі стеку;

86

Розділ І. ЛОГІКО-АЛГЕБРИЧНІ УНІВЕРСАЛІЇ

empty (s) s = [ ] перевірка, чи є стек порожнім.

Як бачимо, зі стеку можна видалити лише той елемент, що був до-

даний останнім (останнім прийшов першим пішов), тому стеки ще називають списками LIFO (англ. – Last-In, First-Out).

Сукупність Qn черг, як і стеків, утворюють лінійні списки з U1 , тобто Qn =U1 \U . Вони мають ті самі операції, що й стеки, але відріз- няються означенням операцій read : St U та pop : St St :

read ([a1 ,...,ak ])= (k > 0 a1|#);

pop([a1 ,...,ak ])= (k > 0 [a 2 ,...,ak ]|#).

Із черги можна видалити лише той елемент, який перебуває в ній найдовше (першим прийшов першим пішов), тому черги також на-

зивають списками FIFO (англ. – First-In, First-Out).

Програмні моделі списків, стеків, черг і реалізація основних опера- цій з ними розглядаються в підрозд. 4.3.

Орієнтовані графи. Мультиграфи. Мережі. Орієнтовані графи

(надалі просто графи) є певною спеціалізацією поняття бінарного відношення. До цього розглядались найбільш загальні властивості бі- нарних відношень. Тепер ми зробимо наступний крок і, обмежившись скінченним відношенням, розглянемо тонші зв'язки між його елемен- тами. Саме завдяки цим зв'язкам графи знайшли широке застосу- вання в інформатиці. Зокрема це стосується подання складнострук- турованої інформації. Фактично ми хочемо перейти від загального поняття до глибшого розглядання певного його фіксованого смисло- вого варіанта. При подібних переходах семантика понять залишаєть- ся незмінною, а от синтаксис і термінологія часто підлаштовуються під нові постановки задач достатньо згадати перехід від загального поняття кортежу до його спеціалізації у вигляді векторів, матриць, слів, списків, черг, стеків.

Графом називається пара G = (V ,R ), де V сукупність вершин, а R G ×G скінченне бінарне відношення на V , елементи якого на- зиваються ребрами. Про ребро (a,b) R кажуть: 1) воно зв'язує вер-

шину a з вершиною b ; 2) a є початком ребра, а b його кінцем; 3) ребро виходить із вершини a і заходить у вершину b . Графи та їхні фрагменти зручно подавати графічно, для чого на площині виби- рають точки-вершини та з'єднують їх стрілками-ребрами (рис. 1.6):

87

ПРОГРАМУВАННЯ

 

1

 

2

3

4

 

 

 

5

Рис. 1.6

Граф називається порожнім, коли порожньою є одна з двох його складових. Якщо порожня сукупність ребер, то в графічному поданні будуть відображені тільки вершини, якщо ж порожньою є й сукуп- ність вершин, то графічне подання буде теж порожнім. Однак у будь- якому разі слід пам'ятати, що, незалежно від подання, порожній граф має такий самий статус, як і всі інші графи. Шляхом у графі назива- ється послідовність ребер, в якій початок кожного наступного ребра збігається з кінцем попереднього. Ко-шлях це послідовність ребер, в якій кінець кожного наступного ребра збігається з початком попере- днього. Зв'язок послідовність шляхів і ко-шляхів така, що початок кожного наступного члена збігається з кінцем попереднього. Цикл це скінченний шлях, в якому початок і кінець збігаються. Шлях (ко- шлях) максимальний, якщо його не можна продовжити. Початкова вершина це вершина, в яку не входить жодне ребро. З кінцевої вер- шини не виходить жодного ребра. Ізольована вершина є одночасно й початковою, і кінцевою. Граф зв'язний, якщо між кожними його дво-

ма вершинами є зв'язок. Підграфом графа G = (V ,R ) називається граф G = (V ,R), де V V , а RR . Підграф графа є його фрагмен-

том, якщо він містить усі зв'язки графа між вершинами фрагмента. Проілюструємо введені поняття на прикладі незв'язного графа. Приклад 1.21. Розглянемо граф, зображений на рисунку. Він має

такі цикли: 2 5 3 2; 2 ; 4 – останні два є петлями.

Початкові вершини – 1 та 6. Кінцеві вершини – 4 та 6. Ізольована вершина – 6. Підграф, що містить вершини 12 3 4 5 і всі ребра, зв'язний.

88

Розділ І. ЛОГІКО-АЛГЕБРИЧНІ УНІВЕРСАЛІЇ

6

1

4

3

5

Неорієнтованим називається граф G = (V ,R ) із симетричним від-

ношенням R . У зображенні такого графа на площині дві стрілки, що з'єднують певну пару вершин, замінюють однією лінією без напрямку

(див. прикл. 1.22).

Мережа зв'язний граф без циклів.

Зважений граф трійка (G,α,β), де G граф, α функція, облас- тю визначення якої є сукупність вершин G , β функція, областю ви-

значення якої є сукупність ребер G .

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

Приклад 1.22. Зважені мультиграф (а) і неорієнтований граф (б):

 

 

 

1

 

 

1

1

 

 

2

4

 

2

 

 

 

 

 

 

 

 

1

3

2

1

3

 

 

 

 

 

 

 

 

 

 

 

1

 

5

5

 

3

 

 

 

 

 

4

 

 

4

3

 

4

 

 

 

 

 

 

 

 

 

 

a)

 

 

 

b)

 

89

ПРОГРАМУВАННЯ

Розгляду й реалізації деяких важливих алгоритмів на графах при- свячено підрозд. 4.6.

Дерева. Деревом називається граф, в якому існує початкова вер- шина корінь, з якої в будь-яку іншу вершину існує рівно один шлях. Вершини дерева називаються вузлами.

Лема 1.5 (про дерево). Граф є деревом коли виконуються умо- ви: 1) у графі є тільки одна початкова вершина; 2) у будь-який вузол входить рівно одне ребро; 3) усі шляхи скінченні.

Доведення. Див. вправу 33

Кінцеві вершини дерева називаються листками. Нескладно впев- нитись, що будь-який зв'язний фрагмент дерева є деревом, яке нази- вається піддеревом із коренем у даному вузлі. У бінарному дереві ко- жне піддерево складається з кореня, з'єднаного з двома піддеревами, одне або два з яких (у випадку листків) можуть бути порожніми. За- звичай ці два піддерева впорядковані між собою, одне з них назива- ється лівим, а друге правим. Висотою дерева називається найбіль- ша з довжин його максимальних шляхів, тобто найбільша відстань від кореня до листка в дереві. Нехай на множині вузлів дерева задано певний лінійний порядок (V ,p). Бінарне дерево називається деревом

пошуку, якщо в ньому для кожного вузла вершини лівого піддерева менші за нього, а вершини правого більші. Відомо, що час перевір- ки, чи належить даний елемент дереву пошуку, не перевищує його висоти. Збалансовані дерева це дерева, в яких для будь-якої верши- ни кількість елементів у лівому й правому піддеревах відрізняється не більше ніж на 1. Зрозуміло, що для збалансованого дерева в загально- му випадку час пошуку кращий. Проте іноді в дереві можуть бути зо- всім відсутні ліві або праві піддерева. Такі дерева називаються виро- дженими. Висота їх дорівнює кількості вузлів у дереві. Для таких де- рев пошуку пошук елемента перетворюється на звичайний послідов- ний пошук. Тому інколи при кожному вставленні елемента в дерево пошуку дерево корегують так, щоб воно було збалансованим.

Проілюструємо введені поняття.

Приклад 1.23. На рисунку зображено дерево з початковою вер- шиною (вузлом) 1 і листками 5 , 6 , 7 , 9 (а). Максимальні шляхи в ньому: 12 5 , 12 6 , 13 7 , 14 8 9 . Таким чином, висота дерева дорівнює 3 . На рис. б), в) зображені відповідно збалансоване й незбалансоване цілочислові дерева пошуку.

90

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