You are on page 1of 100

- Grafy i rekurencje -

1



Grafy i Rekurencje


















Janusz Marecki
- Grafy i rekurencje -
2
Spis treci

Rozdzia I Koncepcja grafu ___________________________________________________ 7
I. 1 Czym jest graf ______________________________________________________________ 7
I. 2 Relacje zwizane z grafem ____________________________________________________ 8
I. 3 Wierzchoki grafu ___________________________________________________________ 9
I. 4 Pod-grafy _________________________________________________________________ 10
I. 5 Orientacja grafu ___________________________________________________________ 11
I. 6 Szczeglne przypadki grafw_________________________________________________ 13
I. 7 Izomorfizm grafw _________________________________________________________ 15
Rozdzia II Spjno grafu___________________________________________________ 16
II. 1 acuchy w grafie _________________________________________________________ 16
II. 2 Grafy spjne______________________________________________________________ 17
II. 3 Drzewa __________________________________________________________________ 21
II. 4 Drzewa waciwe __________________________________________________________ 25
II. 5 Grafy silnie spjne_________________________________________________________ 26
II. 6 Porzdek grafu____________________________________________________________ 28
II. 7 Rozkad grafu_____________________________________________________________ 29
Rozdzia III Algorytmy grafowe_______________________________________________ 31
III. 1 Przeszukiwanie grafu______________________________________________________ 31
III. 2 Klasy silnie spjne ________________________________________________________ 33
III. 3 Maksymalne skojarzenia___________________________________________________ 36
III. 4 Najkrtsze cieki z jednym rdem_________________________________________ 39
III. 5 Najkrtsze cieki z wieloma rdami _______________________________________ 44
III. 6 Drzewa rozpinajce _______________________________________________________ 47
Rozdzia IV Algorytmy numeracji _____________________________________________ 50
IV. 1 Sowa ___________________________________________________________________ 50
IV. 2 Permutacje ______________________________________________________________ 51
IV. 3 Kod Graya ______________________________________________________________ 54
Rozdzia V Funkcje rekursywne ______________________________________________ 58
V. 1 Funkcje rekursywnie prymitywne ____________________________________________ 58
V. 2 Konstrukcja funkcji rekursywnie prymitywnych________________________________ 60
V. 3 Kodowanie cigw_________________________________________________________ 63
V. 4 Rekurencja nie prymitywna _________________________________________________ 66
V. 5 Rodzaje funkcje rekursywnych ______________________________________________ 67
V. 6 Teza Churcha ____________________________________________________________ 68
Rozdzia VI Rekursywno i obliczalno _______________________________________ 69
- Grafy i rekurencje -
3
VI. 1 Funkcje rekursywne i Turing obliczalne_____________________________________ 69
VI. 2 Rekursywno funkcji Turing obliczalnych __________________________________ 70
VI. 3 Abstrakcja funkcjonalna ___________________________________________________ 73
VI. 4 Jzyk term____________________________________________________________ 76
VI. 5 Obliczenia na termach _________________________________________________ 77
Rozdzia VII Rwnania rekurencyjne __________________________________________ 81
VII. 1 Zastosowanie rwna rekurencyjnych_______________________________________ 81
VII. 2 Rwnania rekurencyjne liniowe ____________________________________________ 82
VII. 3 Rekurencyjne przepoowienie ______________________________________________ 84
VII. 4 Rwnania rekurencyjne liniowe dowolnego stopnia ____________________________ 86
Rozdzia VIII Przykadowe procesy rekurencyjne ________________________________ 90
VIII. 1 Stan rejestru przesuwajcego _____________________________________________ 90
VIII. 2 Stan procesu montau____________________________________________________ 92
VIII. 3 Fundusz emerytalny _____________________________________________________ 95
VIII. 4 Fundusz amortyzacji_____________________________________________________ 96
VIII. 5 Kredyty ratalne _________________________________________________________ 97

- Grafy i rekurencje -
4


Spis rysunkw

Rysunek 1 Przykadowy graf ________________________________________________________________ 7
Rysunek 2 Grafy kompletne stopnia 1, 2, 3, 4__________________________________________________ 10
Rysunek 3 Grafy wygenerowane przez zbir wierzchokw i krawdzi ______________________________ 11
Rysunek 4 Przykadowy graf zorientowany____________________________________________________ 12
Rysunek 5 Grafy: planarny i nieplanarny_____________________________________________________ 14
Rysunek 6 Graf dwuczciowy przedstawiony na dwa rne sposoby _______________________________ 14
Rysunek 7 Graf K 3,3 nie bdcy grafem planarnym ____________________________________________ 15
Rysunek 8 Dwa grafy izomorficzne__________________________________________________________ 15
Rysunek 9 Graf nieskierowany posiadajcy acuch ____________________________________________ 16
Rysunek 10 Punkt artykulacji w grafie _______________________________________________________ 18
Rysunek 11 Graf podatny na lemat o grafach spjnych __________________________________________ 18
Rysunek 12 Cykl i acuch w grafie _________________________________________________________ 20
Rysunek 13 Graf, las, drzewa ______________________________________________________________ 21
Rysunek 14 Drzewo rozpinajce graf ________________________________________________________ 23
Rysunek 15 Przodkowie, potomkowie, koa i korzenie ___________________________________________ 24
Rysunek 16 Graf podstawowy i graf zredukowany ______________________________________________ 27
Rysunek 17 Graf i jego domknicie przechodnie _______________________________________________ 27
Rysunek 18 Rozkad grafu_________________________________________________________________ 30
Rysunek 19 Las oparty na grafie G__________________________________________________________ 33
Rysunek 20 Proces wyznaczania komponentw silnie spjnych ____________________________________ 36
Rysunek 21 Graf dwudzielny i graf skojarze__________________________________________________ 37
Rysunek 22 Graf przepyww i cieka powikszajca___________________________________________ 39
Rysunek 23 Rezultat dziaania algorytmu Forda Fulkersona ____________________________________ 39
Rysunek 24 Znajdowanie wierzchoka minimalnego_____________________________________________ 40
Rysunek 25 Dziaanie algorytmu Dijkstry_____________________________________________________ 41
Rysunek 26 Niewykonalno algorytmu Dijkstry _______________________________________________ 42
Rysunek 27 Graf dla algorytmu Floyda - Warshalla ____________________________________________ 45
Rysunek 28 Podzia cieki dla algorytmu Floyda Warshalla ____________________________________ 47
Rysunek 29 Numerowanie permutacji________________________________________________________ 53
Rysunek 30 Drzewo wywoa rekurencyjnych przy generowaniu permutacji__________________________ 53
Rysunek 31 Kod Gray'a i cykl Hamiltona _____________________________________________________ 54
Rysunek 32 Uporzdkowane drzewo podzbiorw_______________________________________________ 55
Rysunek 33 Podzbiory i cykl Hamiltona ______________________________________________________ 56
Rysunek 34 Pokrycie paszczyzny kolejnymi liczbami naturalnymi _________________________________ 64
Rysunek 35 Kodowanie maszyny Turinga_____________________________________________________ 71
Rysunek 36 Proces arytmetyzacji ___________________________________________________________ 73
Rysunek 37 Drzewa reprezentujce termy ____________________________________________________ 78
Rysunek 38 Zmienne wolne i poczone ______________________________________________________ 79
Rysunek 39 Zmiana nazw zmiennych w drzewie ________________________________________________ 79
Rysunek 40 Przerzutnik danych ____________________________________________________________ 90
Rysunek 41 Rejestr przesuwajcy ___________________________________________________________ 90
Rysunek 42 Przykadowa modyfikacja rejestru przesuwajcego ___________________________________ 91
Rysunek 43 Linia montaowa ______________________________________________________________ 92








- Grafy i rekurencje -
5
Sowo wstpne


Na pocztku chciabym podzikowa wszystkim czytelnikom,
ktrzy zdecydowali si poszerza swoj wiedz w dziedzinie grafw i rekurencji
przy wykorzystaniu tego wanie skryptu. Na rynku jest wiele doskonaych
pozycji, ktre poruszaj przedstawion tematyk, jednak s one czsto bardzo
obszerne i rzadko ograniczone tylko do grafw i rekurencji.

Zawarta w tym skrypcie teoria grafw jak rwnie wnikliwe wyjanienie
istoty rekurencji pozwala na zrozumienie caoci materiau bez koniecznoci
korzystania z innych pozycji ksikowych z dziedziny informatyki.

Czym s Grafy i rekurencje?

wiat, w ktrym si znajdujemy, pomimo swojej zoonoci i
niezwykoci da si jednak przedstawi na wiele interesujcych sposobw.
Wprowadzajc bardzo oglny podzia mona doszuka si w nim:
Obiektw
Wasnoci
Relacji
Ten powyszy podzia moe by z powodzeniem reprezentowany przez
odpowiednie grafy, std tak wielkie znaczenie tej struktury danych w
informatyce. Kady wiat nieustannie si jednak zmienia, std by by on dobrze
reprezentowany przez grafy, one same musz podlega zmianom. Czsto
zmiany te s wynikiem dziaania algorytmw.
Za algorytm w duym uproszczeniu moemy uwaa przepis
informatyczny, ktry na podstawie danych wejciowych zwraca nam dane
wyjciowe bdce rezultatami oblicze. Moemy sobie wyobrazi graf, ktrego
wierzchoki bd zbiorami danych, natomiast czce je krawdzie
algorytmami. Taki graf bdzie wycinkiem rzeczywistoci mwicym nam, e
grafy i algorytmy s ze sob cile powizane.
Gdy grafy zawieraj ptle, zaczynamy mwi o rekurencji.
Algorytmy rekurencyjne czsto najlepiej odzwierciedlaj trudne do
analizy problemy, std ich popularno w rodowisku programistw. Mimo i
na pierwszy rzut oka trudno oszacowa ich efektywno i poprawno, istniej
odpowiednie metody, ktre pozwalaj nam to zrobi.






- Grafy i rekurencje -
6

Dla kogo jest ten skrypt?

Skrypt Grafy i rekurencje jest przeznaczony dla studentw informatyki,
ktrzy zaczynaj poznawa algorytmy komputerowe i sposoby ich
zastosowania. Stanowi on doskonae podoe przygotowawcze do innych
przedmiotw takich jak badania operacyjne, bazy danych, sieci komputerowe,
analiza algorytmw, zagadnienia sztucznej inteligencji itp.
Czytelnik pracujcy z tym skryptem powinien jednak posiada znajomo
przynajmniej jednego jzyka programowania, w celu zrozumienia dziaania
algorytmw i umiejtnoci przetwarzania jego rezultatw. Algorytmy
przedstawione s najczciej w pseudo jzyku informatycznym, ktry bazuje
niekiedy na bardziej skomplikowanych strukturach danych, std wskazane jest
posiadanie przez czytelnika gotowych bibliotek z zaimplementowanymi
podstawowymi strukturami danych.

Jak czyta ten skrypt?

Tak jak wspomniano na pocztku, by zrozumie przedstawione w
skrypcie zagadnienia, nie ma koniecznoci korzystania z innych ksiek
informatycznych. Warto jednak zapozna si z rozdziaem I, ktry stanowi
wprowadzenie do tematyki grafw.
Czytanie rozdziau III, w ktrym zaprezentowane zostay podstawowe
algorytmy operujce na grafach powinno by poprzedzone zaznajomieniem si z
rozdziaem II, ktry omawia spjno grafw.
Rozdzia IV moe by czytany oddzielnie, pod warunkiem, e czytelnik
potrafi budowa i analizowa podstawowe algorytmy rekurencyjne. W
przeciwnym wypadku zaleca si zapoznanie z rozdziaem V.
W rozdziale V powiconym funkcjom rekursywnym znajdujemy genez
dzisiejszych algorytmw, czyli najbardziej prymitywne funkcje informatyczne,
ktre s wykonywane bezporednio przez procesor. Rozdzia ten moe by
czytany oddzielnie.
Rozdzia VI skierowany jest gwnie do czytelnikw, ktrzy dobrze
opanowali ju sztuk budowania algorytmw rekurencyjnych i zaley im na
pogbieniu teoretycznej wiedzy z tej dziedziny.
Rozdzia VII, powicony rwnaniom rekurencyjnym moe by czytany
oddzielnie, jednak zalecana jest podstawowa znajomo aparatu
matematycznego pod ktem wielomianw i szeregw potgowych.
W rozdziale VIII przedstawione zostay problemy rekurencyjne, z ktrymi
moemy si spotka na co dzie, dlatego moe od by czytany oddzielnie.

- Grafy i rekurencje -
7

Rozdzia I Koncepcja grafu

I. 1 Czym jest graf

Jeli mamy do czynienia ze schematami obrazujcymi rnorodne
zjawiska i poszukujemy metody prezentacji tych schematw, wykorzystanie
grafw okazuje si niezastpione. Otaczajcy nas wiat czsto da si podzieli
na obiekty i na zachodzce pomidzy nimi zalenoci, co dokadnie odpowiada
wierzchokom grafu, oraz poczeniom midzy wierzchokami.
Kady graf G jest par (X, E) dwch rozcznych zbiorw skoczonych:
X={x
1
, x
2
, ..., x
n
} gdzie n > 0 oraz E={e
1
, e
2
, ..., e
m
} gdzie m > 0, przy czym dla
kadego i e
i
jest par elementw ze zbioru X. Zbir X nazywamy zbiorem
wierzchokw, natomiast E zbiorem krawdzi. Stopie grafu G jest iloci jego
wierzchokw.
Aby unikn nieporozumie, bdziemy uywali oznacze X(G)oraz E(X),
by oznaczy odpowiednio zbir wierzchokw oraz zbir wierzchokw grafu G.
W niektrych publikacjach mona te spotka oznaczenia n(G) i m(G).

Przykad 1
Rozpatrzmy zbir X={1, 2, 3, 4} oraz E={a, b, c, d} gdzie: a={1,2},
b={2,3}, c={3,1}, d={1,3}, e={1,4}, f={4,4}.
Kada krawd (tutaj maa litera alfabetu} jest par dwch wierzchokw.
Tak zdefiniowany graf obrazuje rysunek 1.

1
2
3
4
a
b
c
d
e
f

Rysunek 1 Przykadowy graf



- Grafy i rekurencje -
8
Gdy mamy dan krawd e={x, y} lub stosujc inn notacj: e=xy, mwi
si, e x i y s kracami e. Ponadto stosuje si oznaczenie: e czy x i y, lub e
jest krawdzi o kracach x i y. Wtedy, gdy x=y mwi si, e e jest ptl.
Dwie krawdzie s zwane podobnymi, gdy maj takie same krace. Zbir
krawdzi podobnych nazywany jest krawdzi powtrzon. W powyszym
przykadzie f jest cyklem, natomiast d i c s krawdziami podobnymi.
DEFINICJA Graf nazywamy prostym, gdy nie posiada ptli oraz zbioru
krawdzi powtrzonych.

W informatyce najwiksze zastosowanie ma analiza grafw prostych.


I. 2 Relacje zwizane z grafem

Wierzchoek xX oraz krawd eE s nazywane incydentnymi jeli x
jest kracem e, moemy zatem zdefiniowa relacj X nad E, nazywan relacj
incydencji. Mona rwnie zamieni kolejno i rozwaa relacj E nad X.
Dwa wierzchoki nazywamy ssiadujcymi, gdy s incydentne z t sam
krawdzi. W ten sposb definiuje si relacj na zbiorze X
2
nazywan relacj
ssiedztwa.
Zbir wierzchokw ssiadujcych z x jest nazywany zbiorem ssiadw x
i oznaczany przez N(x).
Wprowadzenie relacji incydencji oraz relacji ssiedztwa sugeruje sposb
przedstawienia grafu. W rzeczywistoci prby narysowania na kartce papieru
grafu duych rozmiarw mogyby zakoczy si niepowodzeniem. Gdy graf jest
zdefiniowany przy uyciu jednej z przedstawionych relacji moemy go
reprezentowa przez macierz odpowiadajc wybranej relacji.

Macierz ssiedztwa

Z kadym grafem G stopnia n utosamia si macierz n x n, A(G) = [a
ij
],
ktrej wiersze i kolumny s indeksowane przez kolejne wierzchoki.
a
ij
= ilo krawdzi o kracach x
i
i x
j
.
Zauwaamy atwo, e tak zdefiniowana macierz jest symetryczna, ponadto gdy
graf jest prosty, wwczas na diagonali macierzy znajduj si 0, a pozostae
elementy nale do zbioru {0,1}.



- Grafy i rekurencje -
9
Macierz incydencji

Z kadym grafem G posiadajcym n wierzchokw i m krawdzi
utosamiamy macierz n x m, B(G) = [b
ij
] , gdzie wiersze indeksowane s przez
kolejne wierzchoki ze zbioru X, natomiast kolumny, krawdziami ze zbioru E.
b
ij
= ilo przypadkw, gdy x
i
jest incydentny z b
j
.
Widzimy, e b
ij
{0, 1, 2} i e suma elementw w jednej kolumnie wynosi 2.

Przykad 2

Z grafem z przykadu 1 utosamiamy nastpujce tabele:

1 2 3 4 a B c d e f
1 0 1 2 1 1 1 0 1 1 1 0
2 1 0 1 0 2 1 1 0 0 0 0
3 2 1 0 0 3 0 1 1 1 0 0
4 1 0 0 1 4 0 0 0 0 1 2
A(G) B(G)


W formie macierzowej, indeksujc w porzdku naturalnym wiersze przez
1,2,3,4 oraz kolumny przez a, b, c, d, e, f otrzymujemy:

|
|
|
|
|
.
|

\
|
=
1 0 0 1
0 0 1 2
0 1 0 1
1 2 1 0
) (G A
|
|
|
|
|
.
|

\
|
=
2
0
0
0
1
0
0
1
0 0 0 0
1 1 1 0
0 0 1 1
1 1 0 1
) (G B




I. 3 Wierzchoki grafu

DEFINICJA Stopniem wierzchoka x, d(x) nazywamy ilo krawdzi
incydentnych z x. Ptla wystpujca w wierzchoku liczona podwjnie

Ponadto oznaczamy:
(G) = min {d(x) | xX}
(G) = Max {d(x) | xX}

- Grafy i rekurencje -
10
W przypadku, gdy (G) = (G) = k, graf jest nazywany k - regularnym.
Zauwamy, e gdy G jest grafem prostym, wwczas (G) n-1 oraz dla
kadego x, |N(x)| = d(x).
Graf prosty, ktrego wszystkie wierzchoki s stopnia n-1 jest nazywany
kompletnym. Nazywamy go K
n
. W konsekwencji kade dwa wierzchoki K
n
s
ssiadujce. Mamy wic: K
n
= (X, P
2
(X)) gdzie |X| = n. K
3
jest nazywany
trjktem. Na rysunku nr 2 przedstawione s grafy kompletne stopnia 4:


K K K K
1
2 3 4

Rysunek 2 Grafy kompletne stopnia 1, 2, 3, 4

Wierzchoek x , taki e d(x) = 0 nazywamy wolnym. Wierzchoek x jest
doczepiony, gdy d(x) = 1. Krawdzi doczepion nazywamy krawd
incydentn z wierzchokiem kracowym.

DEFINICJA Dopenieniem grafu G = (X, E) nazywamy graf
G = (X, P
2
(X) E).





I. 4 Pod-grafy
W grafie G = (X, E) wyrnimy dwa podzbiory: Y X oraz F E.
Mwimy, e H = (Y, F) jest pod-grafem G, gdy eF krace e s w Y.
Gdy F jest utworzony z wszystkich krawdzi ze zbioru E, ktrych krace
s w Y, otrzymany graf jest nazywany pod-grafem wygenerowanym przez Y.
Nazywamy go G
y
, gdy jest on jednoznacznie zdefiniowany przez Y.
W podobny sposb pod-grafem wygenerowanym przez F, oznaczanym
G[F], nazywamy pod-graf G, ktrego zbiorem krawdzi jest F, a ktrego zbir
wierzchokw jest utworzony z kracw krawdzi nalecych do F.


- Grafy i rekurencje -
11
Przykad 3
Rozpatrzmy graf pokazany na przykadzie 1. Na rysunku 3 przedstawione
zostay pod-grafy wygenerowane przez S={1,3,4} oraz F={a, b, c}:

1 3 4
1
3
2
f
e
c
d
c
a
b
s
G[F] G

Rysunek 3 Grafy wygenerowane przez zbir wierzchokw i krawdzi




DEFINICJA Klik nazywamy graf posiadajcy taki zbir wierzchokw,
z ktrych kade dwa ze sob ssiaduj.
W grafie prostym, klika generuje zawsze graf kompletny. Graf przeciwny
do kliki definiuje si nastpujco:
DEFINICJA Klatk nazywamy Graf, ktrego adne dwa wierzchoki nie
s ze sob poczone:
Inaczej mwic, klatka jest generowana przez pod-graf ktry nie posiada
krawdzi. W szczeglnoci kady wierzchoek klatki nie posiada ptli.


I. 5 Orientacja grafu
Graf G = (X, E) jest zorientowany, gdy kada krawd eE jest
uporzdkowanym zbiorem dwch wierzchokw.
Mona rwnie powiedzie, e orientacja grafu zamienia kad krawd
w uk , ktry jest par wierzchokw. Pierwszym elementem tej pary jest
wierzchoek pocztkowy, a drugim wierzchoek kocowy. Kady uk oznacza si
przez (x, y) lub xy.

Przykad 4
Dodajmy orientacj do grafu z przykadu 1. Przypomnijmy, e
X={1,2,3,4}, E = {a, b, c, d, e, f}, gdzie: a=(1,2), b=(2,3), c=(3,1), d=(1,3),
e=(1,4), f= (4,4). Ten zorientowany graf pokazany jest na rysunku nr 4.

- Grafy i rekurencje -
12
1 2
3
4
a
b
c
d
e
f

Rysunek 4 Przykadowy graf zorientowany


Graf zorientowany bez cyklu nazywamy prostym, gdy pomidzy dwoma
dowolnymi wierzchokami wystpuje co najwyej jeden uk.
Niech bdzie dany wierzchoek x. Mwimy, e y jest nastpnikiem
(poprzednikiem) x, gdy xy (yx) jest ukiem. Zbiory: nastpnikw oraz
poprzednikw x s odpowiednio zapisywane: N
+
(x) i N
-
(x). Oczywistym jest, e
N(x) = N
+
(x) N
-
(x).

Relacja incydencji oraz ssiedztwa jest tutaj zdefiniowana tak samo jak w
przypadku grafw niezorientowanych. Jedyna rnica wystpuje w macierzy
incydencji, ktre elementy przyjmuj wartoci:

=
h przypadkac innych w
a koncowym iem wierzcholk jest x gdy
a m poczatkowy iem wierzcholk jest x gdy
b
j i
j i
ij
0
1
1


Tabela ssiedztwa i incydencji grafu zorientowanego z rysunku nr 4
przedstawia si nastpujco:

1 2 3 4 a b c d E f
1 0 1 1 1 1 1 0 -1 1 1 0
2 0 0 1 0 2 -1 1 0 0 0 0
3 1 0 0 0 3 0 -1 1 -1 0 0
4 0 0 0 1 4 0 0 0 0 -1 0
A(G) B(G)



- Grafy i rekurencje -
13
I. 6 Szczeglne przypadki grafw

W wielu algorytmach opartych na grafach wykorzystuje si ich
szczeglne przypadki, ktre s zawsze zaweniem klasy wszystkich grafw do
pewnego niekoniecznie skoczonego podzbioru. S to np.:


I. 6. 1 Grafy bez ptli

S to grafy G=(E,V), dla ktrych prawdziwa jest regua:xE (x,x)V .
W reprezentacji macierzowej, grafy te bd miay na diagonali zera.
Przykad grafu z ptl przedstawia rysunek nr 1, natomiast na rysunku
nr 2 przedstawione zostay grafy bez ptli.



I. 6. 2 Grafy kompletne

S to takie grafy, w ktrych dla kadego wierzchoka istnieje krawd
(bd uk w grafach skierowanych) czca go z wszystkimi pozostaymi
wierzchokami. Przykady tych grafw przedstawia rysunek nr 2.



I. 6. 3 Grafy planarne

Grafem planarnym nazywa si graf, ktry moe by narysowany na
paszczynie dwuwymiarowej w taki sposb, by dwie dowolne krawdzie nie
przecinay si ze sob. atwo zobaczy, e graf K
4
jest grafem planarnym,
natomiast graf dla grafu K
5
nie da si tak rozmieci krawdzi, by unikn
choby jednego ich przecicia. Sytuacj t przedstawia rysunek nr 5.
- Grafy i rekurencje -
14
K
4
adna krawd
si nie przecina
A
B
5
K
Krawd AB jest
incydentna

Rysunek 5 Grafy: planarny i nieplanarny


I. 6. 4 Grafy dwuczciowe

Grafem dwuczciowym (bipart) G=(E,V) nazywany taki graf, ktrego
zbir wierzchokw E da si podzieli na dwa rozczne podzbiory X
1
, X
2
, tak
by X
1
X
2
= E oraz by istniay tylko krawdzie czce 1 wierzchoek z X1 z
jednym wierzchokiem z X2. Ponadto musi zosta zachowana poprzednia
struktura grafu, tzn. jeli istniaa krawd (x,y) to graf dwuczciowy take musi
j posiada. Rysunek nr 6 przedstawia ten sam graf dwuczciowy,
przedstawiony na dwa rne sposoby:

1
1
2
2
3
3
4
4
5
5
6
6
7
7
8
8
9
9
X
X
1
2

Rysunek 6 Graf dwuczciowy przedstawiony na dwa rne sposoby



- Grafy i rekurencje -
15
czc ze sob grafy kompletne i dwuczciowe, otrzymujemy graf K
p,q
,
w ktrym |X
1
| = p, |X
2
| = q. Na rysunku nr 7 przedstawiony jest graf K
3,3
, ktry
zarazem nie moe by grafem planarnym.


Rysunek 7 Graf K 3,3 nie bdcy grafem planarnym

I. 7 Izomorfizm grafw

Dwa grafy G=(X,V) oraz H=(Y,W) s izomorficzne jeli istnieje funkcja
wzajemnie jednoznaczna f, ktrej dziedzin jest zbir X, a przeciwdziedzin
zbir Y, taka e: (x,y)V (x,y) W. Dwa grafy izomorficzne
przedstawione s na rysunku nr 9. Funkcja f ma posta:

X 1 2 3 4 5
F(X) e b d c a


1
2
3
4
5
a b
c
d e

Rysunek 8 Dwa grafy izomorficzne





- Grafy i rekurencje -
16
Rozdzia II Spjno grafu


II. 1 acuchy w grafie


DEFINICJA acuch w grafie G=(X,V) jest cigiem c=(x
0
, x
1
, ..., x
n
)
wierzchokw grafu G, dla ktrych zachodzi zaleno:
i (1 i n) [ (x
i-1
x
i
)V lub (x
i
x
i-1
)V) ]
gdzie x
0
, x
n
s kracami acucha, a n jego dugoci.
Nie naley myli ze sob poj: droga acuch, gdy w acuchu mog
wystpi uki w dwch rnych kierunkach, natomiast w drodze poszczeglne
uki maj jeden kierunek. Na rysunku nr 9 przedstawiony jest przykadowy graf
i wystpujcy w nim acuch c=(4,3,5,4,1).

1
2
3
4
5
7

Rysunek 9 Graf nieskierowany posiadajcy acuch

DEFINICJA acuch nazywamy elementarnym, jeli kady wierzchoek
wchodzcy w jego skad jest inny.

acuch zoony z jednego wierzchoka ma dugo 0.

Patrzc na rysunek nr 9 moemy wskaza acuch elementarnym np. c=(1,4,5).

Wasno 1
Z kadego acucha xy mona wyodrbni acuch, ktry jest
elementarny.

Dowd: Indukcyjny ze wzgldu na ilo powtrze w acuchu:
0 powtrze, wwczas badany acuch jest elementarny.
Zaoenie: Wasno prawdziwa dla n powtrze
- Grafy i rekurencje -
17
Teza : Wasno prawdziwa dla n+1 powtrze. Wemy dowolny
acuch c. Podajc po kolejnych wierzchokach tego acucha napotykamy
powtarzajce si wierzchoki. Gdy napotkamy ju n powtrze (w caym
acuchu jest ich n+1), wwczas z zaoenia indukcyjnego da si wyodrbni
podacuch. Bdzie to zarazem podacuch acucha wyjciowego o n+1
powtrzeniach.

Wasno 2
Najkrtszy acuch grafu G jest elementarny

Dowd: Zamy, e xy jest najkrtszym acuchem grafu G i
posiada powtarzajcy si element v. Wtedy acuch ten bdzie posiada posta:
(x,.....,v,.....,v,....t). Usuwajc zaciemnion cz otrzymamy krtszy acuch
sprzeczno.


II. 2 Grafy spjne


Mamy dany graf G=(E,V). Zdefiniujmy relacj R
c
(E x E) ,ktra
bdzie relacj spjnoci w grafie.
x R
c
y w grafie G istnieje acuch xy.
Relacja R
c
jest relacj rwnowanoci, gdy:
Zwrotno - x E (x) jest acuchem o dugoci 0
Symetria - x,y E xy jest acuchem na mocy faktu, e orientacja ukw
w acuchu nie gra roli, wnioskujemy e yx te jest acuchem
Przechodnio - x,y,z E jeli xz i zy s acuchami, wwczas
c=(x,...,z,z,.....y) rwnie jest acuchem.
Klasy rwnowanoci relacji R
c
nazywamy komponentami
spjnymi grafu G.

DEFINICJA Graf nazywamy spjnym, jeli posiada tylko jeden komponent
spjny.
Graf przedstawiony na rysunku nr 9 jest spjny, gdy posiada jeden
komponent spjny, a {1,2,3,4,5,6,7} [1]
Rc
, czyli istnieje jedna klasa
abstrakcji, w skad ktrej wchodz wszystkie wierzchoki grafu G.

DEFINICJA Punkt artykulacji a w grafie G=(E,V) jest takim wierzchokiem
ze zbioru E, e graf G=(E-{a},V
1
) nie jest spjny. (V
1
powstaje z V przez
usunicie wszystkich ukw, ktrych jednym z kocw jest wierzchoek a)
- Grafy i rekurencje -
18
Uwaga: Nie w kadym grafie da si znale punkt artykulacji.
Powysz definicj ilustruje rysunek nr. 10, w ktrym punkt a czy ze
sob spjne komponenty grafu G.

a
komponent 1
komponent 2
komponent 3

Rysunek 10 Punkt artykulacji w grafie

atwo udowodni, e a jest poczony z kadym z komponentw grafu
G. Zamy, e istnieje komponent, ktry nie jest poczony z a, wwczas
wyjciowy graf G (zawierajcy a) posiadaby wicej ni jeden komponent
spjny, czyli G nie byby spjny sprzeczno.

Lemat dotyczcy grafw spjnych:
Kady graf spjny stopnia 2 posiada co najmniej 2 wierzchoki nie
bdce punktami artykulacji.
Dowd: W grafie G (rysunek nr 11) wemy najduszy acuch c=(x
0
, x
1
, ...,
x
n
). Zamy, e x
0
jest punktem artykulacji. Wwczas odrzucajc wierzchoek
x
0
otrzymamy graf niespjny, zatem w grafie G musi istnie drugi komponent
spjny, w ktrym istnieje taki punkt y, e x R
c
y. Wtedy jednak acuch
c
1
=(y, x
0
, x
1
, ..., x
n
) jest duszy od acucha c sprzeczno. Stosujc podobne
rozumowanie dla wierzchoka x
n
otrzymujemy dowd lematu.


x0
x1
x2 x3
x4
y
komponent
spjny
komponent
spjny

Rysunek 11 Graf podatny na lemat o grafach spjnych
- Grafy i rekurencje -
19
Klasa GS grafw spjnych jest generowana przez poniszy schemat
indukcji:
Baza: {K
1
}
Zasada indukcji: Jeli GGS, wwczas Graf G + {x} GS, dla d(x) 1.

Wasno 1
Kady graf spjny jest generowany przez powyszy schemat.

Dowd: W jedn stron dowd jest natychmiastowy. Kady graf
wygenerowany przez powyszy schemat jest spjny, bowiem K
1
jest spjny, a
gdy do grafu spjnego G dodamy wierzchoek x, ktry czy si przynajmniej
jednym ukiem z grafem G, wwczas otrzymamy graf spjny.
W drug stron stosujemy dowd indukcyjny ze wzgldu na stopie
grafu.
stopie = 1, schemat generuje {K
1
} graf o stopniu 1
Zaoenie schemat potrafi wygenerowa grafy spjne stopnia n
Teza schemat potrafi wygenerowa grafy spjne stopnia n+1.
Wemy G=(E,V), graf spjny stopnia n+1. Na mocy xE, e G-{x}
jest spjny, ponadto G-{x} jest stopnia n czyli spenia zaoenie indukcyjne,
zatem G-{x} jest spjny. Teraz dodajemy do G-{x} wierzchoek {x}, ktry na
mocy faktu, e G jest spjny, jest poczony z G-{x}, czyli d(x) 1.W
konsekwencji schemat pozwoli nam wygenerowa graf G, co koczy dowd.

DEFINICJA Cyklem c=(x
0
, x
1
, ..., x
n
, x
0
) nazywamy acuch, ktrego
krace s takie same.

W grafie z rysunku nr 9 moemy atwo znale cykl: c=(1,4,3,5,4,1) i cykl
elementarny c
e
(1,4,1), speniajcy zaleno: #C
e
= 1 + #Wierzch(C
2
), gdzie
Wierzch(C
2
) jest zbiorem rnych wierzchokw cyklu C
e
.
Cykl elementarny w grafie G jest pod-grafem spjnym G, ktrego
wszystkie wierzchoki s stopnia = 2.

Wasno 2
Z kadego cyklu c, przechodzcego przez uk e mona wyodrbni cykl
elementarny, ktry przechodzi przez uk e.
Dowd: Analogiczny jak przy acuchach.

Wasno 3
Kady graf G=(X,E) ,taki e (G) k 2 dopuszcza cykl elementarny
dugoci k+1 oraz acuch elementarny o dugoci k.



- Grafy i rekurencje -
20
Dowd:
Na rysunku nr 12 przedstawiona zostaa sytuacja, ktra pozwala na atwe
zrozumienie dowodu.

x1
x2 x3
xn
W

Rysunek 12 Cykl i acuch w grafie

Na pocztku wybieramy maksymalny acuch w grafie G=(X,E),
oznaczajc go c=(x1, ..., xn). Korzystajc z zaoenia, e x
i
1 i n k(x
i
))
wnioskujemy, e k n, bowiem kady wierzchoek acucha c jest poczony z
co najmniej k innymi wierzchokami, czyli istnieje poszukiwany acuch o
dugoci k.
W celu znalezienia cyklu o dugoci k +1 spjrzmy na wierzchoek x
1

na rysunku nr 12. Zauwaamy, e w zbiorze wierzchokw W, ktre s
bezporednio poczone z x
1
wystpuj tylko wierzchoki x
3
, ..., x
n
, bowiem
gdyby byy w W inne wierzchoki np. s{x
2
, .., x
n
}, wwczas acuch
(s, x
1
, x
2
, ..., x
n
) byby duszy od acucha c. Ponadto w W nie wystpuje x
2
, bo
c jest acuchem elementarnym. Z drugiej strony x
1
posiada co najmniej k
ssiadw, z czego wniosek, e x
n
W, czyli istnieje cykl elementarny
(x
n
, x
1
,x
2
,..., x
n
) o dugoci n+1. Korzystajc z wczeniej udowodnionego faktu,
e istnieje acuch elementarny o dugoci k wnioskujemy istnienie cyklu
elementarnego o dugoci k+1.

Wasno 4
Mamy G=(X,E) #X = n oraz #E = m. Jeli m n, wwczas G nie posiada
cyklu.
Dowd:
Wemy graf G i wyodrbnijmy z niego pod-graf H=(Y,V) taki, e YX,
przy czym w zbiorze Y znajduj si takie wierzchoki z X, e xX d(x) 2.
Zbir krawdzi V E, przy czym w zbiorze V znajduj si tylko te krawdzie,
ktrych krace nale do X. Niemoliwe jest, by #Y = 0, bo wwczas w grafie
wyjciowym G, m < n, zatem kady wierzchoek grafu H posiada co najmniej
dwch rnych ssiadw, std na podstawie wasnoci 2 w H istnieje cykl. H
jest pod-grafem, wic cykl ten wystpuje te w G, co koczy dowd.



- Grafy i rekurencje -
21
II. 3 Drzewa

DEFINICJA
Drzewo jest grafem spjnym bez cyklu.
Las jest grafem bez cyklu.

Na rysunku nr 13 moemy wyrni np. drzewa: (pod-grafy ograniczone
do wierzchokw}
T1 = {a,b,c,d,e}
T2 = {k,i,j}
T3 = {d,f,g,h,j}
Lasem jest np. pod-graf z wierzchokami T1T2.

a
b
c
d
e
f
g
h
i
j
k

Rysunek 13 Graf, las, drzewa

Wasno 1
Dla danego grafu G=(X,E) #X = n oraz #E = m stopnia n 2 nastpujce
warunki s rwnowane:
(1) G jest bez cyklu i bez wierzchokw wolnych
(2) G jest spjny i m = n-1
(3) G jest bez cyklu i m = n-1
Na pocztku dowodzimy (2) (3). Wniosek jest oczywisty
(wykorzystujemy wasno 4 z podrozdziau o grafach spjnych).
Dla dowodu (3) (2) zakadamy, e G jest bez cyklu i nie jest spjny.
Istniej zatem takie wierzchoki xX, e d(x) = 0. Gdy utworzymy pod-graf
H=(Y,V) wyrzucajc te wierzchoki, wwczas dla tego pod-grafu bdzie
zachodzia zaleno #V #Y i na mocy wasnoci nr 4 z poprzedniego
rozdziau otrzymamy cykl w pod-grafie H, ktry bdzie cyklem w grafie G, co
da nam sprzeczno z zaoeniem.
Dowd (1) (2). G nie ma wierzchokw wolnych, wic G jest spjny,
pozostaje wic dowie, e m = n-1. Gdy G jest bez cyklu wtedy m < n, ponadto
ze spjnoci wynika, e m n-1 (wychodzc od K
2
dodanie do grafu nowego
wierzchoka implikuje dodanie nowej krawdzi). Ostatecznie otrzymujemy
m=n-1.
- Grafy i rekurencje -
22
Dowd (2) (1). Graf ma m < n, czyli na mocy wniosku 4 nie posiada
cyklu, ponadto jest spjny, czyli nie posiada take wierzchokw wolnych.
Kady graf speniajcy jedn z powyszych wasnoci jest drzewem.


Wasno 2
Klasa drzew jest generowana przez nastpujcy schemat indukcji:
Baza: {K
1
}
Regua: T T+x (x jest wierzchokiem doczonym w T+x)

Dowd, e schemat generuje drzewa jest oczywisty. Dowd w drug
stron bdzie oparty na indukcji ze wzgldu na ilo wierzchokw w drzewie:
P(1) jest prawdziwe, bowiem K
1
Bazy.
Zakadamy p(n), czyli e schemat wygeneruje nam wszystkie drzewa o n
wierzchokach. Wemy dowolne drzewo T o n+1 wierzchokach. Z definicji
drzewa widzimy, e istnieje w nim jaki wierzchoek doczony x , taki e
d(x)=1. Usuwajc ten wierzchoek dostajemy drzewo T= T - x, ktre spenia
zaoenia schematu, czyli T = T + x ,co koczy dowd.

Wasno 3
Mamy dany graf T=(X,E). Ponisze warunki s rwnowane:
(1) T jest drzewem.
(2) T jest maksymalnym grafem bez cyklu ( (x , y) E, T + (x , y) zawiera
cykl)
(3) pomidzy dowolnymi 2 wierzchokami w T istnieje dokadnie jeden
acuch elementarny.
(4) T jest najmniejszym grafem spjnym (eE T - e nie jest spjny)

Dowd:
(1) (3). T jest drzewem, wic jest grafem spjnym bez cyklu, czyli
pomidzy 2 dowolnymi wierzchokami istnieje acuch elementarny
(istnienie acucha nie elementarnego implikowaoby wystpowanie
cyklu). Gdyby istnia inny acuch pomidzy tymi wierzchokami,
wwczas czc odpowiednio ze sob te dwa acuchy otrzymalibymy
cykl, co jest sprzeczne z zaoeniem.
(3) (2) Wemy dwa dowolne wierzchoki x,y X, aby (x , y) E.
Poprzednik implikacji mwi, e istnieje pomidzy nimi dokadnie jeden
acuch elementarny c. Dodajc do T krawd (x,y) otrzymamy nowy
acuch czcy x i y, ktry po poczeniu z acuchem c da nam cykl
(x,y, c,x).
(2) (4) Wemy dowolne x,y X. Jeli (x,y) E, wwczas istnieje
acuch czcy x i y. Jeli (x , y) E, to z zaoenia T + (x , y) zawiera
- Grafy i rekurencje -
23
cykl, czyli w T istnia acuch czcy x i y, zatem T jest spjny. Gdyby
eE T-e jest spjny, wwczas T posiadaby cykl sprzeczno.
(4) (1) T jest grafem spjnym. Gdyby T nie by drzewem, wwczas
posiadaby on cykl c, zatem istniayby wierzchoki x i y X takie, e po
usuniciu krawdzi (x, y) graf nadal byby spjny sprzeczno.

DEFINICJA Drzewem rozpinajcym grafu G nazywamy taki pod-graf,
ktry posiada wszystkie wierzchoki z G, podzbir krawdzi G oraz jest
drzewem.

Na rysunku nr 14 pokazano drzewo rozpinajce graf (krawdzie drzewa
s pogrubione).
1
2 3
4
5
7

Rysunek 14 Drzewo rozpinajce graf

Wasno 3
G jest grafem spjnym istnieje drzewo rozpinajce graf G.

Dowd () jest oczywisty, poniewa drzewo z zaoenia jest grafem
spjnym.
Dowd () : indukcyjny ze wzgldu na ilo wierzchokw grafu. P(1)
jest prawdziwe, gdy istnieje drzewo zoone z jednego wierzchoka.
Zakadamy p(n) ,czyli e dowolny kady graf spjny o n wierzchokach
posiada drzewo rozpinajce. Wemy dowolny graf spjny G o n+1
wierzchokach. Z lematu o grafach spjnych wiemy, e istnieje wierzchoek x
nie bdcy punktem artykulacji grafu G. Zatem G-x jest grafem spjnym o n
wierzchokach, czyli z zaoenia indukcyjnego istnieje dla niego drzewo
rozpinajce T. czc jakikolwiek wierzchoek drzewa T z punktem x
otrzymamy drzewo rozpinajce grafu G co dowodzi tez indukcyjn.

DEFINICJA Drog w grafie zorientowanym G=(X,V) nazywamy cig
wierzchokw = (x
0
,x
1
, ..., x
n
) , taki e i 1 i n x
i-1
x
i
V. Kracami s
x
0
i x
n
, a dugoci n.
- Grafy i rekurencje -
24
Droga elementarna to cig, w ktrym kady wierzchoek jest inny.
Z kadej drogi czcej wierzchoki x i y moemy wyodrbni drog
elementarn midzy x i y (dowd jest analogiczny jak dla acuchw).
Droga elementarna odwiedzajca wszystkie wierzchoki grafu jest
nazywana drog Hamiltona.
Przyjmujemy oznaczenia: przodek = Ascendant, potomek = Descendant i
dla kadego wierzchoka definiujemy: zbir jego przodkw i potomkw:
xX Des(x) = {yX | droga xy}
xX Asc(x) = {yX | droga yx}
Jeli x,y X oraz (x,y) E wtedy x jest poprzednikiem y, a y jest
nastpnikiem x.

Korzeniem w grafie G=(X,E) jest taki wierzchoek rX, e Des(r){r} = X.
Odlego: Gdy yDes(x) ,to d(x,y) jest dugoci drogi xy.
Gdy yDes(x), to d(x,y) = +
Koo: Koem nazywamy zamknity cig wierzchokw (x
1
, x
2
, ..., x
n
), ktry jest
permutacj cykliczn i i 2 i n (x
i-1
,x
i
)E oraz (x
n
,x
1
) E.
Koo elementarne jest cigiem wierzchokw, ktre nie mog si
powtrzy. Na rysunku nr 15 przedstawiony jest przykadowy graf obrazujcy
przedstawione powyej pojcia.
1
2
3 6
8
9 5 4
7

Rysunek 15 Przodkowie, potomkowie, koa i korzenie

Des(3) = {4,5,6,7,8,9,1}
Nastpnik(3) = {4}
Asc(3) = {1,2,4,6,7}
Poprzednik(3) = {1,6}
Koo = {7,6,3,4,1,3,4}
Koa elementarne = {1,3,4} , {1,6,3,4}
Korze = {2}, gdy Des(2) = {1,3,4,5,6,7,8,9}
d(3,5) = 2

- Grafy i rekurencje -
25
II. 4 Drzewa waciwe

DEFINICJA: Drzewem waciwym nazywamy drzewo posiadajce
korze.

Wasno 1
Dla grafu G=(E,V) ponisze definicje s rwnowane:
G jest drzewem waciwym
G jest bez cykli i posiada korze
G posiada korze i (n-1) ukw
G posiada korze r oraz xX ! droga rx
G jest spjny i x
0
X | d
-
() = 0 oraz xX xx
0
d
-
( x) = 1

Dowd:
(1)(2) Jeli G jest drzewem, to z definicji nie posiada cykli, a jeli jest
ponadto drzewem waciwym, to posiada korze.
(2)(4) Jeli G posiada korze r, to kady inny wierzchoek xG jest
osigalny, czyli istnieje droga rx. Gdyby istniay dwie rne drogi rx, wwczas
G posiadaby cykl i mielibymy sprzeczno z zaoeniem.
(4)(3) Jeli dla n-1 wierzchokw xG istnieje od korzenia dokadnie
jedna droga rx, to znaczy, e graf G posiada n-1 ukw.
(3)(5) G posiada korze r, czyli Des(r){r} = X, zatem G jest spjny.
Asc(r)=, bowiem w przeciwnym wypadku: istniaoby n-1 drg od korzenia do
pozostaych wierzchokw + uk do korzenia = n ukw; sprzeczno, czyli
d
-
(r) = 0. Podobnie, xX xr d
-
( x) = 1 gdy gdyby d
-
( x) = 0 nie
istniaaby droga rx, ponadto gdyby xX xr i d
-
(x) = 1+h, to G posiadaby co
najmniej n-1 + h ukw, std h = 0.
(5)(1) xX xx
0
xDes(x), gdy w przeciwnym przypadku
Asc(x)Des(x) , a wtedy uwzgldniajc d
-
(x
0
) = 0 otrzymalibymy graf
niespjny. Zatem G jest bez cykli i w dodatku spjny, czyli G jest drzewem.
Gdyby xX xr i rAsc(x) wwczas uwzgldniajc fakt, e r nie posiada
poprzednika mielibymy rDes(x) i w konsekwencji niespjno grafu G.
Wynika z tego, e xX xx
0
rAsc(x), czyli r jest korzeniem i ostatecznie G
jest drzewem waciwym.

Wasno 2
Klasa drzew waciwych jest generowana przez nastpujcy schemat
indukcji:
Baza: {K
1
}
Regua: T T+x (gdzie d
-
(x) = 1 i d
+
(x) = 0; x jest liciem)

- Grafy i rekurencje -
26
Schemat indukcyjny bez wtpienia generuje drzewa waciwe.
Udowodnimy, e kade drzewo waciwe moe by przez ten schemat
wygenerowane.
Dowd indukcyjny ze wzgldu na ilo wierzchokw drzewa
waciwego.
P(1) jest prawdziwe, gdy K
1
Bazy.
Zamy, e p(n) jest prawdziwe, czyli schemat potrafi wygenerowa
kade drzewo waciwe o n wierzchokach. Wemy dowolne drzewo T o n+1
wierzchokach. Drzewo nie posiada cykli, wic xT , e d
-
(x) = 1 i d
+
(x) =
0, czyli x jest liciem. Tworzymy drzewo T usuwajc wierzchoek x i
otrzymujemy drzewo o n wierzchokach, ktre spenia zaoenie indukcyjne,
zatem drzewo T = T + x moe by wygenerowane przez schemat indukcyjny.

DEFINICJA Drzewem waciwym rozpinajcym graf G nazywamy pod-
graf , ktry jest drzewem, posiada korze, te same wierzchoki co G i podzbir
ukw G.

Wasno 3
Graf G posiada 1 korze Posiada drzewo waciwe rozpinajce go.

II. 5 Grafy silnie spjne

DEFINICJA: Silna spjno
Dla danego grafu G=(X,E) definiujemy relacj R
ss
X
2
. xX mamy
(x,y) R
ss
droga xy lub yx
Mona sprawdzi, e R
ss
jest relacj rwnowanoci.
Komponentami s-spjnymi grafu G nazywamy klasy rwnowanoci
relacji R
ss
.
Grafem silnie spjnym nazywamy graf posiadajcy 1 spjny komponent.
Na rysunku nr 15 mamy dwa komponenty silnie spjne:
A={a,b,c,d,h}
B={e,f,g}
Grafem zredukowanym nazywamy graf, ktrego wierzchokami s klasy
abstrakcji relacji R
ss
. W klasie zredukowanym nie wystpuj cykle, gdy gdyby
pomidzy dwoma klasami abstrakcji istnia cykl, wwczas kady element z
pierwszej klasy byby w relacji R
ss
z kadym elementem drugiej klasy i w
konsekwencji te klasy byyby takie same, czyli graf zredukowany posiadaby
jeden wierzchoek.

- Grafy i rekurencje -
27
f
g
c d
e
a b
h
A
B
G
r
a
f

p
o
d
s
t
a
w
o
w
y
G
r
a
f

z
r
e
d
u
k
o
w
a
n
y

Rysunek 16 Graf podstawowy i graf zredukowany

DEFINICJA Domknicie przechodnie grafu zorientowanego.
Mwimy, e xy jest ukiem przechodnim w grafie G=(X,E) jeli istnieje w
tym grafie inna cieka czca x i y, dugoci >1, czyli y jest potomkiem x w
grafie G=(X,E-{x,y}).
G
t
=(X ,E
t
) jest domkniciem przechodnim grafu G=(X,E), gdy:
E
t
={(x,y) | ydes
G
(x), y x}
Domknicie przechodnie dodaje do grafu wszelkie moliwe drogi czce
wierzchoek x i y. Na rysunku nr 17 przedstawiono graf zoony z jednego cyklu
i jego domknicie przechodnie.

G G
t

Rysunek 17 Graf i jego domknicie przechodnie
- Grafy i rekurencje -
28
Rysunek nr 17 jest przykadem na to, e domknicie przechodnie grafu
silnie spjnego powoduje powstanie grafu kompletnego. Dowd jest tutaj
oczywisty. Wemy dowolne x i y, wierzchoki grafu G. Ze spjnoci grafu G
otrzymujemy istnienie drogi xy. Domknicie przechodnie bdzie zatem
zawierao uk (x,y) dla dowolnych x i y, czyli G
t
jest kompletny.
Gdy do domknicia przechodniego dodamy ptle dla kadego
wierzchoka, wwczas otrzymamy domknicie przechodnio-zwrotne oznaczane
przez G*.
S dwa podejcia do tworzenia z G grafu G
t
:
(1) dodajemy do G wszystkie moliwe uki przechodnie.
(2) tworzymy najmniejszy graf przechodni zawierajcy uki G.

Ponadto gdy mamy 2 grafy: H G wtedy H
t
G
t
.


II. 6 Porzdek grafu

Dla danego zbioru A moemy zdefiniowa relacj porzdku R. Gdy R jest
sabym porzdkiem, co oznaczamy jako , zachodz zalenoci:
(1) zwrotno xA xRx
(2) anty-symetria x,yA (xRy yRx) x=y
(3) przechodnio x,y,zA (xRy yRz) xRz

Gdy R jest silnym porzdkiem, co oznaczamy jako <, zachodz zalenoci:
(1) niezwrotno xA (x,x) R
(2) przechodnio

Z tymi relacjami utosamiamy:
a) graf relacji sabego porzdku
G

= (E,U) (x,y) U x y
Graf ten jest zwrotny (przy kadym wierzchoku wystpuje ptla), anty-
symetryczny i przechodni.
b) graf relacji sabego porzdku <
G
<
= (X,V) (x,y) V x < y
Graf ten jest niezwrotny (brak ptli ) i przechodni.

Wasno 1
Jeli < jest relacj silnego porzdku, wwczas G
<
nie posiada koa.
Jeli jest relacj sabego porzdku, wwczas G

nie posiada koa o


dugoci >1

- Grafy i rekurencje -
29
Dowd pierwszej zalenoci wynika bezporednio z przechodnioci G
<
.
Gdyby istniao koo (x
1
,x
2
, .., x
n
) wwczas (x
1
<x
2
) ... (x
n-1
<x
n
) x
1
<x
n
.
Ponadto x
n
<x
1
;sprzeczno. Dowd drugiej zalenoci jest analogiczny, a koa o
dugoci 1 s cyklami, ktrych istnienie wynika ze zwrotnoci G

.
R jest relacj pokrycia , co oznaczamy <, gdy zachodzi warunek:
x,y x<y (x < y z x < z < y)
Z relacj pokrycia < utosamiamy graf Hassea G
h
. Graf G
h
powstaje
przez usunicie z grafu G
<
wszystkich ukw przechodnich.

Wasno 2
(G
h
)
t
= G
<
Dowd:
Udowodnimy inkluzj . G
<
zatem (G
h
)
t
= (G
<
)
t
= G
<.

Teraz udowodnimy inkluzj . Wemy dowolny uk (x,y) z grafu G
<
.
Jeli xy, wwczas (x,y) naley do G
h
i tym bardziej do (G
h
)
t
. Gdy natomiast
(x,y) <, wwczas korzystajc z tego, e G
<
nie posiada koa otrzymamy taki
cig wierzchokw grafu G (x,x
1
,x
2
, ..., x
n
, y), e {(x,x
1
),(x
1
,x
2
), ..., (x
n
,y)} <.
Std (x,y) naley do domknicia przechodniego grafu G
h
, co koczy dowd.


II. 7 Rozkad grafu

Jeli graf G=(X,E) posiada wierzchoki xX takie, e d
-
(x)=0, to kady
taki wierzchoek jest rdowy w grafie G.
Rozkad grafu przeprowadzamy usuwajc w kolejnych krokach
wierzchoki rdowe. Niech dla grafu G stopnia k, zbir S(G) bdzie zawiera
wszystkie jego wierzchoki rdowe. Tworzymy kolejno zbiory:
S
0
= S(G)
S
1
= S(G - {S
0
})
S
2
= S(G - {S
0
S
1
})
................................
S
i
= S(G - {S
0
S
1
... S
i-1
})
................................
S
k
= 0

Wasno 1
Graf G nie posiada koa dla powyszego schematu rozkadu zachodzi:
X = S
0
S
1
... S
k-1
, Si Sj =




- Grafy i rekurencje -
30
Dowd:
. Jeli graf nie posiada koa, wwczas w kolejnych krokach bdziemy
usuwali z grafu G wierzchoki rdowe do momentu, gdy G nie bdzie ju
pusty. Poniewa G jest stopnia k, wic powyszy rozkad bdzie skoczony i w
rezultacie suma mnogociowa zbiorw S
i
da nam cay zbir wierzchokw X.
Przeprowadzimy dowd nie-wprost. Zamy, e G posiada koo,
wwczas j 0, e od pewnego momentu S
j
= S
j+1
= S
j+2
= ... = S
k-1
, std x
wierzchoek grafu G, e S
i
xS
i
; sprzeczno.

Przykadowy rozkad grafu przedstawiony zosta na rysunku nr 18.

a
a
b
b
c
d
d
e
e
e
f
g
g
h
h
i
i
i
j
j
j
k
G
S1
S2
S = {c,f,k}
0
S4 = 0

Rysunek 18 Rozkad grafu

- Grafy i rekurencje -
31
Rozdzia III Algorytmy grafowe



III. 1 Przeszukiwanie grafu

Wyrniamy dwa gwne sposoby przeszukiwania grafu:
1) przeszukiwanie wszerz
2) przeszukiwanie w gb


We wszystkich typach przeszukiwania musimy uwzgldni niespjno
grafw, dlatego waciwy algorytm przeszukiwania, ktry na wejciu otrzymuje
wierzchoek startowy, musimy zastosowa dla wszystkich spjnych
komponentw badanego grafu. Najczciej wic metod przeszukiwania stosuje
si kolejno dla wszystkich wierzchokw grafu (gdy nie wiemy, ktre
komponenty s spjne) sprawdzajc czy wybierany wierzchoek nie zosta ju
wczeniej odwiedzony.
Kolejno wyboru ssiadw moe zalee np. od ich numerw, tzn. majc
dwch ssiadw o numerach 4 i 6 wybieramy na pocztku 4, a potem 6.



III. 1. 1 Przeszukiwanie wszerz

Przy tym przeszukiwaniu odwiedzamy kolejno ssiadw danego
wierzchoka, a dopiero pniej potomkw tych ssiadw. Ogln ide
przeszukiwania wszerz przedstawia poniszy schemat:

Dane:

tablica visited[1..n] = 1,0 (visited[i]=1 gdy wierzchoek I zosta ju
odwiedzony, 0 gdy nie zosta jeszcze odwiedzony)

kolejka queue w ktrej znajduj si wierzchoki grafu, ktre bd
kolejno odwiedzane.






- Grafy i rekurencje -
32
Algorytm:

Dla i=1..n podstaw visited[i]0
Dla i=1..n wykonuj
{
Wyzeruj(queue)
Jeli (visited[i] = 0) Dodaj(queue) i
Dopki queue nie jest pusta wykonuj
{
xGowa(queue)
visited[x] = 1 (odwiedzenie wierzchoka)
ZwolnijGow(queue)
Dla kadego ssiada s wierzchoka x wykonuj
{
Jeli visited[s] = 0 Dodaj(queue) s
}
}
}

Przegldajc graf z rysunku nr 16 otrzymamy rezultat:
(a, b, c, d, h, e, f, g)


III. 1. 2 Przeszukiwanie w gb

Przy tym przeszukiwaniu odwiedzamy na pocztku dzieci danego ssiada
wierzchoka x, a pniej innych ssiadw wierzchoka x. Ide przeszukiwania w
gb przedstawia poniszy schemat.

Dane:
tablica visited[1..n] = 1,0 (visited[i]=1 gdy wierzchoek I zosta ju
odwiedzony, 0 gdy nie zosta jeszcze odwiedzony)

Algorytm rekurencyjny:
DFS(x)
{
visited[x] = 1 (odwiedzenie wierzchoka)
Dla kadego ssiada s wierzchoka x wykonuj
{
Jeli visited[s] = 0 DFS(s)
}
}
- Grafy i rekurencje -
33

wywoanie algorytmu przeszukiwania w gb

Dla i=1..n podstaw visited[i]0
Dla i=1..n wykonuj
{
Jeli (visited[i] = 0)
DFS(i)
}
Przegldajc graf z rysunku nr 16 otrzymamy rezultat:
(a, b, d, h, c, e, f, g)



III. 2 Klasy silnie spjne

W rozdziale tym rozpatrzymy algorytm dzielcy dowolny graf
zorientowany na komponenty silnie spjne.
Rozwamy graf zorientowany G=(X,E) stopnia n. Wybierzmy
wierzchoek r1X. Oznaczmy przez A
1
maksymalne drzewo o korzeniu r
1
,
zbudowane z ukw grafu G. Jeli A
1
nie zawiera wszystkich wierzchokw
grafu G, wybierzmy dowolny wierzchoek r
2
, ktry nie naley do drzewa A
1
.
Tworzymy maksymalne drzewo A
2
o wierzchoku r
2
, zbudowane z
wierzchokw grafu G-A
1
. Kontynuujc ten proces otrzymamy las drzew
rozcznych przykrywajcych w caoci wierzchoki grafu G.
Rozpatrzmy G
i
pod-graf oparty na wierzchokach drzewa A
i
. Rozpatrzmy
uki grafu G, ktre cz rne pod-grafy G
i
. Jeli istnieje uk pomidzy G
i
i G
j

,gdzie i<j, wwczas musi on prowadzi od G
j
do G
i
, bowiem w przeciwnym
przypadku G
i
nie byby maksymalny. W konsekwencji, jeli drzewa (A
i
)
1ip
zostay utworzone w wyniku przegldania grafu (np. w gb) zachodz
nastpujce wasnoci: (Rysunek nr 19)
r1
r2
r3
A A
A
1
2
p

Rysunek 19 Las oparty na grafie G


- Grafy i rekurencje -
34
Pomidzy kolejnymi G
i
, uki grafu G -
1ip
G
i
s skierowane tak
jak na rysunku nr 19.
Wewntrz kadego G
i
, uki G
i
A
i
cz tylko wierzchoki
znajdujce si w A
i
.


Dla potrzeb algorytmu bdziemy uywali grafu dualnego do G (graf
otrzymany przez zmian orientacji krawdzi) oznaczanego prze
d
G. Ponadto
przez C
G
(X) bdziemy oznaczali komponent silnie spjny zawierajcy
wierzchoek X.

Lemat 1
Dla 2 maksymalnych drzew (A,r) i (B,r) o wsplnym korzeniu r,
otrzymanych przy przegldaniu w gb kolejno grafw G i
d
G zachodzi ponisza
wasno:
xC
G
(r) x (A,r) (B,r).
Dowd: jeli xC
G
(r) , wwczas w grafie G istnieje cieka (r..x) , std
x(A,r), oraz cieka (x..r) std x (B,r). Dowd w drug stron jest
analogiczny.
Lemat 2
Dla kadego wierzchoka x grafu G
i
zachodzi: C
G
(x) = C
Gi
(x).
Dowd: Wemy wierzchoek y C
G
(x) i y x. Z definicji istnieje droga
od y do x, czyli y nie moe nalee do G
j
gdy j<i, bowiem nie ma adnego uku
od G
j
do G
i
. Z tego samego powodu istnieje droga od x do y i y nie naley do
adnego G
k
, gdy k>i. Std y naley do G
i
.
Rozpatrzmy teraz sekwencj drzew (A
1
,r
1
), (A
2
,r
2
) ... (A
p
,r
p
) otrzymanych
w wyniku przegldania grafu G w gb. Ponumerujmy wszystkie wierzchoki
kadego drzewa wedug porzdku postfix poczynajc od drzewa (A
1
,r
1
),a
koczc na drzewie (A
p
,r
p
); W szczeglnoci r
p
bdzie posiada numer n.
Lemat 3
Komponent silnie spjny oparty na ostatnim korzeniu C
G
(r
p
) jest zbiorem
wierzchokw odwiedzonych stosujc przegldanie w gb grafu
d
G poczwszy
od wierzchoka r
p
.
Dowd: Oznaczmy (B,r
p
) drzewo otrzymane w wyniku przeszukiwania w
gb grafu
d
G poczwszy od R
p
. Pokaemy najpierw, e wierzchoki drzewa
(B,r
p
) s zarazem wierzchokami drzewa (A
p
,r
p
). W rzeczywistoci z konstrukcji
sekwencji (A
i
,r
i
)
1ip
wynika, e nie ma adnych ukw dochodzcych do
- Grafy i rekurencje -
35
drzewa (A
p
,r
p
), innymi sowy, w grafie
d
G nie ma adnych ukw wychodzcych
z (A
p
,r
p
). W rezultacie kade drzewo grafu
d
G o korzeniu r
p
moe zawiera tylko
wierzchoki znajdujce si w (A
p
,r
p
), std wniosek, e kady wierzchoek
drzewa (B,r
p
) naley do (A
p
,r
p
).

O wierzchoku powiemy, e jest uzgodniony, jeli znaleziono ju dla niego
komponent silnie spjny.
Lemat 4
Wybierzmy wierzchoek nie uzgodniony, ktry posiada najwikszy numer
postfix. C
G
(r) jest zbiorem wierzchokw dotychczas nie uzgodnionych,
znalezionych w wyniku przeszukiwania w gb grafu
d
G poczwszy od r.
Dowd: Wybierzmy drzewo (A
i
,r
i
) do ktrego naley r. Oznaczmy przez S
zbir wierzchokw (A
i
,r
i
) ktre s uzgodnione. Zauwaamy, e dla numeracji
postfix, jeli S nie jest pusty, zawiera wierzchoek r
i
. W drzewie (A
i
,r
i
)
rozpatrzmy pod-drzewo (C,r) o korzeniu r. Prawdziwe s wasnoci:
nie ma adnych ukw od (C,r) do S, poniewa gdyby istnia taki
uk, wwczas istniaaby droga od r do wierzchoka s ju
uzgodnionego, czyli droga od s do r w
d
G
i
, czyli r byby
wierzchokiem odwiedzonym przy przeszukiwaniu
d
G.
nie ma ukw wracajcych do (C,r) wychodzcych z wierzchoka
nie uzgodnionego h spoza (C,r), gdy w przeciwnym przypadku
istniaby uk h c (C,r) , zatem c naleaby do innego pod-
drzewa opartego na korzeniu, ktrego numer jest mniejszy od
numeru korzenia r.

W konsekwencji przegldajc graf
d
G w gb poczwszy od r,
odwiedzamy tylko wierzchoki w (C,r) lub wierzchoki ju uzgodnione.
Moemy teraz zapisa ju ostateczny algorytm wyznaczania
komponentw silnie spjnych w grafie G:
1. przegldanie w gb grafu G, numerujc kolejne wierzchoki w porzdku
postfix
2. konstrukcja grafu dualnego
d
G.
3. Dopki istnieje wierzchoek nie uzgodniony wykonywanie operacji:
Przegldanie w gb grafu
d
G poczwszy od wierzchoka o najwikszym
numerze. Komponent silnie spjny dla tego wierzchoka jest zbiorem nie
uzgodnionych dotychczas wierzchokw spotkanych przy przegldaniu
grafu
d
G.

- Grafy i rekurencje -
36
Zoono obliczeniowa kadego etapu, to O(n+m). Na rysunku nr 20
przedstawiono przykadowy graf i jego silnie spjne komponenty.
G G
d
4
4 16
16
8 8
12 12
13
1
2
14 15
3
7 6 9
5
10 11
Las drzew z numeracj postfix.
Korzenie s w biaych koach
4 komponenty silnie spjne otrzymane
przez przegldanie w gb grafu dualnego
poczwszy od korzeni 16,12,8,4


Rysunek 20 Proces wyznaczania komponentw silnie spjnych


III. 3 Maksymalne skojarzenia

Problem znajdywania maksymalnego skojarzenia w grafie dwudzielnym
jest szczeglnym przypadkiem problemu znajdowania maksymalnego
przepywu w grafie wykorzystujc algorytm Forda Fulkersona.


- Grafy i rekurencje -
37
Wemy graf dwudzielny G=(X,E) to znaczy taki, ktrego zbir
wierzchokw moemy podzieli na dwa rozczne zbiory U i V, by X = U V,
a ponadto dla kadej krawdzi (a,b) E, takiej e a,b X zachodzi aU
bV, czyli krawdzie istniej tylko pomidzy wierzchokami z rnych zbiorw.
Problem znajdowania maksymalnego skojarzenia w grafie G sprowadza
si do znalezienia najwikszego pod wzgldem inkluzji podzbioru F zbioru
krawdzi w grafie G, czyli FG, speniajcego nastpujc zaleno:
(a,b)F i (c,d)F zachodzi abcd, czyli kada krawd zbioru F posiada
inny wierzchoek kracowy.
Z naszego grafu tworzymy graf skojarze G
s
= (Y,H) , ktrego zbir
wierzchokw jest powikszony o wierzchoek startowy s , oraz wierzchoek
kocowy t: Y = X {s,t}. Zbir krawdzi H jest powikszeniem zbioru E o
krawdzie pomidzy s i U, oraz krawdzie pomidzy V i t. Oglnie moemy
zapisa, e:
H = E {(s,x) dla xU} {(x,t) dla xU}
Poszczeglnemu skojarzeniu bdzie zatem odpowiada zbir drg
dugoci 3 od s do t, przy czym kada droga przechodzi przez inny wierzchoek
oraz adne dwie drogi nie mog mie wsplnych wierzchokw. Powyszy
schemat ilustruje rysunek nr 21.

s
U V
Graf dwudzielny Graf skojarze
t

Rysunek 21 Graf dwudzielny i graf skojarze

Metoda Forda-Fulkersona wykorzystana w problemie znajdowania
maksymalnego skojarzenia bdzie wic znajdowaa coraz to wikszy w sensie
inkluzji zbir drg od s do t. ciek powikszajc bdziemy nazywali tak
ciek od s do t, ktra pozwoli nam na powikszenie zbioru drg (zaleno
midzy t ciek a zbiorem drg podamy pniej).


- Grafy i rekurencje -
38
Oglny szkic algorytmu Forda-Fulkersona wyglda nastpujco:

Zainicjowanie zbioru drg na 0
while istnieje cieka powikszajca p
do powiksz zbir drg wzdu p
return(zbir drg)

Przyjrzyjmy si teraz w jaki sposb znajduje si ciek powikszajc
oraz jak na jej podstawie zmienia si aktualny zbir drg. W tym celu z naszego
grafu skojarze zbudujemy graf przepywu.
Graf przepywu G
p
=(Y,P) jest grafem skierowanym, ktrego uki speniaj
zalenoci:
dla kadych 2 wierzchokw a,b , ktre w grafie skojarze znajduj
si na tej samej drodze od sabt, do zbioru ukw P
dokadamy uki (s,a) , (a,b) , (b,t).
wszystkie pozostae krawdzie grafu G
s
dodaj do zbioru P grafu
G
p
uki skierowane od strony prawej do lewej, czyli albo uki od t
do wierzchokw z V albo uki od V do U lub od V do s.


Twierdzenie
Jeli w grafie dualnym
d
G
p
istnieje cieka od st wwczas w grafie
skojarze istnieje wikszy przepyw.

Dowd: Przypatrzmy si rysunkowi nr 22. Jeli omawiana cieka byaby
dugoci 3, np. snmt, wwczas moglibymy w aktualnym grafie
skojarze wybra poczenie wierzchokw n i m zwikszajc jednoczenie
przepyw w grafie, jeeli natomiast cieka ta byaby dusza, oznaczaoby to,
e musiay na niej wystpi przejcia od V do U. Kade takie przejcie usuwa
jedno skojarzenie wierzchoka z V z wierzchokiem z U, ale jeli cieka ma
doj do t, wwczas bdzie wtedy dodane jeszcze jedno skojarzenie U z V. W
rzeczywistoci przechodzc z wierzchoka a U do b V dodajemy skojarzenie
(ab), natomiast przechodzc z b U do a V usuwamy skojarzenie (ab).
Pozostaje nam jeszcze rozpatrzy przejcia do wierzchokw s oraz t,
jednak moemy je zaniedba, bowiem dla nowo otrzymanego ukadu skojarze
poczenie s z U oraz V z t moemy wygenerowa od nowa. Powstaje nam
nowy graf skojarze G
s
dla ktrego powtarzamy powyszy algorytm do
momentu, gdy nie bdzie istniaa cieka powikszajca od s do t. Szkic
dziaania algorytmu przedstawia rysunek nr 22.
- Grafy i rekurencje -
39
s s
Gr af przepyww
t t
Graf dualny do gr afu przep yww
i cieka powikszajca (sabcdt)
a
b
c
d


Rysunek 22 Graf przepyww i cieka powikszajca

Brak cieki powikszajcej dla aktualnego grafu skojarze oznacza, e
znalelimy ju maksymalne pod wzgldem inkluzji skojarzenie w grafie
dwudzielnym G, co przedstawia rysunek nr 23.
Maksymalne skojarzenie

Rysunek 23 Rezultat dziaania algorytmu Forda Fulkersona


III. 4 Najkrtsze cieki z jednym rdem

Problem znajdowania najkrtszej cieki z jednym rdem odnosi si bez
wtpienia do grafw waonych G=(X,E) stopnia n, czyli takich, e istnieje
funkcja wagi f ktra dla kadego uku ze zbioru E jednoznacznie okrela jego
wag. Zakadajc, e dla kadego uku (a,b) zachodzi f((a,b)) 0, do
znalezienia najkrtszych cieek od jednego rda najczciej wykorzystuje si
algorytm Dijkstry.
Przedstawiony poniej algorytm jest algorytmem zachannym, mimo to
zawsze daje nam optymalne rozwizanie.



- Grafy i rekurencje -
40
W algorytmie Dijkstry wykorzystujemy nastpujce zmienne:
sX jest wierzchokiem startowym (jedynym rdem)
d[1..n] Tablica o wartociach dodatnich (ew. zerowych).
Reprezentuje ona aktualnie minimalne odlegoci wszystkich
wierzchokw od rda. Po zakoczeniu algorytmu jeli d[i] = w,
to (s,i) = w.
zbir S wierzchokw, dla ktrych zostaa ju znaleziona
minimalna odlego od rda.
tablica p[1..n]- nie jest konieczna do obliczenia minimalnych
odlegoci od rda, jednak wykorzystujemy j do odtworzenia
minimalnej cieki ; jeli p[i] = j, oznacza to, e na tej ciece
poprzednikiem wierzchoka i jest wierzchoek j.
Sam algorytm przedstawia si nastpujco:

for i 1 to n do
d[i]
p[i] s Inicjacja rda
d[s] 0
S {s}

while X S do
v Minimal(X-S)
S S {v}
for kady wierzchoek u ssiadujcy z v do
Relaksacja(u,v)

Na pocztku nastpuje inicjalizacja rda s. W tablicy d tylko d[s] = 0,
poniewa znajdujemy si w rdle. Wystpujc w algorytmie ptla while
bdzie wykonywana n-1 razy, dodajc przy kadym jej przejciu jeden
wierzchoek do zbioru S. Pierwsz instrukcj tej ptli jest wybranie ze zbioru
XS wierzchoka v, ktry jest najbliej rda, co obrazuje rysunek nr 24.
s
zbir S
1
2
3
4
5

Rysunek 24 Znajdowanie wierzchoka minimalnego
- Grafy i rekurencje -
41
Przy znajdowaniu wierzchoka minimalnego musimy bra pod uwag
odlegoci kandydatw od rda s. Dysponujc tablic d, wybieramy z niej
najmniejszy element, ktry nie naley jeszcze do zbioru S.
Nastpna instrukcja ptli while dodaje do zbioru S wierzchoek minimalny
v. Teraz pozostaje nam tylko dla kadego ssiada u wierzchoka v wykona
funkcj relaksacji, ktra przedstawia si nastpujco:

Relaksacja(u,v)
if d[u] > d[v] + f(v,u) then
d[u] d[v] + f(v,u)
p[u] v

Dziaanie algorytmu na przykadowym grafie przedstawia rysunek nr 25.


2 2 2
2 2 2
3
3 3
3 3 3
3 3
3 3 3
1 1 1
1 1 1
7 7 7
7 7 7
7 7
8
8 8
8 8 8
8
3 3 3
3
3 3
10 10
10
10 10 10
1 1 1
1 1 1
0
0 0
0 0 0
8 8 8
8
8
5
5 5 5
13
13
6 6 6
9 9

Rysunek 25 Dziaanie algorytmu Dijkstry



Na powyszym rysunku wierzchoki zaciemnione nale do zbioru S, a
pogrubione krawdzie reprezentuj aktualne minimalne cieki do wszystkich
wierzchokw.
Do wypisania wierzchokw lecych na minimalnej ciece od rda s
do wierzchoka v suy funkcja rekurencyjna:
- Grafy i rekurencje -
42
Wypisz(s,v)
up[v]
if us then Wypisz(s,u)

By wypisa take wierzchoki kracowe tej cieki naley wywoa:

Print(s)
Wypisz(s,v)
Print(v)

Algorytm Dijkstry rzeczywicie daje optymalne rozwizanie, dla kadego
wierzchoka v zachodzi: d[u] = (s,u).
Dowd: Zamy, e powysza zaleno nie zachodzi, to znaczy istnieje
taki wierzchoek q, e d[q] > (s,q). Oznacza to, e algorytm najpierw
wygenerowa najkrtsz ciek od s do q, a pniej znalaz krtsz ciek,
ktra nie zostaa uwzgldniona. Oznaczmy pierwsz ciek jako sx
1
x
2
..x
n
q , a
drug jako sy
1
y
2
..y
m
q. Zatrzymajmy si w momencie t, gdy w ptli while
algorytm wybra wierzchoek minimalny q, ktrego poprzednikiem by x
n
.
Jeli rzeczywicie znaleziona pniej druga cieka jest krtsza, to kada
jej pod-cieka sy
1
y
2
..y
j
gdzie jm jest krtsza od pierwszej cieki. Oznacza to,
e w etapach algorytmu poprzedzajcych t do zbioru S bd dodawane
wierzchoki y
1
..y
m
i ostatecznie druga cieka zostanie znaleziona w pierwszej
kolejnoci, a poprzednikiem q bdzie y
m
co daje sprzeczno.
Algorytm Dijkstry nie bdzie dziaa prawidowo, gdy w grafie
skierowanym bd istniay uki ujemne, bowiem wwczas po n krokach bdzie
zachodzia rwno S = X a tablica d bdzie zawieraa wartoci, ktre
niekoniecznie bd wartociami najkrtszych cieek. Posumy si grafem z
rysunku nr 25 zmieniajc warto krawdzi (9,5) na 10.

2
3
3
1
7
8
3
10
-10
0
5
6
9

Rysunek 26 Niewykonalno algorytmu Dijkstry


- Grafy i rekurencje -
43
Widzimy, e gdy bdziemy odwiedza kolejno wierzchoki 5,6,9,5 ..
wwczas wartoci w tablicy d dla tych wierzchokw bd staway si coraz
mniejsze, a algorytm tego nie uwzgldni.
Moemy wprowadzi modyfikacj do algorytmu Dijkstry, tzn. stosujc
zamiast zbioru S, kolejk Q wierzchokw, ktre naley jeszcze odwiedzi.
Zmodyfikowany algorytm bdzie wyglda nastpujco:
for i 1 to n do
d[i]
p[i] s
d[s] 0
Q {s}

repeat
x DeQueue(Q)
for kady wierzchoek u ssiadujcy z x do
if d[u] > d[x] + f(x,u) then
d[u] d[x] + f(x,u)
p[u] x
if uQ then EnQueue(Q,u)
until Q jest pusta

W powyszym algorytmie kursyw zostay zaznaczone operacje
DeQueue(Q) oraz EnQueue(Q,u) odpowiednio usuwajce z kolejki pierwszy
element oraz dodajce na koniec kolejki element u.
Podzielmy kolejne etapy wykonywania algorytmu na kroki. Podczas
pierwszego kroku ma miejsce inicjalizacja kolejki, czyli dodanie do niej
wierzchoka s.
Dla k>0, krok k jest jednym przejciem ptli repeat, czyli wszystkimi
operacjami wykonywanymi na wierzchokach znajdujcych si w kolejce pod
koniec kroku k-1. Prawdziwe jest twierdzenie:
jeli istnieje cieka minimalna s x zawierajca k ukw, wwczas na
pocztku kroku k d(x) jest dugoci tej cieki.

Dowd indukcyjny ze wzgldu na warto k:
k=0, wtedy za x moemy przyj tylko rdo, ktre w kroku 0 bdzie
miao poprawnie obliczone d(s) = 0
Zamy, e twierdzenie jest prawdziwe dla k. Udowodnimy, e jest
prawdziwe dla k+1. Jeli wiemy, e istnieje wierzchoek y oraz cieka s x
zawierajca k+1 ukw, wwczas bdzie istnia wierzchoek x, uk (x,y), oraz
- Grafy i rekurencje -
44
dla wierzchoka x bdzie istniaa cieka s y zawierajca k ukw.
Skorzystawszy z zaoenia indukcyjnego widzimy, e na pocztku kroku k
zostaje obliczone d(x), co gwarantuje nam, e w kroku k+1 w kolejce znajdzie
si wierzchoek x. W kolejnym kroku algorytmu zostanie obliczona warto
d[x], co koczy dowd.


III. 5 Najkrtsze cieki z wieloma rdami

Czsto majc skierowany graf G chcielibymy znale najkrtsze
odlegoci midzy dowolnymi dwoma wierzchokami. Problem taki moemy
spotka, gdy np. majc map drogow chcemy poda odlegoci czce
dowolne miasta na tej mapie.
Teoretycznie problem ten moglibymy rozwiza stosujc algorytm
Dijkstry kolejno dla kadego wierzchoka grafu G, to znaczy kadorazowo
podstawiajc za rdo kolejny wierzchoek grafu. Rozwizanie to jednak nie
jest stosowane ze wzgldu na dugi czas dziaania algorytmu. Do znalezienia
minimalnych cieek midzy dwoma dowolnymi wierzchokami grafu
skierowanego, bez cykli ujemnych G stosuje si czsto algorytm Floyda-
Warshalla.
Sam algorytm jest prosty i czytelny w zapisie, pozwala na znalezienie
minimalnych i ich dugoci midzy dowoln par 2 wierzchokw, jednak
przekonanie si o jego poprawnoci nie jest natychmiastowe.
Standardowo na wejciu algorytmu mamy macierz H=(h
ij
) rozmiarw nn
grafu G, tzn. h
ij
=k, jeli istnieje uk (i,j) dugoci k
h
ij
=, jeli nie ma uku (i,j)
Algorytm znajduje kolejne macierze D
(i)
dla i=0..n , gdzie D
(0)
jest
macierz H, natomiast D
(n)
to macierz minimalnych odlegoci, ktra
jednoczenie jest macierz grafu G
t
bdcego domkniciem tranzytywnym
grafu G.
Algorytm Floyda-Warshalla wyglda nastpujco:

nRozmiar(H)
D
(0)
H
for k1 to n do
for i1 to n do
for j1 to n do
d
(k)
ij
min{d
(k-1)
ij
, d
(k-1)
ik
+ d
(k-1)
kj
}
return D(n)
- Grafy i rekurencje -
45

Jak wida algorytm dla kolejnych wartoci k, przeglda kad moliw
ciek ij i sprawdza czy przechodzc przez k, czyli ikj nie otrzymamy
cieki krtszej.
Jeli chcielibymy odtworzy minimaln ciek, wwczas istnieje
potrzeba pamitania macierzy poprzednikw S, ktra na pocztku bdzie
przyjmowaa wartoci: s
ij
= i jeli istnieje uk (i,j)
s
ij
= Nil jeli nie istnieje uk (i,j)
Modyfikacje wartoci macierzy S bd nastpoway zaraz po wykonaniu
w algorytmie instrukcji d
(k)
ij
min{d
(k-1)
ij
, d
(k-1)
ik
+ d
(k-1)
kj
}. Jeli funkcja min
wybierze drugi skadnik, wwczas dodamy instrukcj s
ij
k. Po zakoczeniu
dziaania algorytmu ciek ab bdziemy mogli odtworzy wywoaniem:

if s
ab
nil then
Poka(a,b)
print(b)
else nie istnieje cieka ab

gdzie Poka(x,y) jest funkcj rekurencyjn zdefiniowan nastpujco:

Poka(i, j)
ks
ij

if i=k then print(k)
else
Poka(i, k)
Poka(k+1, j)

Na rysunku nr 27 Pokazany jest przykadowy graf, dla ktrego zbudujemy
cig macierzy D, oraz macierz S.

1
2
3
4
8
2
2
3
1
5

Rysunek 27 Graf dla algorytmu Floyda - Warshalla




- Grafy i rekurencje -
46
D
(0)
D
(1)
D
(2)

0 2

0 2

0 2 5 3
5 0 3 1 5 0 3 1 5 0 3 1

0



0



0

2

8 0 2 4 8 0 2 4 7 0

S S S
Nil 1 Nil Nil Nil 1 Nil Nil Nil 1 2 2
2 Nil 2 2 2 Nil 2 2 2 Nil 2 2
Nil Nil Nil Nil Nil Nil Nil Nil Nil Nil Nil Nil
4 Nil 4 Nil 4 1 4 Nil 4 1 2 Nil

D
(3)
D
(4)

0 2 5 3 0 2 5 3
5 0 3 1 3 0 3 1

0



0

2 4 7 0 2 4 7 0

S
Nil 1 2 2 Nil 1 2 2
2 Nil 2 2 4 Nil 2 2
Nil Nil Nil Nil Nil Nil Nil Nil
4 1 2 Nil 4 1 2 Nil


Jak atwo zauway, potrjne ptle for pocigaj za sob zoono
obliczeniow algorytmu Floyda Warshalla rzdu O(n
3
).
Dowd poprawnoci
Zamy, e w grafie skierowanym bez cykli ujemnych G=(X,E) bdzie
istniaa minimalna cieka (ax
1
x
2
.. x
k
b) czca 2 wierzchoki a i b.
Ponumerujmy kolejno wszystkie wierzchoki x X. Wybierzmy ze zbioru {
x
1
,x
2
, .., x
k
} wierzchoek x
j
o najwikszym numerze. Pod-cieki znajdujce si
na ciece minimalnej te s minimalne, dlatego bdziemy mieli ab =
ax
j
b. Oznaczmy czas operacji rozbicia cieki minimalnej przez t
j
. Wrd
wierzchokw lecych wewntrz nowo powstaych cieek nie ma
wierzchokw o numerze wikszym od x
j
. Operacj rozbicia cieek
kontynuujemy dopki nie otrzymamy cieek zoonych z pojedynczych ukw.
Ponadto kade rozbicie oparte o wierzchoek x
i
bdzie nastpowao w czasie t
i
, a
numery wierzchokw bd malay, dlatego odwracajc sytuacj: bdziemy w
kolejnych odcinkach czasu (kolejnych etapach dziaania algorytmu) sprawdzali,
czy dla dowolnej drogi xy korzystniejsze jest przejcie przez wierzchoek x
i

czyli xx
i
y przy czym x
i
bd posiaday coraz wiksze numery. Taki wybr
- Grafy i rekurencje -
47
wierzchokw x
i
gwarantuje nam pierwsza ptla for algorytmu. Podzia cieki
na pod-cieki obrazuje rysunek nr 28.

1
2
3
4
5
6
t
t
t
t
6
5
3
1

Rysunek 28 Podzia cieki dla algorytmu Floyda Warshalla



III. 6 Drzewa rozpinajce

Dla kadego grafu spjnego G=(X,E) moemy skonstruowa drzewo
rozpinajce T=(X,F), czsto jednak spotykamy si z grafami, w ktrych
krawdzie posiadaj wag, tzn. z grafem G utosamiamy funkcj p: E ,
ktra kadej krawdzi przypisuje warto rzeczywist. Kade drzewo
rozpinajce posiada zatem cile okrelon wag:
P(T) =
eT
p(e).
Rozpatrzymy dwa algorytmy pozwalajce na znalezienie minimalnego
drzewa rozpinajcego (do znalezienia drzewa maksymalnego wystarczy przyj
funkcj wagow p).
Wniosek 1
Kade drzewo rozpinajce grafu G stopnia n, posiada n-1 krawdzi.
Dowd indukcyjny ze wzgldu na n jest stosunkowo prosty. Lemat ten
pozwala nam na wycignicie nastpujcego wniosku:
Wniosek 2
eE(G)E(T) T+e posiada unikalny cykl
Dowd: Niech e=(x,y) oraz w drzewie T istnieje cieka xy. Dodajc
krawd e, ktra nie ley na tej ciece tworzymy cykl. Jest to cykl elementarny,
bowiem w drzewie T istnieje tylko jedna cieka czca x i y.
Cykl drzewa T+e oznaczmy jako C
T
(e)
- Grafy i rekurencje -
48
Wniosek 3
Drzewo rozpinajce T grafu G jest minimalne
eE(G)E(T)

fCT(e)
p(f)p(e)
Dowd: Wemy krawd e=(x,y) grafu G, ktra nie naley do drzewa T.
Dodajc t krawd do tego drzewa otrzymamy unikalny cykl C
T
(e) oparty na
ciece s i krawdzi e. Oznaczmy ten cykl przez c=(ya
1
a
2
...a
n
x). Jeli krawd e
nie jest najwiksza, wwczas w znalezionym cyklu wyodrbnijmy krawd
dusz f. Usumy teraz z cyklu c krawd f. Otrzymamy ciek s czc
wierzchoki x,y,a
1
,a
2
, .., a
n
. Jeli teraz zastpimy w drzewie T ciek s ciek
s otrzymamy nowe drzewo minimalne sprzeczno.
Dowd w drug stron jest oczywisty.

Wniosek 4
Jeli p jest iniekcj, wwczas drzewo rozpinajce jest unikatowe.

Przedstawimy teraz 2 algorytmy znajdowania drzewa minimalnego:

III. 6. 1 Algorytm Kruskala

Tworzymy zbir krawdzi grafu G uporzdkowany wedug rosncych
wag: E
p
= (e
1
,e
2
, ..., e
n
). Na znalezienie drzewa minimalnego pozwala nam
sekwencja:

T
1

T
i+1
T
i
+ e
k


gdzie k jest najmniejszym indeksem j takim, e ej nie tworzy cyklu z
krawdziami w T
i
. T
n
jest drzewem minimalnym.

Dowd:
Zamy, e T
n
nie jest minimalne. Niech e bdzie krawdzi nie nalec
do drzewa T
n
. Std istnieje cykl C
T
(e) oparty na ciece s taki, e
fs
p(e)<p(f)
Z drugiej strony algorytm dziaajcy na uporzdkowanym zbiorze E
p

zbudowa drzewo z krawdzi krtszych od e, co daje sprzeczno.

Algorytm Kruskala jest przejrzysty i efektywny, bowiem kad krawd
grafu rozpatrujemy tylko raz, wystarczy jedynie na pocztku posortowa je
rosnco w czasie O(n logn). Zachodzi jednak potrzeba sprawdzania czy
dodawana krawd nie spowoduje powstania cyklu, co w niektrych
implementacjach grafu jest czasochonne, dlatego czsto stosuje si:
- Grafy i rekurencje -
49
III. 6. 2 Algorytm Prima

Dla zbioru X={x
1
,x
2
, ..., x
n
} wierzchokw grafu G mamy sekwencj:
T
1

S
1
{1}
T
i+1
T
i
+ e
i

S
i+1
S
i
+ x
i+1

gdzie e
i
= xx
i+1
jest najmniejsz krawdzi czc jeden wierzchoek ze
zbioru S
i
z jednym wierzchokiem ze zbioru X-S
i
.


W kadym etapie j dziaania algorytmu Prima T
i
jest czci kocowego
drzewa minimalnego T
n
. Taka konstrukcja powoduje, e kocowe drzewo T
n

spenia Wniosek 3.

- Grafy i rekurencje -
50
Rozdzia IV Algorytmy numeracji


Algorytmy numeracji su do przyporzdkowywania wszystkim
elementom badanej przestrzeni unikatowych numerw.


IV. 1 Sowa

Mamy dany zbir A nazywany alfabetem, skadajcy si z elementw:
A={a
1
, a
2
, a
3
, ..., a
n
} gdzie: a
1
<a
2
<a
3
< ... <a
n
. Zakadamy, e dla kadego
elementu zbioru A jestemy w stanie jednoznacznie okreli element nastpny
oraz poprzedni, co pozwala nam jednoznacznie okreli element pierwszy i
ostatni w alfabecie A. Dla alfabetu A zdefiniujemy wic 4 funkcje:
Nastpny
A
(a
i
) = a
j
, gdzie a
i
<a
j
i !
k
, e a
i
< a
k
< a
j

Poprzedni
A
(a
i
) = a
j
, gdzie a
i
>a
j
i !
k
, e a
i
> a
k
> a
j

Pierwszy
A
= a
1

Ostatni
A
= a
n
.

Utwrzmy zbir W
p
sw dugoci p opartych na jzyku A. atwo
zauwaamy, e wszystkich moliwych sw jest n
p
.

Przykad:
Dla alfabetu A={a,b,c} Zbir W
2
={aa, ab, ac, ba, bb, bc, ca, cb, cc}
Dla uporzdkowania elementw zbioru W
p
i w konsekwencji
ponumerowania jego elementw zastosujemy porzdek leksykograficzny, ktry
okrela ponisza regua:
Mamy 2 sowa: m=b
1
b
2
b
3
...b
p
, oraz m=c
1
c
2
c
3
...c
p

m <
L
m (
ip

j<i
b
j
=c
j
oraz b
i
<c
j
)

Dla alfabetu A i powyszego porzdku leksykograficznego, okrelamy
stae: First=a
1
p
oraz Last = a
n
p
.
Algorytm korzysta z funkcji Next(m) , ktra jako parametr otrzymuje
aktualne sowo, w naszym przypadku tablic [1..p], a zwraca kolejne sowo w
porzdku leksykograficznym.






- Grafy i rekurencje -
51
NUMERACJA_LEKSYKOGRAFICZNA(A,p)

M First
while M Last do
Wypisz(M)
M Next(M)
Pozostaje zdefiniowa funkcj Next(M). M jest tablic [1..p]

Next(sowo)
i p
while sowo[i] = Ostatni
A
do
i i 1
if i >0 then
sowo[i] Nastpny
A
(sowo[i])
for j i+1 to p do
sowo[j] PierwszyA
return(sowo)
else return(Null)

Gdy sowo jest ostatnie, tzn. nie da si wygenerowa kolejnego
korzystajc z alfabetu A, wwczas funkcja Next zwraca Null. Zoono
obliczeniowa tego algorytmu wynosi O(n
p
).
Rzadko spotyka si algorytmy numerujce elementy zbioru wedug
porzdku leksykograficznego dla dowolnej dugoci sowa, gdy wwczas
moglibymy tworzy nieskoczenie dugie sowa, ktrych komputer nie
potrafiby porwna.


IV. 2 Permutacje

Permutacja na zbiorze A={a
1
, a
2
, a
3
, ..., a
n
}, gdzie a
1
<a
2
<a
3
< ... <a
n
jest
sowem dugoci n, ktrego poszczeglne litery wystpuj tylko raz.
P
n
= {m W
n
, e
i,j = 1..n
m[i] m[j] }
Zauwaamy, e P
n
W
n
, oraz e wszystkich moliwych permutacji jest n!
Przykad:
A={a,b,c} P
3
= {abc, acb, bac, cab, cba}

Minimalne sowo w zbiorze P
n
, to: a
1
a
2
a
3
...a
n
= Minimal.
Maksymalne sowo w zbiorze P
n
, to: a
n
a
n-1
a
n-2
...a
1
.

- Grafy i rekurencje -
52
Podobnie jak w rozdziale IV.1, moemy do numeracji elementw P
n
uy
algorytmu leksykograficznego, lecz moemy take zastosowa szybki algorytm
rekurencyjny.

Zastosujemy funkcj Permutacja(a, b, Tab), gdzie
Tab - jest tablic [1..n] rnych elementw alfabetu A. Bdzie to
zmienna globalna, czyli naley do funkcji Permutacja przekazywa
Tab przez referencj.
a jest lew granic tablicy, na ktrej bdziemy przestawiali
elementy
b jest praw granic tablicy, na ktrej bdziemy przestawiali
elementy.

Wywoanie Permutacja(a, b, Tab) wygeneruje wszystkie permutacje
przedziau [a,b] tablicy Tab.
Potrzebujemy take funkcji Zamie(a,b) , ktra zamieni ze sob pozycj
dwch elementw tablicy: Tab[a] i Tab[b].
Algorytm, ktry ponumeruje permutacje P
n
bez uwzgldnienia porzdku
leksykograficznego bdzie wywoywany:

Tab Minimal
Permutacja(1,n,Tab)

Pozostaje nam jeszcze zdefiniowa:

Permutacja(i,n,Tab)
if i=n then
Wypisz(Tab)
else
for j i to n do
Zamie(Tab[i], Tab[j])
Permutacja(i+1, n, Tab)
Zamien(Tab[i], Tab[j])

Zauwamy, e wywoanie Permutacja(i, n, Tab) bdzie zmieniao
zawarto tablicy Tab na przedziale [i..n], natomiast zawarto tablicy Tab na
przedziale [1..i-1] nie ulegnie zmianie. Udowodnimy, e powysze wywoanie
wygeneruje wszystkie moliwe permutacje przedziau [i..n].

Dowd indukcyjny ze wzgldu na dugo przedziau:
1. Jeli przedzia ma dugo 1, wwczas istnieje tylko jedna permutacja
tego przedziau, czyli nastpi wypisanie Tablicy.
- Grafy i rekurencje -
53

2. Zakadamy, e dla przedziau [i+1 .. n] dugoci n-i-1 algorytm
wygeneruje wszystkie permutacje. Chcemy udowodni, e algorytm
wygeneruje wszystkie permutacje dla przedziau [i .. n]. W ptli for
funkcji Permutacja wywoamy n-i razy funkcj Permutacja dla
przedziau [i+1 .. n] podstawiajc kolejno element Tab[i] na kad z
pozycji i+1 .. n tablicy Tab. Z zaoenia indukcyjnego, kade
pojedyncze wywoanie Permutacja(i+1, n, Tab) wygeneruje nam
wszystkie permutacje przedziau [i+1 .. n] tablicy Tab, std algorytm
rzeczywicie wygeneruje wszystkie permutacje na caym przedziale
[i .. n] dugoci n-i. Szkic rozumowania przedstawiony jest na rysunku
nr 29.
1
1
i
i
n
n
n
i+1

Rysunek 29 Numerowanie permutacji

Do policzenia zoonoci obliczeniowej powyszego algorytmu zbudujmy
drzewo wywoa rekurencyjnych rysunek nr 30.

Permutacja(1,n,Tab)
Premutacja(2,n,Tab) Premutacja(2,n,Tab) Premutacja(2,n,Tab)
Permutacja(n-1,n,Tab)
...........
...........
...........
...........
n wywoa
1 wywoanie
n-1 wywoa n-1 wywoa n-1 wywoa
Wypisz
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.

Rysunek 30 Drzewo wywoa rekurencyjnych przy generowaniu permutacji
- Grafy i rekurencje -
54
Na rysunku nr 30 widzimy, e ilo lici w drzewie, to n*(n-1)* ... 1 = n! .
Jeli algorytm wypisujcy pojedyncz permutacje ma zoono O(n), wwczas
zoono obliczeniowa rekurencyjnego algorytmu numeracji permutacji, to
O(n*n!).


IV. 3 Kod Graya

Mwimy, e cig permutacji opartych na zbiorze A jest wygenerowany
przez Kod Graya, jeli kada nastpna permutacja rni si od poprzedniej
zamian pozycji dwch ssiednich elementw.
Przykad:
A={a,b,c} Zbir permutacji = {abc, acb, cab, cba, bca, bac}

Twierdzenie:
Dla kadego n istnieje Kod Graya generujcy P
n
, czyli potraficy
wygenerowa wszystkie permutacje oparte na zbiorze n elementowym.

Rozpatrzmy graf G(P
n
)=(P
n
, E) zdefiniowany w nastpujcy sposb: P,
PP
n
(P,P)E
P jest permutacj powsta z P przez przestawienie
2 ssiednich elementw

Twierdzenie:
Istnieje Kod Graya dla permutacji P
n
wtedy i tylko wtedy, gdy G(P
n
)
posiada drog Hamiltona.
Twierdzenie to jest oczywiste, wystarczy spojrze na przykad z rysunku nr 31.

abc acb
cba
bac cab
bca
G
G posiada cykl
Hamiltona

Rysunek 31 Kod Gray'a i cykl Hamiltona

- Grafy i rekurencje -
55
Z kodem Graya spotykamy si rwnie, gdy mwimy o generowaniu
zbioru podzbiorw danego zbioru A. Przedstawimy dwa algorytmy oparte na
kodzie Graya , pozwalajce na wygenerowanie cigu podzbiorw zadanego
zbioru A w taki sposb, by dwa kolejne elementy tego cigu byy zbiorami
rnicymi si 1 elementem.
Jeli zbir A posiada k elementw, wwczas ma on 2
k
podzbiorw. Niech
A={a
1
, a
2
, ..., a
n
}. Z kadym podzbiorem P bdziemy wizali tablic binarn
tab[1..n] tak, by zachodzia zaleno a
i
P tab[i] = 1.
Pierwszy algorytm buduje drzewo, ktrego wierzchokami s podzbiory
A, ponadto kolejno dodawane wierzchoki s uoone w porzdku
leksykograficznym. Kade 2 wierzchoki s wic od siebie rne, a na kadej
drodze od korzenia drzewa do licia znajduj si podzbiory rnice si tylko o
1 element . Rysunek nr 32 przedstawia drzewo dla A={a,b,c,d}.

r
a
ab
abc
abcd
abd
ac ad
b
bc
bcd
bd
c
cd
d
acd

Rysunek 32 Uporzdkowane drzewo podzbiorw

W algorytmie aktualna permutacja bdzie reprezentowana przez stos S.
Elementy znajdujce si na stosie bd elementami aktualnego podzbioru. Na
pocztku S={a}. Kady nowy stan stosu bdzie nowym podzbiorem. Operacja
Top
S
zwrci warto na wierzchoku stosu. Operacja Pop
S
zdejmie element ze
stosu. Operacja Push
S
(X) umieci na stosie element X. Algorytm wyglda
nastpujco:

while S do
Wypisz(S)
if Top
S
< Ostatni
A
then
Push
S
(Nastpny
A
(Top
S
))
else
Pop
S

if S then
Push
S
(Nastpny
A
(PopS))
- Grafy i rekurencje -
56
Pozostaje jeszcze wypisa korze, czyli podzbir pusty.

Drugi z algorytmw wygeneruje cig zoony z wszystkich podzbiorw A
reprezentowanych przez tablice tab w taki sposb, by kolejne tablice rniy si
na jednym bicie. W rezultacie dla grafu G(P(A)) = G(P(A), E) takiego, e
X,YP(A)
(X,Y) E (X i Y rni si jednym elementem)
bdzie istniaa droga Hamiltona, co przedstawia rysunek nr 33.

0
a
b
c
ab
ac
bc
abc
0 = 000
b = 010
ab = 110
a = 100
ac = 101
abc = 111
bc = 011
c = 001

Rysunek 33 Podzbiory i cykl Hamiltona

Powyszy schemat numeracji mona uzyska posugujc si
nastpujcym algorytmem rekurencyjnym:

(

= +
(

=
R
n G
n G
n G G
) ( 1
) ( 0
) 1 (
1
0
) 1 (


Macierz G(1) jest wyjciowa. Macierz G(n+1) tworzymy z macierzy G(n)
w nastpujcy sposb: odkadamy kolejno, macierz G(n) a po niej macierz
G(n)
R
odbicie horyzontalne macierzy G(n). Do nowo powstaej macierzy
dodajemy now pierwsz kolumn wektor skadajcy si z 2
n
zer i 2
n
jedynek.
Zauwaamy, e kolejne wiersze nowo powstaej macierzy G(n+1) rni si
midzy sob na jednym bicie. W czci G(n) i G(n)
R
z zaoenia wiersze rniy
si na jednym bicie. Wiersze 2
n
, oraz 2
n+1
rni si tylko na pierwszym
elemencie.
- Grafy i rekurencje -
57
Ponumerujmy teraz kolumny macierzy G(n) od prawej do lewej. Dla kadego n,
zbudujmy cig T(n) przeksztace kolejnych wierszy G(n) (jeli np. wiersz 011
zmienia si na 010, wwczas zmienilimy 2-gi bit, czyli do T(n) dodajemy 2).
Piszemy zatem:
T(1) = (1)
T(2) = (1,2,1)
T(3) = (1,2,1,3,1,2,1)
........ (wnioskujemy, e dla dowolnego n zachodzi)
T(n) = (T(n-1), n, T(n-1))

Dziki temu moemy poda zoono obliczeniow powyszego
algorytmu generowania kodu Graya, ktra wynosi O(2
n
)

Kolejnym problemem jest znalezienie nastpnej permutacji w porzdku
leksykograficznym, to znaczy, e majc zbir A={a
1
, a
2
, a
3
, ..., a
n
}, gdzie
a
1
<a
2
<a
3
<...<a
n
i pewn permutacj elementw p = (a
i1
a
i2
... a
in
) szukamy
nastpnej permutacji p = (a
j1
a
j2
... a
jn
).

Przykad:
A={1,2,3,4,5} p=31542 p = 32145

Algorytm:
Zamy, ze p bdzie permutacj przedstawion w tablicy tab[1..n]. W
celu znalezienia kolejnej permutacji, wyszukujemy najduszy rosncy cig
elementw w p, poczwszy od strony prawej do lewej, ktry oznaczamy
(tab[k],tab[k+1], ..., tab[n]). W przykadzie cigiem tym bdzie (5,4,2).
Nastpny element tab[k-1] w permutacji p jest mniejszy od tab[k], czyli
moliwe jest wygenerowanie nastpnej permutacji. Aby to zrobi zamieniamy
elementy tab[k-1] z tab[n], a nastpnie sortujemy rosnco elementy od pozycji k
do n, tak by tab[k] < tab[k+1] < ... < tab[n]. W ten sposb powstaje nam
kolejna (w porzdku leksykograficznym) permutacja p. W najbardziej
niekorzystnym przypadku bdziemy sortowali n elementw, a jak wiadomo
wszystkich permutacji jest n!, dlatego stosujc do sortowania algorytm quicksort
o zoonoci obliczeniowej O(n*log(n)) otrzymamy ostateczn zoono
obliczeniow algorytmu znajdowania kolejnych permutacji: O(n!*n*log(n)).
- Grafy i rekurencje -
58
Rozdzia V Funkcje rekursywne


V. 1 Funkcje rekursywnie prymitywne

Funkcjami rekursywnie prymitywnymi nazywamy te funkcje, ktre
analizuje bezporednio komputer. Konstrukcja ukadw scalonych pozwala na
wygenerowanie podstawowych funkcji, czyli tzw. funkcji bazowych, wrd
ktrych wyrniamy:
funkcj sta z N w N, ktrej warto stale jest rwna 0.
funkcj nastpnika oznaczan suc, ktra ze zmienn wejciow x
wie warto x+1.
funkcj projekcji pr
p
i
przestrzeni N
p
w N zdefiniowan jako
pr
p
i
(x
1
,...x
p
) = x
i
dla i=1, 2, ..., p.

Definiujemy f jako funkcj zoon z funkcji g
1
, g
2
, ..., g
p

odwzorowujcych przestrze N
n
w N oraz funkcji h z przestrzeni N
p
w N w
nastpujcy sposb:
f(x
1
, ..., x
n
) = h[g
1
(x
1
, ..., x
n
), ........, g
p
(x
1
, ..., x
n
)]

Schemat rekurencji prymitywnej wie z dwiema funkcjami g oraz h
majcymi odpowiednio p oraz p+2 argumentw, funkcj p+1 argumentow f
zdefiniowan w sposb nastpujcy:
f(x
1
, ..., x
p
,0) = g(x
1
, , x
p
)
f(x
1
, , x
p
, y+1) = h[x
1
, , x
p
, y, f(x
1
, , x
p
,y)]

W powyszym przypadku funkcja f zostaa zdefiniowana przez
rekurencj przy uyciu funkcji inicjujcej g oraz funkcji h bdcej etapem
rekurencji.

Przykady:
Przy uyciu rekurencji i zoenia moemy, korzystajc z funkcji projekcji
i nastpnika skonstruowa funkcj:
Dodawania (a+b) oznaczmy jako +(a,b):
+(x,0) = pr
1
1
(x)
+(x,y+1) = pr
3
3
(x,y,+(x,y)) + 1

Mnoenia (a*b) oznaczamy jako *(a,b):
*(x,0) = C
0

*(x,y+1) = pr
3
3
(x,y, *(x,y)) + x
gdzie C
0
jest funkcj stale rwn 0.

- Grafy i rekurencje -
59
Poprzednika liczby:
pred(0) = C
0

pred(k+1) = pr
2
1
(k, pred(k))

gdzie C
1
= succ(C
0
)

Zera, ktra dla zera przyjmuje warto 1, a dla kadej innej liczby 0:
zero(0) = C
1

zero(k+1) = pred[pr
2
2
(k, zero(k))]

Odejmowania symetrycznego:
n 0 = 0
n (k+1) = pred( pr
3
3
(n, k, n k) )

Definicje:

zbir funkcji jest domknity ze wzgldu na proces konstrukcji,
jeli kada funkcja f zdefiniowana przy pomocy funkcji z T przy
pomocy tego procesu jest take w T.
zbir funkcji rekursywnie prymitywnych jest najmniejszym
spord zbiorw funkcyjnych zawierajcych funkcje bazowe i jest
on domknity przez zoenie i rekurencj prymitywn.
podzbir A przestrzeni N
p
nazywamy rekursywnie prymitywnym,
jeli jego funkcja charakterystyczna jest rekursywnie
prymitywna.

Funkcj charakterystyczn podzbioru A przestrzeni N jest:
1 gdy xA

A
(x)={
0 w przeciwnym przypadku


Relacja R oparta na cigach dugoci p jest rekursywnie
prymitywna, jeli zbir {(x
1
, ..., x
p
) N
p
: R(x
1
, ..., x
p
)} jest
rekursywnie prymitywny.


Aby pokaza, e funkcja jest rekursywnie prymitywna wystarczy
sprawdzi czy moe ona zosta otrzymana poczwszy od funkcji bazowych przy
wykorzystaniu zoe i schematu rekurencji prymitywnej.
- Grafy i rekurencje -
60

Przykad podzbiorw rekursywnie prymitywnych:

Kady jednoelementowy podzbir (np. {m}) zbioru liczb naturalnych jest
rekursywnie prymitywny, gdy moemy dla niego skonstruowa nastpujc
funkcj charakterystyczn, ktra bdc zoeniem funkcji prymitywnych, take
bdzie prymitywna:

{m}
(x) = zero{ +(n x, x n)}

Widzimy, e jeli n x, wtedy funkcja + zwrci warto wiksz od 0, co
w wyniku dziaania funkcji zero da nam warto 0. Jeli n = x, wwczas funkcja
charakterystyczna zwrci 1.



V. 2 Konstrukcja funkcji rekursywnie prymitywnych

Funkcje rekursywnie prymitywne moemy tworzy na kilka sposobw:
Procesem najczciej uywanym w programowaniu jest definiowanie
przez przypadki. Zakadamy, e mamy dane dwie p parametrowe funkcje
rekursywnie prymitywne, oraz podzbir rekursywnie prymitywny A przestrzeni
N
p
. Zdefiniowana poniej funkcja h:

f(x
1
, ..., x
p
) gdy (x
1
, ..., x
p
)A
h(x
1
, ..., x
p
)={
g(x
1
, ..., x
p
) w przeciwnym
przypadku
jest rekursywnie prymitywna.

W rzeczywistoci jeli wemiemy
A
oraz
C(A)
, funkcje
charakterystyczne odpowiednio zbiorw A oraz jego dopenienia C(A), to
funkcja h moe si wyraa jako h = f
A
+ g
C(A)
. Biorc pod uwag fakt
e jest to suma, ktrej skadniki s iloczynami funkcji rekursywnie
prymitywnych dostajemy funkcj rekursywnie prymitywn h.

Funkcj rekursywnie prymitywn jest suma i iloczyn graniczny wartoci
funkcji rekursywnie prymitywnych. Dla danej p+1 parametrycznej funkcji
rekursywnie prymitywnej f, funkcje g oraz h zdefiniowane jako:

g(x
1
, ..., x
p
, y) =

=
y
t 0
f(x
1
, , x
p
, t)
h(x
1
, ..., x
p
, y) =

=
y
t 0
f(x
1
, , x
p
, t)
- Grafy i rekurencje -
61
s take rekursywnie prymitywne. Dla przykadu pokaemy, e g moe
by zdefiniowana przez rekurencj:
g(x
1
, ..., x
p
, 0) = f(x
1
, ..., x
p
, 0)
g(x
1
, , x
p
, y+1) = g(x
1
, , x
p
, y) + f(x
1
, , x
p
, y+1)

Zbir relacji rekursywnie prymitywnych jest domknity przez
kwantyfikacj ograniczon, tzn. jeli A jest podzbiorem rekursywnie
prymitywnym przestrzeni N
p+1
, wwczas rekursywnie prymitywnymi s take
zbiory B i C zdefiniowane jako:

B = {(x
1
, ..., x
p
, z) : t z (x
1
, ..., x
p
, t)A}
C = {(x
1
, ..., x
p
, z) : t z (x
1
, ..., x
p
, t)A}

poniewa moemy dla nich zdefiniowa funkcje charakterystyczne w
nastpujcy sposb:

B
(x1, ..., xp, z) = sg(

=
z
t 0

A
(x
1
, ..., x
p
, t) )

C
(x1, ..., xp, z) =

=
z
t 0

A
(x
1
, ..., x
p
, t)
gdzie funkcja sg(x), taka e sg(0) = 0 i sg(x) = 1 gdy x0 jest take
rekursywnie prymitywna, bowiem definiujemy j jako:
sg(x) = 1 zero(x)

Zatem powysze funkcje charakterystyczne zbiorw B i C s
odpowiednio sg z sumy granicznej funkcji rekursywnie prymitywnych oraz
iloczynu granicznego funkcji rekursywnie prymitywnych.

Do zdefiniowania funkcji rekursywnie prymitywnych moemy take uy
schematu minimalizacji ograniczonej. Niech zbir rekursywnie prymitywny A
bdzie podzbiorem przestrzeni N
p+1
. Zdefiniowana poniej funkcja f jest take
rekursywnie prymitywna:

t ,najmniejsza warto z
speniajca f(x
1
, ..., x
p
,t)A
f(x
1
, ..., x
p
,z)={
0 w przeciwnym przypadku

Jest to funkcja oznaczana niekiedy jako:
f(x
1
, ..., x
p
,z) = t z (x
1
, ..., x
p
, t) A

- Grafy i rekurencje -
62
Pokaemy, e funkcja f moe by zdefiniowana przez rekurencj przy
pomocy poprzedniego schematu, definicji przez przypadki oraz sumy
ograniczonej:
f(x
1
, ..., x
p
, 0) = 0
f(x
1
, , x
p
, z+1) = f(x
1
, , x
p
, z) gdy

=
z
t 0

A
(x
1
, ..., x
p
, t) 1
- poniewa funkcja charakterystyczna relacji jest take rekursywnie
prymitywna
- w przeciwnym wypadku ,gdy zachodzi (x
1
, ..., x
p
, z+1) A mamy
f(x
1
, , x
p
, z+1) = z+1
- w kadym innym przypadku jest
f(x
1
, , x
p
, z+1) =0

Przykady:
Zbiory skoczone

Udowodnilimy ju, e kady jednoelementowy podzbir przestrzeni N
jest rekursywnie prymitywny. Teraz korzystajc z sumy ograniczonej
udowodnimy, e kady skoczony podzbir przestrzeni N jest rekursywnie
prymitywny. Mamy wic dany A = {m
1
, ..., m
n
} N. Dla kadego m
i
i=1..n
mamy ju zdefiniowan funkcj charakterystyczn
A
i
. Dla zbioru A okrelamy
wic funkcj charakterystyczn, jako:

A
(x) =

=
n
i 0

A
i

(x)
bdc funkcj rekursywnie prymitywn.

Podobnie dowodzimy, e jednoelementowy podzbir A przestrzeni N
p
jest
rekursywnie prymitywny. Ostatecznie dla skoczonego podzbioru A przestrzeni
N
p
twierdzimy, e jest on rekursywnie prymitywny przez zdefiniowanie dla
niego funkcji charakterystycznej. Niech A ={c
1
, ..., c
m
} N
p
gdzie kolejne c
i
=
(x
i1
, ... ,x
ip
). Dla kadego c
i
mamy funkcj charakterystyczn
A
i
, std
poszukiwana funkcja charakterystyczna (dla wejciowego cigu c) bdzie miaa
posta:

A
(c) =

=
m
i 0

A
i

(c)

co mona rwnie zapisa jako:

A
(x
1
, , x
p
) =

=
m
i 0
{

=
p
j 1

A
j
( pr
p
j
(x
1
, , x
p
) ) }


- Grafy i rekurencje -
63
Zbiory nieskoczone

Udowodnimy, e dla danej liczby naturalnej m > 1 , zbir potgowy
A={1, m, m
2
, m
3
...} jest rekursywnie prymitywny. Na pocztku zauwamy, e
zachodzi zaleno x < m
x
. Zdefiniujemy funkcj charakterystyczn czciow
F, ktra bdzie akceptowaa skoczon ilo potg m, tzn.:
F(x,k) = {1,m
1
,m
2
, ..., m
k
} (x)

Konstruujemy funkcj
1 gdy x=a
(a,x)={
0 w przeciwnym przypadku

w nastpujcy sposb:
(a,x) = zero( +(ax, xa))

jest to funkcja rekursywnie prymitywna zalena od 2 argumentw.

Funkcj F zdefiniujemy rekurencyjnie tak, by w nieskoczonoci
akceptowaa ona wszystkie potgi m.
F(x,0) =(C
1
(x),x)
Krok inicjujcy zaleny jest tylko od x.

F(x,k+1) = pr
3
3
(x,k,F(x,k)) + (exp
m
(succ(k)), x)
Krok rekurencyjny zaleny jest tylko od x oraz k

Ostatecznie funkcja charakterystyczna dla zbioru A przyjmie posta:
(x) = F(x,x)

poniewa element x < m
x
bdzie mg by zaakceptowany przez jedn z
funkcji F.



V. 3 Kodowanie cigw

Umiejtno zredukowania problemu opierajcego si na dwch, lub
skoczonej iloci zmiennych do problemu jednej zmiennej jest w informatyce
bardzo uyteczna. Redukcja taka pozwala na zapisanie skoczonego cigu liczb
przy pomocy jednej liczby oraz odwrotnie: przywrcenie cigu liczb na
podstawie jednej liczby. W tym rozdziale udowodnimy istnienie bijekcji
pomidzy przestrzeni N a N
p
.


- Grafy i rekurencje -
64
Zaczniemy od znalezienia odwzorowania wzajemnie jednoznacznego
pomidzy przestrzeni N i N
2
. Rozpatrzmy funkcj:

2
(x,y) = (x+y)(x+y+1)/2 + x
jest to funkcja rekursywnie prymitywna. Odpowiada ona procesowi
numerowania punktw paszczyzny o wsprzdnych naturalnych kolejnymi
liczbami naturalnymi, co przedstawia rysunek nr 34.

0
1
1
2
2
3
3
4
4
x
y

Rysunek 34 Pokrycie paszczyzny kolejnymi liczbami naturalnymi

Udowodnimy na pocztku, e dla dowolnych dwch rnych punktw:
(a,b) i (c,d) funkcja przyjmuje rne wartoci:
Wemy przypadek, gdy a+b = c+d, czyli obydwa punkty le na jakiej
prostej y=-x+w , w0 wwczas gdyby:

2
(a,b) =
2
(c,d)
to:
(a+b)(a+b+1)/2 + a = (c+d)(c+d+1)/2 + c
czyli:
a=c oraz b=d, zatem punkty s takie same sprzeczno.

Wemy przypadek, gdy a+b < c+d i oznaczmy a+b=r
1
c+d = r
2
.

2
(a,b) = (a+b)(a+b+1)/2 + a = r
1
(r
1
+1)/2 + a r
1
(r
1
+1)/2 +
r
1 = 1+2+ ..
+r
1
+ r
1
< 1+2++r
2
r
2
(r
2
+1)/2 +c = (c+d)(c+d+1)/2 + c =
2
(c,d)

ostatecznie
2
(a,b) <
2
(c,d)

podobny rezultat dostajemy, gdy a+b > c+d , czyli funkcja
2
jest
rnowartociowa.
- Grafy i rekurencje -
65
Pozostaje nam jeszcze udowodni, e dla kadej liczby naturalnej n
zdoamy znale par liczb naturalnych x i y, aby spenione byo rwnanie:

2
(x,y) = n
Dla kadej liczby n moemy tak dobra liczby r
1
i r
2
, by n znalazo si w
rodku przedziau [1+2+ ... + r
1
, 1+2+ ... +r
2
] , innymi sowy zachodzi:
r
1
(r
1
+1) n r
2
(r
2
+1),
moemy wic dobra takie by byo spenione rwnanie:
r
1
(r
1
+1) + = n.

Aby ze zmiennych r
1
i przej do poszukiwanych x i y wystarczy
rozwiza ukad rwna:
x + y = r
1

{
x =

co daje nam poszukiwan par (x,y).

Moemy teraz nasz bijekcj rozszerzy, by odwzorowywaa przestrze
N
p
w N. W tym celu definiujemy przez rekurencj
p
dla p>2 jako:

p+1
(x
1
, ..., x
p
, x
p+1
) =
p
(x
1
, , x
p-1
,
2
(x
p
, x
p+1
) )

Tak zdefiniowana funkcja jest bijekcj, co dowie moemy indukcyjnie.
Pierwszy krok indukcyjny jest speniony, gdy bijekcj N
2
w N funkcji

2
(x,y) ju udowodnilimy.
Zamy teraz, e
p
jest bijekcj i sprbujmy dowie, e
p+1
jest
bijekcj.
Iniekcja: dowd nie-wprost. Wemy dwa rne cigi liczb: c
1
=(x
1
,x
2
, ...,
x
p
, x
p+1
) oraz c
2
=(y
1
, y
2
, ..., y
p
, y
p+1
). Jeli
p+1
(c
1
) =
p+1
(c
2
) wwczas :

p
(x
1
, , x
p-1
,
2
(x
p
, x
p+1
) ) =
p
(y
1
, , y
p-1
,
2
(y
p
, y
p+1
) )

Wykorzystujc fakt, i
p
jest bijekcj otrzymujemy, e c
1
=c
2
co
jest sprzeczne z zaoeniem, czyli
p+1
jest iniekcj:

Suriekcja: wynika prosto z definicji rekurencji. Dla dowolnej liczby
naturalnej n z zaoenia indukcyjnego istniej takie x
1
, x
2
, ..., x
p-1
, , e
zachodzi:
n =
p
(x
1
, , x
p-1
, )
oraz dla dowolnego mamy istnienie takich x
p
i x
p+1
, e ostatecznie:
n =
p
(x
1
, , x
p-1
,
2
(x
p
, x
p+1
)) , czyli
n =
p+1
(x
1
, , x
p
, x
p+1
)) co koczy dowd.




- Grafy i rekurencje -
66
V. 4 Rekurencja nie prymitywna

Funkcje rekursywnie prymitywne pozwalaj nam zaspokoi wikszo
potrzeb przy definiowaniu funkcji w programowaniu, niemniej jednak niektre
programy nie obliczaj tych funkcji, poniewa nie zawsze si kocz: w
rzeczywistoci obliczaj one funkcje zdefiniowane czciowo.
Funkcje obliczalne, gwnie definiowalne i nie rekursywne prymitywnie
s wyjtkowo rzadkie i w praktyce nie uywane. Za przykad posuy nam
funkcja Ackermanna. Ponisza funkcja oznaczona przez A jest trudniejszym
wariantem tej, ktra zostaa zdefiniowana przez Ackermanna.

A(0, x) = x + 2 dla kadego x
A(1,0) = 0 oraz A(y, 0) = 1 dla kadego y 2
A(y + 1, x + 1) = A(y, A(y+1, x)) dla kadego x oraz y.

Dla kadej wartoci n, funkcja wica z x warto A(n,x) jest oznaczana
jako A
n
. Funkcja ta jest zdefiniowana przez rekurencj:
A
0
(x) = x + 2 , A
1
(x) = 2x , A
2
(x) = 2
x
oraz dla kadego n > 2:

A
n
(0) = 1
A
n
(x+1) = A
n-1
(A
n
(x)) .

Dla kadej zmiennej n, funkcja A
n
jest wic rekursywnie prymitywna.
Aby wykaza, e funkcja A nie jest rekursywnie prymitywna musimy
przeanalizowa kolejno:
dla kadego n > 1 oraz kadego x, A(n,x) > x
kolejne funkcje A
n
s cile rosnce
jeli n 2 , wtedy A(n, x) A(n-1, x)
jeli x 4 , wtedy A(n+1, x) A(n, x+1)
jeli n
1
, n
2
, ..., n
p
s zmiennymi, wwczas istnieje taka zmienna m, e dla
kadego x zachodzi:

=
p
i 1
A(n
i
, x) A(m , x)

jeli f jest funkcj rekursywnie prymitywn p zmiennych, wtedy istnieje
takie m, e dla kadego n1, ..., np zachodzi:

f(n
1
, ..., n
p
) A(m ,

=
p
i 1
n
i
)
patrzc na funkcj g zdefiniowan jako g(n) = A(n,n) wnioskujemy, e
funkcja A nie jest rekursywnie prymitywna.


- Grafy i rekurencje -
67
V. 5 Rodzaje funkcje rekursywnych


Aby zda sobie spraw z wszystkich funkcji obliczalnych, konieczne jest
zdefiniowanie klasy wikszej ni klasa funkcji rekursywnie prymitywnych.
Moe to zosta osignite dziki nowemu schematowi konstrukcji nazywanemu
schematem minimalizacji.
Wprowadzenie do tego schematu pociga za sob konieczno skupienia
si na funkcjach czciowych. Dla danego podzbioru A przestrzeni N
p+1
chcemy
zdefiniowa funkcj p argumentow, ktra z cigiem liczb (x
1
, x
2
, ..., x
p
) wie
najmniejsz warto z, tak e (x
1
, x
2
, ..., x
p
, z) A. Jeli wystpi przypadek,
e dla kadej wartoci zmiennej z cig (x
1
, x
2
, ..., x
p
, z) A w
przeciwiestwie do minimalizacji ograniczonej, schemat minimalizacji nie
zatrzymuje si.

Definicje:
Funkcj czciow z przestrzeni N
p
w N nazywamy par (D,f) gdzie D
jest podzbiorem przestrzeni N
p
,a f funkcj ze zbioru D w N. D nazywamy
dziedzin definicji funkcji f. W przypadku, gdy D =N
p
, f nazywamy funkcj
totaln.
Jeeli (x
1
, ..., x
p
) D , wwczas f jest zdefiniowana dla (x
1
, ..., x
p
) co
oznaczamy f(x
1
, ..., x
p
). Jeli (x
1
, ..., x
p
) D, wtedy f nie jest zdefiniowana dla
(x
1
, ..., x
p
).

Naley zauway, e dwie funkcje czciowe s rwne, jeeli posiadaj
taki sam zbir definicji i jeli s identyczne na jego dziedzinie, trzeba wic przy
kadej nowo tworzonej funkcji dokadnie okreli jego dziedzin definicji:

1. Dziedzina funkcji f , zoonej z p funkcji n - argumentowych
g
1
, .., g
p
oraz p argumentowej funkcji h jest definiowana przez warunki:













f(x
1
, ..., x
p
)
wtedy i tylko wtedy gdy:
g
1
(x
1
, ..., x
p
)
.......
g
p
(x
1
, ..., x
p
)
h(g
1
(x
1
, ..., x
p
), ..., g
p
(x
1
, ..., x
p
))
- Grafy i rekurencje -
68
2. Dziedzina funkcji f definiowanej przez rekurencj prymitywn przy
pomocy p argumentowej funkcji g oraz p+2 argumentowej funkcji h jest
definiowana przez rekurencj:
f(x
1
, ..., x
p
, 0) wtw g(x
1
, ..., x
p
)
f(x
1
, ..., x
p
, y+1) wtw h(x
1
, ..., x
p
,y, f(x
1
, ..., x
p
, y))
Schemat minimalizacji pozwala na skonstruowanie nowych funkcji
czciowych:

Wemy p+1 argumentow funkcj g. Mwimy, e funkcja czciowa f
jest zdefiniowana przez minimalizacj poczwszy od g, gdy:

istnieje co najmniej jedna zmienna z , taka e g(x
1
,...,x
p
, z) = 0 i jeli
dla kadego z<z g(x
1
,...,x
p
, z) 0 ,wtedy f(x
1
,...,x
p
) = z;
w przeciwnym przypadku, f(x
1
,...,x
p
) nie jest zdefiniowana.

Definicje:

Zbir funkcji rekursywnych czciowych jest najmniejszym zbiorem
funkcji zawierajcym funkcje bazowe i domknity przez zoenie, rekurencje
prymitywn i minimalizacj.
Podzbir przestrzeni N
p
nazywamy rekursywnym, jeli jego funkcja
charakterystyczna jest rekursywna.
Funkcje rekursywne czciowe s przeliczalne w takim sensie, e dla
kadej z nich istnieje algorytm, ktry albo zatrzyma si pod koniec
ograniczonego czasu zwracajc warto funkcji, jeli jest ona zdefiniowana albo
w przeciwnym przypadku nie zatrzyma si.


V. 6 Teza Churcha

Sprbujmy odwrci rozpatrywane pytanie: czy wszystkie funkcje
obliczalne s rekursywne ? Na to pytanie mona odpowiedzie tylko dziki
dokadnej definicji natury funkcji obliczalnej. Teza Churcha (1936)
utrzymuje, e funkcje obliczalne s dokadnie funkcjami rekursywnymi.
Dowiadczenia pokazuj, e za kadym razem, gdy funkcja jest zdefiniowana
przy pomocy efektywnej procedury (algorytmu) , procedura ta dostarcza
rodkw, by dowie, e funkcja jest w rezultacie rekursywna.
Niemniej jednak, teza Churcha nie mwi nic o reprezentacji algorytmu
zwizanego z t funkcj rekursywn. Z punktu widzenia informatyka, wielkoci
takie jak czas oraz wielko pamici potrzebnej do oblicze zale od modelu
rozpatrywanej maszyny. Z drugiej strony, wszystkie modele przyzwoitych
maszyn definiuj tak sam klas funkcji: funkcji rekursywnie czciowych.

- Grafy i rekurencje -
69
Rozdzia VI Rekursywno i obliczalno



W tym rozdziale zaobserwujemy rwnowano pomidzy wasnociami
funkcji rekursywnych czciowych i funkcjami obliczalnymi przy pomocy
maszyny Turniga. Przedstawiony zostanie take jzyk -term.

Bdziemy korzystali z maszyn Turinga posiadajcych dwie tamy oraz
ponisze waciwoci:
o zbiorem symboli uywanych jest = {0,1, b} ,gdzie symbol
b oznacza blanc (pusty)
o zbir stanw Q jest skoczony i zawiera dwa stany
wyrnione: stan pocztkowy q
0
i stan kocowy q
1
.
o funkcja przejcia jest odwzorowaniem zbioru Q
2
w
zbir Q
2
{L, S, R}
2
, gdzie L reprezentuje przejcie w
lewo, R reprezentuje przejcie w prawo, a S brak ruchu
gowicy czytajcej.

Wemy f, p argumentow funkcj czciow oraz M maszyn
Turinga. W tym rozdziale bdziemy badali funkcje M obliczalne zdefiniowane
przy pomocy maszyny Turinga, innymi sowy Turing-obliczalne.

Standardowa reprezentacja zmiennych w maszynie jest reprezentacj
binarn. Od tej chwili bdziemy posugiwali si inn notacj, ktra uproci
demonstracj: zmienna o wartoci 0 jest reprezentowana przez 0, natomiast
zmienna n jest reprezentowana przez n pozycji, na ktrych znajduj si
wartoci 1.
W rozpatrywanych przez nas maszynach Turniga pierwsza tama
reprezentuje cig danych wejciowych, natomiast druga tama cig bdcy
rezultatem funkcji reprezentowanej przez maszyn.


VI. 1 Funkcje rekursywne i Turing obliczalne


Na pocztku udowodnimy, e funkcje bazowe s Turing obliczalne.
o Funkcja stale rwna 0 jest obliczalna na nastpujcej
maszynie Turniga:

(q
0
, 0, b) = (q
0
, 0, 0, R, R)
(q
0
, 1, b) = (q
0
, 1, 0, R, R)
(q
0
, b, b) = (q
1
, b, b, S, S)
- Grafy i rekurencje -
70


o Funkcja nastpnika jest realizowana na maszynie Turniga,
ktrej funkcja przejcia spenia warunki:
(q
0
, 1, b) = (q
0
, 1, 1, R, R)
(q
0
, b, b) = (q
1
, b, 1, S, S)

o Funkcja projekcji pr
p
i
(1 i p) jest obliczalna na maszynie
posiadajcej p+1 stanw q
0
, q
1
, q
2
, ..., q
p
. Wejciem jest cig
wartoci oddzielonych symbolem b. Przykadowo, funkcja
pr
2
2
jest obliczalna na 3 stanowej q
0
, q
1
, q
2
maszynie, ktrej
funkcja przejcia spenia:

(q
0
, 1, b) = (q
0
, 1, b, R, S)
(q
0
, 0, b) = (q
0
, 0, b, R, S)
(q
0
, b, b) = (q
2
, b, b, R, S)
(q
2
, 1, b) = (q
2
, 1, 1, R, R)
(q
2
, 0, b) = (q
2
, 0, 0, R, R)
(q
2
, b, b) = (q
1
, b, b, S, S)

Pozostaje nam dowie, e zbir funkcji czciowych, obliczalnych na
maszynie Turniga jest domknity przez zoenie, rekurencj prymitywn i
minimalizacj. Rezultat ten moemy osign kolejno utosamiajc maszyn z
kadym procesem konstrukcji funkcji rekursywnej.



VI. 2 Rekursywno funkcji Turing obliczalnych


Ponisze obliczenia zapewniaj, e klasa funkcji rekursywnych
czciowych zamyka si razem z klas funkcji Turnig obliczalnych.
Przedstawiona demonstracja uywa kodowania zbioru operacji wykonanych
przez maszyn w trakcie oblicze.

Wniosek 1:
Kada funkcja czciowa, obliczalna przez maszyn Turniga jest
rekursywna.

- Grafy i rekurencje -
71
Wemy f, funkcj czciow, obliczaln przy pomocy maszyny Turniga
M, ktra posiada 2 tamy i m stanw. Aby pokaza, e funkcja f jest rekursywna
musimy na pocztku zakodowa sytuacj maszyny przy pomocy zmiennej
wejciowej t oraz pokaza, e kod jest funkcj rekursywnie prymitywn, zalen
od t i od warunkw pocztkowych. Kady stan maszyny q
i
jest kodowany
przez warto i, symbol pusty (blanc) przez warto 0, natomiast symbol 0
przez warto 2.

Definicje:

Konfiguracja maszyny M do danego momentu t jest nieskoczonym
cigiem C(t) = (s
0
, ..., s
i
, ...) symboli zapisanych do tego momentu przez dwie
tamy maszyny M. Cig ten jest uzyskany przez konkatenacj cigw
0
,
1
,
2
,
...,
j
..., gdzie dla kadej wartoci j ,
j
jest cigiem symboli zapisanych w
komrkach o numerze j. Ten nieskoczony cig posiada tylko jedn, skoczona
ilo znakw nie pustych.

Sytuacja maszyny do momentu t jest cigiem (e, k
1
, k
2
, C(t)), gdzie e
jest kodem stanu maszyny do momentu t , k
1
oraz k
2
s numerami komrek,
przed ktrymi do tego momentu znajduj si gowice czytajce, a C(t) jest
konfiguracj maszyny.

Konfiguracja C(t) moe zosta zakodowana przez warto:
(C)=
i0
s
i
3
i
. Funkcje dzielnika q i reszty z dzielenia r pozwalaj na
odzyskanie z powyszego kodu symboli zapisanych w komrce o numerze u
dla tamy o numerze v: r(q((C), 3
2(u-1)+v-1
), 3). Sytuacja maszyny do
momentu t moe wic zosta zakodowana przez warto:
(S) =
4
(e, k
1
, k
2
, (C)).
Na rysunku nr 35 przedstawiony jest sposb kodowania maszyny Turniga.
Zapisana jest uporzdkowana sekwencja C(t) = 1,0,0,0,0,1,1,1,1,1,0,0, k
1
=5
k
2
=2.
1 0
0 1 1 0
0 0
1 1 1 0

Rysunek 35 Kodowanie maszyny Turinga



- Grafy i rekurencje -
72
Lemat 1
Istnieje funkcja rekursywnie prymitywna g, ktra dostarcza kod sytuacji
maszyny do momentu t+1, na podstawie kodu sytuacji maszyny z momentu t.

Dowd:
Przejcie zmiennej opisujcej w stan nastpny odbywa si przy pomocy
funkcji przejcia. Funkcja, ktra pozwala wyrazi konfiguracj maszyny do
momentu t+1 przy pomocy konfiguracji do momentu t moe by
zdefiniowana w sposb rekursywnie prymitywny w przypadku odnoszcym si
do zbioru definicji funkcji przejcia.

Lemat 2
Funkcja Sit , ktra dostarcza kod sytuacji maszyny do momentu t na
podstawie pocztkowej konfiguracji danych jest rekursywnie prymitywna.

Dowd:
Funkcja Sit jest zdefiniowana przez rekurencj. Jej warto do
momentu t = 0 jest uzyskiwana w sposb rekursywnie prymitywny poczwszy
od konfiguracji pocztkowej. Przejcie od momentu t do momentu t+1 jest
realizowane przy pomocy funkcji g.

W dalszej czci identyfikujemy kod zwizany z Sit(t,x
1
, x
2
, ..., x
p
) oraz
czteroelementow sekwencj (e, k
1
, k
2
, C(t)). W szczeglnoci

4
1
(Sit(t,x
1
, x
2
, ..., x
p
)) jest stanem e. Demonstracja powyszej wasnoci jest
stosunkowo prosta.

Dowd:
Czas obliczania wartoci f(x
1
, x
2
, ..., x
p
) jest zadany przez:

T(x
1
, x
2
, ..., x
p
) = t (
4
1
(Sit(t,x
1
, x
2
, ..., x
p
)) = 1 ),

gdy maszyna osiga tylko jeden stan kocowy q
1
.

Znajc sytuacj do momentu T(x
1
, x
2
, ..., x
p
) moliwe jest zliczenie iloci
wystpie symbolu 1 na drugiej tamie, ktra jest rwna wartoci f(x
1
, x
2
,..., x
p
):

f(x
1
, x
2
,..., x
p
) = y(r(q(
4
4
(Sit(T(x
1
, x
2
, ..., x
p
), x
1
, ..., x
p
)), 3
2y+1
), 3) = 0)

Ta ostatnia funkcja oblicza przy pomocy funkcji q (dzielnika) i r (reszty)
ilo 1 na drugiej tamie.




- Grafy i rekurencje -
73
VI. 3 Abstrakcja funkcjonalna


Jakakolwiek byaby dziedzina aplikacji, uytkowanie komputera
sprowadza si za kadym razem do obliczania wartoci funkcji. W
rzeczywistoci dane na wejciu s kodowane do postaci cigu bitw
interpretowanych jako sekwencje wejciowe, a na wyjciu rezultaty ponownie s
kodowane i interpretowane. Etapy porednie realizuj wszystkie istotne
obliczenia.
Taka interpretacja oznacza proces arytmetyzacji, ktry jest szeroko
uywany w realizacji procesw modelowania i symulacji. Przepyw danych
ilustruje rysunek nr 36.

Stan pocztkowy
System Arytmetyzacja
N
p
Zdarzenia
Operacje
Stan kocowy
N

Rysunek 36 Proces arytmetyzacji

Powyszy schemat pokazuje wag jak kadzie si na analizowanie w
informatyce funkcji, w szczeglnoci z przestrzeni N
p
w N. Rozpatrujc te
ostatnie, matematycy i programici wiedz, e mog one by stworzone przy
wykorzystaniu zaledwie kilku funkcji prymitywnych. Przyjrzymy si teraz
niektrym procedurom konstrukcji, ktre pomog nam zrozumie matematyk
algorytmiczn.
Przypomnijmy, e funkcja jest regu wic obiekty, ktra pozwala
okreli warto dla kadego zadanego jej argumentu dziedziny. Uyteczne jest
zdefiniowanie tej reguy przez wyraenie zalenoci pomidzy argumentem i
jego wartoci. Rozumiemy przez to, np. przypisanie xx
2
lub f: x f(x) ,
gdzie f jest waciwym oznaczeniem reguy.

- Grafy i rekurencje -
74
czc ze sob te dwa rodzaje zapisu dochodzimy do wyrae typu:
dana jest funkcja f(x) = x
2
, w ktrych dostrzegamy dwuznaczno. Nawet
jeeli potrafimy dokadnie rozrni funkcj od jej wartoci, to jak powinno si
liczy warto wyraenia F(f(x+1)) ? Czy naleaoby liczy na pocztku
g(x)=f(x+1) , a nastpnie F(g(x)) ? Czy te moe h(x) = F(f(x)) na pocztku, a
pniej h(x+1) ? Wystarczy jeszcze poda operator pochodnej D(x
2
) = 2x, by
przekona si jakie niezrozumiaoci mog zaistnie podczas dziaania
algorytmu.
By wyeliminowa wszystkie niezrozumiaoci naley zdefiniowa
koncepcj funkcji biorc pod uwag:
o sam funkcj : jako obiekt
o obiekty, do ktrych funkcja si odnosi
o uzyskane wartoci

To rozrnienie nosi nazw abstrakcji funkcjonalnej. Przed zapisaniem
mechanizmu tego rozrnienia, ktry bdzie bazowa rwnie na klasycznej
notacji funkcyjnej, ustalmy podstawowe zasady.
Zamy, e dana jest zmienna x, ktra moe (ale nie musi) wystpi w
obiekcie E nazywanym wyraeniem. Niech bdzie symbolem wyrnionym.
Rozpatrzmy obiekt (x. E) : jest on funkcj. Gdy do tego obiektu wstawiamy
warto a otrzymujemy wyraenie (x. E)a . Warto (x. E)a obliczamy
podstawiajc w wyraeniu E za x warto a.
W praktyce, funkcja f notowana jako f: x E(x) bdzie si nazywaa
(x.E(x)) co jest notacj f.

Komentarz:
1. Kade wyraenie typu 2*5 jest liczb, A jest znakiem, natomiast
(x.E) jest funkcj
2. Mona interpretowa obiekt (x. E) jako rezultat zastosowania
reguy oznaczanej jako do pary (x,E). Z tego powodu, symbol
jest nazywany konstruktorem funkcjonalnym. Pomimo tej
interpretacji naley pamita, e jako notacja funkcyjna, (x. E)
formuje obiekt nierozdzielny.
- Grafy i rekurencje -
75
3. Mona sobie wyobrazi, e istnieje regua oznaczana przez @,
ktra dla kadej pary ((x. E),a) tworzy odpowiednio (x. E)a ,
ktrej warto jest rezultatem podstawienia w wyraeniu E za x
elementu a. cilej mwic rozpatrzmy zbir funkcji
czciowych X w Y oznaczony przez (XY). Regua @ moe by
interpretowana jako funkcja czciowa ze zbioru (XY) X na
zbir Y, ktra z kad par (f,x) utosamia f(x). Z tego powodu
regua @ jest naturalnie nazywana aplikacj. Korzystnie jest
zamieni @ przez konkatenacj piszc fx zamiast @(f,x) . To
wyjania dlaczego uywa si niekiedy notacji fx dla wyraenia
wartoci funkcji f na x.
4. Podstawienie wymaga prawidowego sformalizowania. Zmienna x
suy tylko do wskazania pozycji, gdzie ma miejsce podstawienie.
Sama nazwa zmiennej x nie gra roli. W konsekwencji moemy, co
jest bardzo wskazane, zmieni nazw zmiennej, do ktrej
podstawiamy warto, jeeli moe wystpi bdne zrozumienie
formuy. Opisan sytuacj przedstawiaj dwa przykady:
dwie funkcje (x. (2*x+1)) i (t. (2*t+1)) s rwne
nie zapisuje si (x. (2*x+1))x , lecz (t. (2*t+1))x .

Przykady:

1. Rozpatrzmy teraz wyraenie x
2
+x+1. Jeli rozpatrzymy x jako
zmienn, wtedy (x. (x
2
+x+1)) jest funkcj oznaczan zazwyczaj
jako f:xx
2
+x+1; odwrotnie: - notacj funkcji g: x2x+3 jest
(x. 2x+3)).
2. Wemy wyraenie 3x-xy+5. Jeli chcemy zrobi z 3x-xy+5 funkcj
(czciow) zalen od y ( dla ustalonego y ) , wtedy
zapisujemy (y. (3x-xy+5)) co odpowiada notacji klasycznej f
x
:
y3x-xy+5. Poczwszy od (y. (3x-xy+5)) napiszmy (x. (y.
(3x-xy+5))), co odpowiada zapisowi funkcji 2 zmiennych f: (x,y)
3x-xy+5; odwrotnie moemy interpretowa wyraenie (y. (x.
(3x-xy+5))) jako - notacj funkcji g: (y,x) 3x-xy+5 .
Zaczlimy wanie rozwaania funkcji wielu zmiennych. W tym
przypadku - notacja funkcji f: (x
1
, x
2
, ..., x
n
) E(x
1
, x
2
, ..., x
n
)
bdzie przyjmowaa posta: x
1
. (x
2
. ( ... (x
n
. E(x
1
, x
2
, ..., x
n
)) ... )
3. Zanotujmy operator wyraajcy pochodn: D(x. x
2
) = (x. 2x)
4. Niech E bdzie wyraeniem zawierajcym x, a T operatorem
zdefiniowanym jako T(x. E(x)) = (x. E(x+1)) . Wemy funkcj
F; dwiema moliwymi interpretacjami F(f ( x + 1 )) bd:
F(T(x. f(x))) oraz T(F(x. f(x))) .
- Grafy i rekurencje -
76
5. Kiedy regua aplikacji zapisuje si przez konkatenacj, dobrze jest
wyrni multiplikacj. Przykadowo:
C::= (x. (x
2
+2*x+1))
S::= (x. (y. (x+y)))
P::= (x. (y. (x*y)))
Mamy odpowiednio C3 = 3
2
+2*3 +1 = 16
S2 = (x. (y. (x+y)))2 = (y. (2+y)); (S2)5 = (t. (2+t))5 = 7
Jeli f jest funkcj jednej zmiennej i ma jeden argument, wtedy:
P(Fa) = (y. (Fa*y)),

W szczeglnoci:
P(C3) = (y. (16*y)) ; P((S1)x) = (y. ((1+x) *y))


VI. 4 Jzyk term


Formalizm przeznaczony do opisania mechanizmw przedstawionych
poniej zosta wprowadzony w pracach A. Churcha, ktry jako pierwszy uy
jzyka formalnego nazwanego -calcul. Jzyk ten jest uywany wtedy, gdy
chcemy opisywa funkcje, std Church uy greckiej litery ,ktra symbolizuje
rzymsk liter L, by w ten sposb zasugerowa, e jego system formalny jest
jzykiem.
Jak to zwykle bywa, dany jest nieuporzdkowany zbir Var symboli
zwanych zmiennymi oraz cztery symbole specjalne: . ( ) .
Jzyk - term jest generowany przez gramatyk:

<lambda-term> ::= <Var> | (<lambda-term><lambda-term>)
| ( <Var> . <lambda-term>)

Pierwsza regua ustala zbir atomw. Dwie nastpne reguy formalizuj
odpowiednio aplikacj i abstrakcj. Mona stosunkowo atwo pokaza, e
powysza gramatyka nie jest dwuznaczna.

Komentarz:
1. Kady - term reprezentuje funkcj jednej zmiennej, ktrej
argumenty i wartoci mog same by funkcjami.
2. Term oznaczony jako FX jest nazywany aplikacj (lub a-
wyraeniem). Reprezentuje on poczenie operatora F z operandem
X.
- Grafy i rekurencje -
77
3. Term postaci (x
1
. (x
2
. ( ... (x
n
. T) ... ))), gdzie (x
1
, x
2
, ..., x
n
) jest
list zmiennych, a T jest termem nazywamy abstrakcj ( lub -
wyraeniem). Reprezentuje on funkcj zmiennej X=(x
1
, x
2
, ..., x
n
).
Mwi si, e X jest list parametrw, a T ciaem abstrakcji.
Uzgodnimy ponadto, e term (x
1
. (x
2
. ( ... (x
n
. T) ... ))) bdzie
zapisywany jako x
1
x
2
x
n
.T .
4. W celu uproszczenia zapisu, zaadoptujemy dwie inne konwencje:
dla a-wyrae, nawiasowanie bdzie wystpowa tylko od
lewej do prawej
dla -wyrae, ich ciao bdzie si rozszerza moliwie jak
najdalej w praw stron




Przykad:
Zamy, e mamy dwie zmienne: x i y. Dla przedstawionych term
x; y; (xy); (x. (xy)); (y(x. (xy)); (x. (y. (y(x. (xy)))))
moemy zastosowa uproszczony zapis, otrzymujc:
xy; x. xy; y(x.xy); xy. y(x. xy)



VI. 5 Obliczenia na termach

Formalnie, kada forma jest tworzona dziki dwm reguom, ktrymi s
abstrakcja i aplikacja. Kad form moemy reprezentowa przez drzewo
binarne i w zalenoci od stopnia d
+
(s) kadego wierzchoka s, wyrniamy
nastpujce przypadki:
o d
+
(s) = 0 : s jest zmienn
o d
+
(s) = 1 : s reprezentuje abstrakcj
o d
+
(s) = 2 : s reprezentuje aplikacj.

Przykad:
Respektujc powysze przypadki, termy: y(x. xy) oraz xy. xy(z. y) s
reprezentowane przez nastpujce drzewa:






- Grafy i rekurencje -
78
y
x x
y y

x
x
y
z
z

Rysunek 37 Drzewa reprezentujce termy

Poczwszy od definicji termy , mona zdefiniowa indukcyjnie zbir
podzbiorw termy.

Graficznie pod termy danej termy T s reprezentowane przez
poddrzewa drzewa syntaktycznego T. Zmienna x, ktra figuruje na licie
parametrw abstrakcji i znajduje si pod termem T jest nazywana poczon.
Wystpienie x jest poczone, jeli znajduje si ono w ciele abstrakcji, ktrej
lista parametrw zawiera x. Wystpienie zmiennej jest nazywane wolnym, jeli
nie jest ono poczone. Zmienna jest wolna, jeli pozwala ona na wolne
wystpienie.

Zmienna poczona gra rol parametru formalnego, ktry suy do
wskazania miejsca w ciele abstrakcji, std jego nazwa nie grali. Ponadto
dozwolone jest zmienianie nazwy zmiennej poczonej. Mwic jzykiem
formalnym: niech x bdzie zmienn poczon formy T. Istnieje pod-drzewo
minimalne (w sensie inkluzji) posiadajce jako korze x, ktre reprezentuje
term postaci x. M . Niech y bdzie zmienn nie wystpujc w M. Zamiana x
na y w x. M pociga za sob podmian wszystkich x na y. W ten sposb mona
zawsze podejrzewa, e w kadej termie, co wicej, w zbiorze term, nazwy
zmiennych poczonych s rne od zmiennych wolnych.

Przykad:
Na rysunku nr 38 przedstawiony jest term: (y. x(x. xy)(yz))x
- Grafy i rekurencje -
79

x
y x
x y z
x
y

Rysunek 38 Zmienne wolne i poczone

Zmienne x i y s poczone; x i z posiadaj wystpienia wolne. Aby
zapobiec kolizji, wystarczy zmieni nazw zmiennej poczonej x.
Otrzymujemy wtedy (y. x(t. ty)(yz))x , co po zamianie y na u mona zapisa
jako: (u. x(t. tu)(uz))x.

Jeli B jest termem zawierajcym zmienn woln x, wtedy x. B
reprezentuje funkcj, ktrej warto dla A, (x. B)A otrzymuje si przez
podstawienie A do wszystkich wystpie x w B; graficznie - podcza si korze
drzewa reprezentujcego A do wszystkich lici etykietowanych przez x w
drzewie reprezentujcym B, co przedstawia rysunek nr 39.

A
x
x
A
B
B
x
A

Rysunek 39 Zmiana nazw zmiennych w drzewie

- Grafy i rekurencje -
80
Dokonana zamiana nazywa si skurczeniem wyraenia (x. B)A . W
rezultacie (x. xy)A kurczy si do Ay. Skurczenie moe by interpretowane
jako regua ponownego przepisania. Sekwencja skurcze nazywa si redukcj.
Skurczenie oznacza si symbolem .
Obliczenia na termach skadaj si wic z sekwencji podmian
zmiennych poczonych oraz skurcze.

Przykad:
Obliczmy (y. x((x. xy)(xyz)))(xy). Dla uniknicia wszelkich
nieporozumie zamiemy nazwy zmiennych poczonych x (na u) oraz y (na
v). Otrzymujemy (v. x((u. uv)(xvz)))(xy) . Pod term (u. uv)(xvz) redukuje
si do (xvz)v. Term pocztkowy postaci (v. x((xvz)v))(xy) redukuje si wic
do x((x(xy)z)(xy)).
- Grafy i rekurencje -
81
Rozdzia VII Rwnania rekurencyjne


VII. 1 Zastosowanie rwna rekurencyjnych

Nim przedstawimy niektre ciekawe rodzaje rwna rekurencyjnych i
pokaemy jak je rozwiza, naley zwrci uwag na ich wszechstronne
zastosowanie w informatyce. Mwic o sortowaniu mamy czsto do czynienia z
algorytmami rekurencyjnymi i aby mc je ze sob porwna, trzeba umie
oszacowa czas oblicze dla wszystkich zagniedonych wywoa
rekurencyjnych. Przykadowo dla algorytmu MERGESORT, ktry w duym
przyblieniu wyglda nastpujco:

MERGESORT(1..n) = MERGESORT(1..n/2) merge MERGESORT(n/2 +1, n)

czas oblicze dla n danych wejciowych by rzdu O(k*n*logn). By
uzyska t wielko naleao rozwiza rwnanie rekurencyjne:
f(n) = k + 2*f(n/2).
Ten rozdzia bdzie powicony zarwno rozwizywaniu tego typu
rwna, jak i rwna trudniejszych, gdzie wzr rekurencyjny zaley od wielu
rnych czynnikw.
Rozpoczniemy jednak od pokazania, e rozwizanie rwnania
rekurencyjnego, czyli znalezienie oglnego wzoru na n-ty wyraz funkcji
przydaje si rwnie do innych problemw. Wemy zbir n elementowy.
Wiemy, e ilo rnych (wzgldem pozycji wystpowania) uoe elementw
tego zbioru, to ilo permutacji na tym zbiorze, co wyraa si wzorem n!.
Wiemy rwnie, e wyniku zastosowania permutacji, nie zawsze kady element
zbioru zmieni swoj pozycje. Niech operacja, w wyniku ktrej kady element
zbioru zmieni swoj pozycj bdzie nazwana zaburzeniem zbioru. Interesuje nas
zarwno to, ile bdzie rnych zaburze zbioru n elementowego, jak rwnie to,
jaki procent permutacji zbioru stanowi jego zaburzenia.
Zaczniemy od skonstruowania wzoru rekurencyjnego d
n

przedstawiajcego ilo zaburze w zbiorze n elementowym. Zamy, e
elementami zbioru s: (a
1
, a
2
, a
3
, ..., a
n
).
W kadym zaburzeniu tego zbioru, element a
1
musi znale si na innej
pozycji. Element a
1
moemy z elementem a
i
2in zamieni na n-1 sposobw.
Jeli po takiej zamianie element a
i
znajdzie si na pozycji 1, wtedy
pozostaje nam znale ilo zaburze zbioru (a
2
, ..., a
i-1
, a
i+1
, ..., a
n
),
czyli problem zredukowalimy do mniejszego (gdy i=n wtedy
pozostaje nam znale ilo zaburze zbioru (a
2
, ..., a
n-1
). Oglnie
naley znale d
n-2
.
- Grafy i rekurencje -
82
Moe si zdarzy takie zaburzenie zbioru (a
1
, a
2
, a
3
, ..., a
n
), w
ktrym na pozycji 1 nie bdzie sta a
i
. Ilo tego typu zaburze, to
ilo zaburze zbioru (a
i
, a
2
, ..., a
i-1
, a
i+1
, ..., a
n
), czyli problem znw
staje si mniejszy (gdy i=n wtedy pozostaje nam znale ilo
zaburze zbioru (a
n
, a
2
..., a
n-1
). Oglnie naley znale d
n-1
.

atwo zauway, e w zalenoci od pooenia elementu a
i
po zamianie z
a
1
(na pozycji 1, lub pozycjach dalszych), odpowiednie zaburzenia zbiorw bd
rne. Ostatecznie otrzymujemy rekurencyjn formu na ilo zaburze zbioru
n elementowego, ktra wyraa si wzorem:
d
n
= (n-1) (d
n-1
+ d
n-2
) dla n 3.

Taki wzr pozwala nam na stosunkowo atwe wyznaczenie kolejnych
iloci zaburze zbioru: d
1
= 0, d
2
= 1 (otrzymujemy z obserwacji) i kolejno
d
3
= 2, d
4
= 9, d
5
= 44 itd. Dla przedstawionego zbioru mona sprbowa
znale wzr oglny, ktry bdzie mia posta:
d
n
= n! |
.
|

\
|
+ +
!
1
) 1 ( ...
! 2
1
! 1
1
1
n
n

Mimo i korzystajc z tego wzoru trudniej jest obliczy ilo zaburze dla
kolejnych wartoci n (wzr rekurencyjny w tym przypadku jest bardziej
efektywny), posiadanie oglnej formuy na wielko d
n
przydaje si do
oszacowania stosunku iloci zaburze w zbiorze do iloci permutacji na tym
zbiorze. Jeli pamitamy, e:
e
-1
= |
.
|

\
|
+ +
!
1
) 1 ( ...
! 2
1
! 1
1
1
n
n

to od razu wyznaczymy, e d
n
/p
n
0.367...



VII. 2 Rwnania rekurencyjne liniowe

W oglnym przypadku rwnania rekurencyjnego liniowego, ktrego
rozwizaniem jest wyznaczenie wszystkich wartoci cigu u
n
, dla n 0
spotykamy si z sytuacj, e znanych jest k pocztkowych wartoci u(n), oraz
znana nam jest formua wyznaczajca warto u(n+k) na podstawie wartoci
u(n), u(n+1) ... u(n+k-1). Mona to zapisa w nastpujcy sposb:
u
0
= c
0
, u
1
= c
1
, ..., u
k-1
= c
k-1

u
n+k
+ a
1
u
n+k-1
+ a
2
u
n+k-2
+ ... + a
k
u
n
= 0 dla n 0

gdzie c
0
, c
1
, , c
k-1
oraz a
1
, a
2
, , a
k
s staymi. W zalenoci od parametru k
mamy do czynienia z rwnaniami rekurencyjnymi liniowymi k-tego stopnia.
- Grafy i rekurencje -
83
Pod koniec tego rozdziau zajmiemy si przypadkiem, gdy k>2, teraz jednak
skupimy si na rwnaniach 2-go stopnia.
Rwnania 2-go stopnia maj t przewag, e mona bez znajomoci
szeregw potgowych stosowa dla nich nastpujce twierdzenie:

Jeli (u
n
) jest cigiem speniajcym rwnanie rekurencyjne:
u
0
= c
0
, u
1
= c
1

u
n+2
+ a
1
u
n+1
+ a
2
u
n
= 0 dla n 0 un+1 + 4un+1 5un = 0
oraz , s rozwizaniami pomocniczego rwnania kwadratowego:
t
2
+ a
1
t + a
2
= 0
to:

o Jeli , to istniej stae A, B takie, e:
u
n
= A
n
+ B
n
dla n0
o Jeli = , to istniej stae C, D takie, e
u
n
= (C
n
+ D)
n
dla n0
Wartoci tych staych wyznaczane s dziki parametrom c
0
, c
1
.

Dowd przeprowadzimy dla przypadku pierwszego, tzn. dla gdy
dla przypadku = wyglda on analogicznie. Skorzystamy z indukcji
matematycznej. Zaczniemy od n = 0 i n =1. Twierdzenie mwi, e dla tych
wartoci zachodzi:
c
0
= A
0
+ B
0
oraz c
1
= A
1
+ B
1


Zatem jeli stae A, B przyjm wartoci:

=
0 1
c c
A ,

=
0 1
c c
B
twierdzenie bdzie spenione dla n = 0 oraz n = 1.
Niech stae A i B pozostan ustalone w pierwszym kroku indukcji. Teraz
pozostaje pokaza, e jeeli twierdzenie jest prawdziwe dla wszystkich
u
m
0 m n+1, jest te prawdziwe dla u
n+2
.
u
n+2
= - a
1
u
n+1
- a
2
u
n
= -a
1
(A
n+1
+ B
n+1
) a
2
(A
n
+ B
n
)
= -A
n
(a
1
+ a
2
) - B
n
(a
1
+ a
2
) =
( , s rozwizaniami rwnania pomocniczego t
2
+ a
1
t + a
2
= 0 )
= -A
n
(-
2
) - B
n
(-
2
)
= A
n+2
+ B
n+2


Zobaczmy jak wykorzystuje si przedstawione twierdzenie w praktyce:

Zamy, e mamy do czynienia z nastpujcym rwnaniem rekurencyjnym:
u
0
= 0, u
1
= 2
u
n+2
+ 4u
n+1
5u
n
= 0

- Grafy i rekurencje -
84
Musimy najpierw wyznaczy rozwizania rwnania pomocniczego:
t
2
+ 4t 5 = 0 , std = 1 = -5

Wykorzystujc rwnanie u
n
= A
n
+ B
n
dla n=0 i n=1 mamy:
0 = A + B oraz
2 = A + -5B
,std wyliczamy stae A oraz B:
A = , B = -
i ostatecznie podajemy wzr na n-ty wyraz cigu (u
n
)
u
n
= + (-5)
n


Czasem, gdy pierwiastkami pomocniczego rwnania kwadratowego s
liczby zespolone, wygodnie jest do przedstawienia wzoru na n-ty wyraz cigu
uy twierdzenia De Moivrea. Wemy dla przykadu rwnanie:
u
0
= 2, u
1
= 0,
u
n+2
+ u
n
= 0 dla n 0

Jego rwnanie pomocnicze posiada rozwizania w zbiorze liczb zespolonych:
= i = -i
std wzr na n-ty wyraz cigu u
n
ma posta:
u
n
= i
n
+ (-i)
n

Korzystajc z twierdzenia De Moivrea przyjmie ono posta:
u
n
= 2cos( n )



VII. 3 Rekurencyjne przepoowienie

Mwic o problemach zwizanych z sortowaniem czsto mamy do
czynienia z sytuacj, gdy rekurencyjny algorytm dzieli problem na dwa,
dwukrotnie mniejsze problemy. Ten rodzaj rekurencji jest powszechnie
stosowanym rekurencyjnym przepoowieniem. Podzia problemu na m, m-
krotnie mniejszych problemw jest tylko rozwiniciem schematu dla m=2, na
ktrym teraz si skupimy. Oglna posta rekurencyjnego przepoowienia, to:
u
2n
= P*u
n
+ Q(n)
gdzie P jest sta, a Q jest funkcj zalen od n. Taka rekurencja suy do
prostego wyznaczenia wyrazw u
n
o indeksach bdcych kolejnymi potgami
liczby 2. Jest ona czsto utosamiana z metod dziel i zwyciaj.
Jako przykad znalezienia oglnego wzoru na n-ty wyraz cigu u
n

przeanalizujemy problem wyszukiwania maksymalnego i minimalnego
elementu w danym zbiorze. Jeli zbir ma n elementw, to moemy zastosowa
najprostszy algorytm, ktry porwnuje ze sob kolejne pary liczb. Taki algorytm
- Grafy i rekurencje -
85
musi dwukrotnie (osobno dla minimum i maksimum) przej po wszystkich
kolejnych parach zbioru, std podczas pracy wykona on 2n-2 porwna.
Pokaemy teraz alternatywny algorytm poczynajc od przypadku, kiedy
zbiory maj wielko bdc potg 2. By dla zbioru 2
k
elementowego znale
wartoci min(1..2
k
) oraz max(1..2
k
) , algorytm wywoa siebie samego dla
zbiorw (1..2
k-1
) oraz (2
k-1
+1..2
k
), a nastpnie wykona dwa porwnania:
max(1..2
k-1
) z max(2
k-1
+1..2
k
) oraz min( 1..2
k-1
) z min(2
k-1
+1..2
k
). Std
rekurencyjny wzr na ilo porwna bdzie mia posta:
f(n) = 2*f(n/2) + 2
Jeli n jest potg 2, to dymy do znalezienia rozwizania rwnania:
f(2
k
) = 2* f(2
k-1
) + 2
Przyjmijmy tymczasowo oznaczenie f(t) = f(2
k
), f(t-1) = f(2
k-1
), ..., f(1) = f(2
1
),
f(0) = f(2
0
). Gdy zbir ma 2 elementy, wwczas musimy wykona 2
porwnania, std f(0) = 2. Mamy wic:
f(2
k
) = 2* f(t-1) + 2= 2*[2* f(t-2) + 2] + 2= 2*[2* [2* f(t-3) + 2] + 2] + 2
= 2
t-2
* f(0) + 2
1
+ 2
2
+ + 2
t-1

= 2
t-1
+ 2*(1-2
t-1
)/(1-2)
= 2
t-1
+ 2
t
- 2
=
2
3
2
t
2
t = log
2
(2
k
) ,czyli ostatecznie: f(2
k
) =
2
3
2
k
2

Teraz udowodnimy poprawno tego wzoru. Dla k = 1,
f(2
1
) =
2
3
2
1
2 = 1. Zamy, e wzr jest prawdziwy dla k. Chcemy
udowodni jego poprawno dla k+1.
f(2
k+1
) = 2* f(2
k
) + 2 = 2* (
2
3
2
k
2) + 2 =
2
3
2
k+1
2 c. b. d. o.
Majc udowodnion poprawno wzoru dla zbiorw, ktrych ilo
elementw jest potg 2, moemy udowodni jego poprawno dla kadego
zbioru o parzystej liczbie elementw. W tym celu stosujemy podzia zbioru
wyjciowego S
0
na kolejne (od najwikszego moliwego) zbiory o liczbie
elementw bdc potg 2. Mwic cilej, jeli #S
0
= n, to pierwszy
wyodrbniony zbir ma 2
m
elementw, przy czym, 2
m
jest najwiksz potg 2
nie wiksz ni n. Drugi wyodrbniony zbir bdzie mia n-2
m
elementw. T
strategi stosujemy do momentu, a zbir wejciowy w caoci podzielimy na
zbiory majce ilo elementw, bdc potg 2. Przy scalaniu kadych dwch
zbiorw bdziemy potrzebowali 2 operacji porwnania. Dla przykadu wemy
f(26):
f(26) = f(16) + f(10) + 2, f(10) = f(8) + f(2)


- Grafy i rekurencje -
86
Wstawiajc do powyszych rwnoci obliczony wczeniej wzr rekurencyjny
dostajemy:
f(10) = (
2
3
*8 2) + (
2
3
*2 2) = (
2
3
*10 2)
f(26) = (
2
3
*16 2) + (
2
3
*10 2) = (
2
3
*26 2)
atwo zauway, e dla n nieparzystego f(n) = n
(
(
(

2
3
2



VII. 4 Rwnania rekurencyjne liniowe dowolnego stopnia


Na pocztku tego rozdziau przedstawiony zosta sposb rozwizywania
dowolnego rwnania rekurencyjnego liniowego 2 go stopnia. W tej sekcji
przedstawimy aparat matematyczny pozwalajcy na rozwizanie dowolnego
rwnania liniowego k- tego stopnia. Zaczniemy od przedstawienia szeregw
potgowych, ich wasnoci i zwizku z funkcjami rekurencyjnymi.
W duym uproszczeniu szereg potgowy moemy traktowa jako
niekoczcy si wielomian, powstay np. w wyniku podzielenia przez siebie
dwch wielomianw skoczonych:
(1-x)
-1
= 1 + x + x
2
+ x
3
+ x
4
...
Wspczynniki szeregu potgowymi oznaczane s staymi, np.:
U(x) = u
0
+ u
1
x + u
2
x
2
+ u
3
x
3
+ ...

Dla szeregw potgowych zachodzi wane twierdzenie:
Zaoenie: F ciao,
U(x) F[x] (piercie wielomianw o wspczynnikach z
ciaa F
Teza:
U(x) jest odwracalny u
0
0

Szereg potgowy moemy utosamia z cigiem jego wsprzdnych np.
U(x) (u
0
, u
1
, u
2
, u
3
, ...)

By taki cig wsprzdnych przesun w prawo o k pozycji naley wykona
mnoenie:
U(x)*x
k
(0, 0, ..., 0, u
0
, u
1
, u
2
, u
3
, ...) - ilo pocztkowych zer, to k.

By taki cig wsprzdnych przesun w lewo o k pozycji, trzeba najpierw odj
od odpowiadajcego mu szeregu potgowego pierwszych k wyrazw, a
nastpnie podzieli go przez x
k
:
- Grafy i rekurencje -
87
[U(x) (u
0
+ u
1
x + u
2
x
2
+ ... +u
k-1
x
k-1
)]*(1/x
k
) (u
k
, u
k+1
, u
k+2
, u
k+3
, ...)

Przy rozwizywaniu rwna rekurencyjnych bardzo przydatny okazuje si
szereg (1-x)
-1
, ktrego wspczynniki s rwne (1, 1, 1, 1, ...). Mona te
wykona operacj (1-x)
-1
, by przekona si, e:
(1-x)
-1
= 1 + x +
2
x
2
+
3
x
3
+
4
x
4
...

Dla szeregu potgowego U(x) zachodzi rwnie:
xU(x) u
1
x + 2u
2
x
2
+ 3u
3
x
3
+ ... + ku
k
x
k


std atwo zauway, e [(1-x)
-1
] (1, 2, 3, 4, 5, ...)

Umiejtno identyfikowania rnych szeregw potgowych i
rozkadania ich na szeregi, ktre zostay zademonstrowane, jest podstaw do
rozwizywania dowolnego rwnania liniowego k- tego stopnia.
Kade rwnanie rekurencyjne jest cigiem wartoci (u
0
, u
1
, u
2
, ...), ktre
odtd bdziemy identyfikowali z odpowiednim szeregiem potgowym. Szereg
potgowy, ktrego wsprzdne s wartociami rwnania rekurencyjnego
bdziemy nazywali funkcj tworzc rwnania rekurencyjnego.
Rozwiemy teraz rwnanie liniowe 2go stopnia korzystajc z
przedstawionej teorii:
Mamy dane rwnanie:
u
0
= 0 u
1
= 1
u
n+2
5u
n+1
+ 6u
n
= 0

ktrego rozwizaniem bdzie funkcja tworzca o wspczynnikach
(u
0
, u
1
, u
2
, u
3
, ...). Rozpiszmy nasz funkcj tworzc wykorzystujc powysze
rwnanie rekurencyjne:
U(x) = u
0
+ u
1
x + u
2
x
2
+ u
3
x
3
+ ...
= 0 + x + (5u
1
- 6u
0
)x
2
+ (5u
2
6u
1
)x
3
+ (5u
3
6u
2
)x
4
+ ...
= x + 5x(0 + u
1
x + u
2
x
2
+ ...) -6x
2
(u
0
+ u
1
x + u
2
x
2
+ ...)
= x + 5xU(x) 6x
2
U(x)

std U(x) = x/(6x
2
5x + 1)
co po znalezieniu rozwizania rwnania 6x
2
5x + 1 =0 daje:
U(x) = x/((1-2x)(1-3x))

Mimo i U(x) jest ju dobrze wyraon funkcj tworzc, nie jestemy w
stanie odgadn jej wspczynnikw bdcych zarazem rozwizaniem rwnania
rekurencyjnego. W tym celu musimy rozpisa otrzymany wynik na uamki
proste, a nastpnie tak dobra stae A i B, by funkcja tworzca pozostaa bez
zmian:
U(x) = x/((1-2x)(1-3x)) = A/(1-2x) + B/(1-3x)
- Grafy i rekurencje -
88
Std A = -1, B = 1
Czyli ostatecznie U(x) = 1/(1-3x) -1/(1-2x)
Skoro (1-x)
-1
= 1 + x +
2
x
2
+
3
x
3
+
4
x
4
...
to u
n
= 3
n
2
n
.


Formalizacja:

Funkcja tworzca dla rwnania rekurencyjnego k-tego stopnia ma posta:
U(x) = R(x) / (1 + a
1
x + a
2
x
2
+ ... + a
k
x
k
) (*)
gdzie a
1
, a
2
,... s liczbami z rwnania rekurencyjnego u
n+k
+ a
1
u
n+k-1
+...+a
k
u
n
= 0

Dla takiej funkcji tworzcej definiuje si rwnanie pomocnicze:
t
k
+ a
1
t
k-1
+ a
2
t
k-2
+ ... +a
k
= 0 (**)

Rwnanie (**) ma w zbiorze liczb zespolonych k pierwiastkw. Wrd
nich wyrniamy pierwiastki
1
,
2
, ... ,
s
z odpowiednimi krotnociami
m
1
, m
2
, ... ,m
s
, przy czym suma wszystkich krotnoci wynosi k. Rwnanie (**)
moe by wic zapisane w nastpujcy sposb:
(t-
1
)
m1
* (t-
2
)
m2
* ... * (t-
s
)
ms
= 0

co po podstawieniu za t 1/x i pomnoeniu przez x
k
daje:
(1-
1
x)
m1
* (1-
2
x)
m2
* ... * (1-
s
x)
ms
= 0

std funkcja tworzca moe by zapisana jako:
U(x) = R(x)/ ((1-
1
x)
m1
* (1-
2
x)
m2
* ... * (1-
s
x)
ms
)

Teraz pozostaje ju tylko rozoy funkcj tworzc na czynniki, ktre pomog
nam zidentyfikowa wartoci rwnania rekurencyjnego.

U(x) = (...)/(1-
1
x)
m1
+ (...)/(1-
2
x)
m2
+ ... + (...)/(1-
s
x)
ms


Gdyby krotno kadego rozwizania rwnania bya rwna 1, to rozkad byby
trywialny, a dobr odpowiednich czynnikw natychmiastowy. Gdy jednak
krotnoci s rne od 1, naley przeprowadzi nastpujc redukcj:

=

=

m
j j
i
j i
m
i
x
C
x
1
,
) 1 ( ) 1 (
(...)

gdzie C
i,j
s odpowiednimi staymi.

Jako przykad wemy nastpujce rwnanie rekurencyjne:
u
0
= 0, u
1
= -9, u
2
= 1, u
3
= 21
u
n+4
5u
n+3
+ 6u
n+2
+ 4u
n+1
8u
n
= 0

- Grafy i rekurencje -
89
ktrego rwnanie pomocnicze ma posta:
t
4
5t
3
+ 6t
2
+ 4t 8 = 0
lub (t - 2)
3
(t + 1) = 0

Kademu pierwiastku tego rwnania bdzie w rozwizaniu rwnania
rekurencyjnego odpowiada wielomian stopnia o jeden mniejszego ni krotno
pierwiastka:
u
n
= (An
2
+ Bn + C)*2
n
+ D*(-1)
n


Po rozwizaniu zestawu rwna wyznaczajcego wartoci A, B, C, D:
u0 = 0 = C + D
u1 = -9 = 2A + 2B + 2C D
u2 = -1 = 16A +8B +4C + D
u3 = 21 = 72A + 24B + 8C D

otrzymujemy kocowy wzr na n- ty element rwnania rekurencyjnego:
u
n
= (n
2
- n - 3)*2
n
+ 3*(-1)
n



Na koniec przedstawimy jeszcze rwnanie rekurencyjne liniowe, ktre
posiada czynnik wolny i wyznaczymy jego funkcj tworzc:

u
0
= 0, u
1
= 1
u
n+2
u
n+1
6u
n
= n
U(x) = u
0
+ u
1
x + u
2
x
2
+ u
3
x
3
+ ...
= x + (u
1
+ 6u
0
+ 0)x
2
+ (u
2
+ 6u
1
+1)x
3
+ (u
3
+ 6u
2
+ 2)x
4
+ ...
= x + (u
1
x
2
+ u
2
x
3
+ u
3
x
4
+...) + 6(u
0
x
2
+ u
1
x
3
+ u
2
x
4
+ ...) +
+ (x
3
+2x
4
+ 3x
5
+...)
= x + xU(x) + 6x
2
U(x) + x
3
(1 + 2x + 3x
2
+ ...)
= x + xU(x) +6x
2
U(x) + x
3
(1-x)
-2


czyli funkcja tworzca ma posta:
U(x) = (x
3
(1 - x)
-2
+ x)/(1 x 6x
2
)

Wyznaczenie kolejnych wyrazw odpowiadajcego jej rwnania
rekurencyjnego moe by dobrym wiczeniem utrwalajcym przedstawion
teori.
- Grafy i rekurencje -
90
Rozdzia VIII Przykadowe procesy rekurencyjne


VIII. 1 Stan rejestru przesuwajcego


Zamy, e dany jest przerzutnik pokazany na poniszym rysunku:

d
c
q
0

d napicie danych
c impuls zapisu
q
0
napicie stanu przerzutnika

Rysunek 40 Przerzutnik danych
Pod wpywem impulsu c do przerzutnika zapisywana jest dana d, tzn.
stan q przyjmuje warto d.
Rejestr przesuwajcy jest szeregowym zestawem przerzutnikw
pokazanym na poniszym rysunku.

... ...
d
c
N n 1
q q q q
N
N-1
N-1
n
n
n-1
n-1
1
1
Q Q Q Q Q
q
N


Q
n
stan n- tego przerzutnika

Rysunek 41 Rejestr przesuwajcy

W rejestrze tym pod wpywem impulsu zapisu c stan Q
n-1
zostaje zapisany
do nastpnego przerzutnika.
Oznaczamy stan pocztkowy rejestru przez:

Q
0
= [ q
N
0
, ...,q
n
0
,..., q
1
0
]


Po pierwszym impulsie zapisu stan rejestru przyjmuje posta:

Q
1
= [ q
N
1
, ..., q
n
1
, ..., q
n
1
]

- Grafy i rekurencje -
91
przy czym
q
1
1
= d
q
2
1
= q
1
0

...........................
q
n
1
= q
n-1
0

...........................
q
N
1
= q
N-1
0


W analogiczny sposb modyfikowany jest stan rejestru przesuwajcego
po kolejnych impulsach zapisu. W rejestrach przesuwajcych ze sprzeniem
zwrotnym sygna d jest funkcj stanu rejestru:

d = f ( q
N
,...,q
n
,..., q
1
)

Funkcj t realizuje ukad bramek logicznych. Tak wic stany rejestru
opisuj rwnania rekurencyjne:

q
1
k
= f(q
1
k-1
, ..., q
n
k-1
, , q
N
k-1
)
q
n
k
= q
n-1
k-1
n=2, ..., N

Na podstawie danego stanu pocztkowego Q mona wygenerowa graf
stanw Q
k
, k = 1,...,K.


4 3 2 1
q
q
q
q
q q
*
4
4
3
3
2 1

Rysunek 42 Przykadowa modyfikacja rejestru przesuwajcego

Stan pocztkowy rejestru:

Q
0
= [q
4
0
,
q
3
0
, q
2
0
, q
1
0
] = [ 1101 ]


Kolejne stany tworz cig przedstawiony na rysunku
Q
0
= [ 1101 ]
Q
1
= [ 1011 ]
Q
2
= [ 0110 ]
Q
3
= [ 1100 ]
Q
4
= [ 1001 ]
Q
5
= [ 0010 ]
- Grafy i rekurencje -
92
Q
6
= [ 0100 ]
Q
7
= [ 1000 ]
Q
8
= [ 0000 ]

Po 8 impulsach rejestr znajdzie si w ustalonym stanie [ 0, 0, 0, 0, 1 ].
W analogiczny sposb mona podstawi zmiany stanu rejestru przesuwajcego
dowolnego ukadu realizujcego funkcj f.


VIII. 2 Stan procesu montau

Zamy, e dana jest linia montaowa pokazana na poniszym rysunku


....
.... 0 1 n N

Rysunek 43 Linia montaowa

Linia skada si z N stacji montaowych. Operacje na stacjach s
wykonywane przez roboty przemysowe. Stacja ni 0 suy do sprowadzania
nowych obiektw do montau.
W trakcie cyklu kady robot wykonuje operacje na obiekcie
znajdujcym si na jego stacji. Po zakoczeniu operacji przez wszystkie roboty,
kady obiekt jest przesuwany (synchronicznie) na kolejn stacj.
Na linii montowane s rwnoczenie obiekty M rnych wersji. Czasy
montau obiektw rnych wersji na stacjach dane s macierze:

T = [ t
m, n
]
m = 1,..,M
n = 1,...,N

gdzie: t
m,n
czas montau obiektu m tej wersji na n-tej stacji
Czas kadego cyklu wyznaczamy jako

C
k
= max C
n
k


1 n N

gdzie: C
n
k

=t
m, n
jeli w k- tym takcie na n- tej stacji by montowany obiekt
m- tej wersji.

- Grafy i rekurencje -
93
Zamy, e zamwienia na obiekty dane s w wektorze;

Z = [ Z
m
]
m = 1,...,M
gdzie: Z
m
liczba obiektw m- tej wersji

Problem polega na zmontowaniu zamwionych obiektw w najkrtszym czasie.
Oznaczamy przez X
k
wektor stanu linii montaowej po k- tym cyklu,
( k = 0, 1, ..., K ).
Stan ten definiujemy nastpujco;

X
k
= [ X
n
k
]
n = 0,1, ... , N

gdzie: X
n
k
- numer wersji obiektu znajdujcego si na n- tej stacji po k- tym
cyklu.

Stan pocztkowy X
0
jest dany. Zamy, e

X
0
0
= 0
X
n
0
> 0 n =1, ...,N

To znaczy, e na kadej stacji montaowej znajduje si jaki obiekt. Czas
pierwszego cyklu wyznaczamy z warunku:

C
1
= max C
n
1

1 n N

przy czym C
n
1
= t
m,n

oraz m = X
n
0


W trakcie pierwszego ( i kadego nastpnego )cyklu do stacji
zaadunkowej jest podawany obiekt wybranej wersji. Decyzja o obiekcie
zaadowanym do linii w k-tym cyklu bdzie oznaczona przez d
k
, przy czym:

d
k
=
{
m, jeli w k- tym cyklu do linii jest zaadowany
obiekt m tej wersji
0, jeli w k-tym cyklu do linii nie jest zaadowany
aden obiekt


- Grafy i rekurencje -
94
Stan linii montaowej po takcie k jest zaleny od stanu linii po
poprzednim takcie oraz od decyzji w k- tym takcie. Rekurencyjne rwnania
stanu maj posta:
X
k
= f
x
(X
k-1
, d
k
)
k = 1,..., K
W postaci jawnej mamy

X
n
k
= X
n-1
k-1

n = 2,...,N
X
1
k

= d
k



Ponadto obliczamy czas cyklu C
k
, k = 1, ..., K.
W analogiczny sposb mona przedstawi rekurencyjne rwnanie
zamwie:
Z
k
= f
z
( Z
k-1
, X
k-1
)
k =1, ..., K

W postaci jawnej mamy:
Z
m
k
=
{
Z
m
k-1
1 , dla X
N
k-1
= m
Z
m
k-1
, dla X
N
k-1
m


Rekurencyjne rwnania stanu linii montaowych oraz zamwie
pozwalaj symulowa przebieg procesu dla rnych decyzji d
k
, k = 1, ..., K.
Zatem generowane s trajektorie stanw;

(X
0
, Z
0
) ( X
1
, Z
1
) ( X
k
, Z
k
) (X
K
, Z
K
)

na podstawie strategii decyzji

d
1
, d
2
, ..., d
k
, ..., d
K

Warunkiem zakoczenia procesu jest zrealizowanie zamwie tzn.


Z
m
k

0
m = 1, ..., M




Stan pocztkowy X
0
moe by dowolny. Stan kocowy X
k
moe by wektorem
o zerowych elementach. Miar jakoci strategii decyzji jest czas realizacji
zamwie:

- Grafy i rekurencje -
95

k=K
Q = C
k
min
k=1

Jak dotd nie istnieje algorytm optymalnego rozwizania sformuowanego
problemu.


VIII. 3 Fundusz emerytalny

Zamy, e z danego funduszu emerytalnego naley dokona okrelon
liczb wypat. Po tych wypatach fundusz emerytalny zostanie wyczerpany.
Problem polega na wyznaczeniu wartoci wypat.
Zamy, e dane s:

F
0
- pocztkowa warto funduszu
N - liczba wypat
r
n
- stopa procentowa n- tego okresu wypat, (n=1, ..., N)

Oznaczmy przez:

W
n
- wypata na zakoczenie n- tego okresu
F
n
- warto funduszu po wypacie W
n
.

Fundusze F
n
musz spenia warunki

F
n
> 0 dla n=0, ..., N-1
oraz F
N
= 0

Stosujc zasad rwnowanoci kapitau dla kolejnych terminw n,
n=1, ..., N otrzymamy rwnania:

F
0
A(0, 1) W
1
= F
1

F
0
A(0, 2) W
1
A(1, 2) W
2
= F
2

F
0
A(0, 3) W
1
A(1, 3) W
2
A(2, 3) W
3
= F
3

..........................................................................................................................

i=n-1
F
0
A(0, n) - W
i
A(i, n) W
n
= F
n


i=1
..........................................................................................................................

i=N-1
F
0
A(0, N) - W
i
A(i, N) W
N
= F
N


i=1
- Grafy i rekurencje -
96
gdzie A(i, n) czynnik akumulacji z i- tego na n- ty termin

Dla oprocentowania prostego:
A(i, n) = 1 + r
i+1
+ ... + r
n


Dla oprocentowania skadanego:
A(i, n) = (1 + r
i+1
)* *(1 + r
n
)

Dla wypat przyjmuje si, e tworz one:
Postp arytmetyczny
W
n
= W
1
+ (n-1)W, gdzie W dane
Postp geometryczny
W
n
= W
1
(1 + q)
n-1
gdzie q dane

Z ukadu powyszych rwna mona wyznaczy cig wypat W
n
oraz
funduszy F
n
, n=1, ..., N.


VIII. 4 Fundusz amortyzacji

Amortyzacja tzw. rodkw trwaych pozwala firmom gromadzi fundusze
na zakup nowego rodka trwaego (np. samochodu) po cakowitym zuyciu
poprzedniego. Istotne znaczenie ma fakt, e kwoty funduszu amortyzacji nie s
objte podatkiem dochodowym. Jednake dla funduszu amortyzacji okrelane s
grne limity:
g
1
, ..., g
n
, , g
N

ktre nie mog by przekroczone.
Problem polega na tworzeniu funduszu amortyzacji poprzez wpat:
x
1
, ..., x
n
, ..., x
N

tak, by wartoci oprocentowanych wpat byy rwne ustalonym limitom.
Zamy, e dane s stopy procentowe
r
1
, ..., r
n
, ..., r
N

w kolejnych latach.
Stosujc zasad rwnowanoci kapitau wyznaczy kolejno wpaty
x
1
, ..., x
n
, ..., x
N
z nastpujcych rekurencyjnych rwna:
x
1
= g
1

x
1
(1 + r
2
) + x
2
= g
2

................................
x
1
(1 + r
2
)* ... *(1 + r
n
) + x
2
(1 + r
3
)* ... *(1 + r
n
) + + x
n
= g
n


x
1
(1 + r
2
)* ... *(1 + r
N
) + x
2
(1 + r
3
)* ... *(1 + r
N
) + + x
N
= g
N

- Grafy i rekurencje -
97
VIII. 5 Kredyty ratalne

Zamy, e kredyt P
0
ma by spacony w N ratach:
Kapitaowych K
n
, (n=1, ..., N) oraz
Odsetkowych I
n
, (n=1, ..., N)

Kredyt moe by spacany w warunkach oprocentowania prostego lub
skadanego ze stop sta lub zmienn. Dane s stopy procentowe r
n
,
poszczeglnych okresw, (n=1, ..., N).
Raty kredytu s wyznaczane z zasady rwnowanoci kapitau, w postaci:

n=N
P
0
A(0, N) = (K
n
+ I
n
) A(n, N) (1)

n=1
gdzie: A(n, N) czynnik oprocentowania z n- tego terminu na N- ty
termin
Czynniki oprocentowania maj posta:
Dla oprocentowania prostego A(n, N) = 1+r
n+1
+...+r
N
(2)
Dla oprocentowania skadanego A(n, N) = (1+r
n+1
)*...*(1+r
N
) (3)

Spata kredytu w warunkach oprocentowania skadanego lub prostego
wymaga wyznaczenia kolejno:
Rat kapitaowych K
n
, (n=1, ..., N)
Rat odsetkowych I
n
, (n=1, ..., N)

Uwzgldniajc (2) w (1) otrzymamy rekurencyjny algorytm wyznaczania
rat dla oprocentowania skadanego w postaci:
Krok 1
Ustali K
1
tak by K
1
< P
0

Obliczy I
1
ze wzoru I
1
= P
0
* r
1

Obliczy P
1
= P
0
K
1

.....................................................................
Krok n (n=2, ..., N-1)
Ustali K
n
tak by K
n
< P
n-1

Obliczy I
n
ze wzoru I
n
= P
n-1
* r
n

Obliczy P
n
= P
n-1
K
n

.....................................................................
Krok N
Ustali K
n
tak by K
n
= P
N-1

Obliczy I
N
ze wzoru I
N
= P
N-1
* r
N

Sprawdzi, czy P
N
= P
N-1
K
N
= 0

Tak wic w n-tym terminie naley spaci razem rat cakowit R
n
,
(n=1, ..., N), przy czym
- Grafy i rekurencje -
98
R
n
= K
n
+ I
n


Uwzgldniajc (3) w (1) otrzymamy rekurencyjny algorytm wyznaczania
rat dla oprocentowania prostego, w postaci:
Krok 1
Ustali K
1
tak by K
1
< P
0

Obliczy I
1
ze wzoru I
1
= (P
0
*r
1
) / (1+r
2
+...+r
N
)
Obliczy P
1
= P
0
K
1

.........................................................................................
Krok n, (n=2, ..., N-1)
Ustali K
n
tak by K
n
< P
n-1

Obliczy I
n
ze wzoru I
n
= (P
n-1
*r
n
) / (1+r
n+1
+...+r
N
)
Obliczy P
n
= P
n-1
K
n

.........................................................................................
Krok N
Ustali K
N
tak by K
N
= P
N-1

Obliczy I
N
ze wzoru I
N
= P
N-1
* r
N

Sprawdzi czy P
N
= P
N-1
K
N
= 0

Analogicznie jak dla oprocentowania skadanego w n- tym terminie
naley spaci rat cakowit R
n
, (n=1, ..., N).
W przedstawionych wyej algorytmach rekurencyjnych raty odsetkowe I
n

s obliczane z rnych wzorw.



- Grafy i rekurencje -
99
Zakoczenie

W dzisiejszych czasach, gdy co kilka lat podwaja si prdko
obliczeniowa komputerw, a sieci komputerowe oferuj coraz to wiksze
przepustowoci czsto zapomina si, e napisanie poprawnie dziaajcego,
szybkiego algorytmu take ma due znaczenie.
Zespoy programistw pisz aplikacje coraz to bardziej skomplikowane,
ktre jednak s najczciej zoeniem innych mniejszych programw,
niekoniecznie najszybszych i niezawodnych. Std programy komputerowe staj
si zawodne i dziaaj coraz wolniej, co zmusza producentw sprztu do
produkcji szybszych komputerw, ktre znw wpadaj w rce zespow
programistw..
Umiejtno wykorzystania klasycznych algorytmw informatycznych do
rozwizania skomplikowanych problemw jest tym, czego brakuje w dzisiejszej
sztuce programowania. Nie naley zapomina, e duszy czas oblicze danego
algorytmu propaguje si, co przy rozbudowanych sieciach komputerowych
wydua czas oczekiwania na konkretny rezultat.
Przedstawienie trudnych problemw w postaci grafw daje niekiedy
moliwo innego spojrzenia na zagadnienie, co jest podstaw do znalezienia
lepszego i bardziej pewnego algorytmu. Algorytmy rekurencyjne w poczeniu
ze strukturami grafowymi doskonale nadaj si do reprezentacji wielu
problemw, z ktrymi moemy spotka si na co dzie.
Analiza efektywnoci i poprawnoci rekurencji wraz umiejtnoci
prawidowego jej wykorzystania jest elementem bardzo istotnym w dzisiejszej
sztuce programowania.




- Grafy i rekurencje -
100
Literatura

1) N. WIRTH, Algorithms + Data Structures = Programs , Prentice-Hall,
1976
2) G. BRASSARD, P. BRATLEY Algorithmics: Theory and Practice
Prentice-Hall, 1988
3) N. H. XUONG, Mathematiques Discretes et Informatique, Masson,
Paris 1991
4) C. L. LIU. Introduction to Combinatorial Mathematics McGraw-Hill,
1968
5) T.H. CORMEN, C. E. LEISERSON, R. L. RIVEST Introduction to
Alghorithms, Massachusetts Institute of Technology, 1990
6) A.V. OHO, J.E. HOPCROFT, J.D. ULLMAN Projektowanie i analiza
algorytmw komputerowych PWN, Warszawa 1983
7) J. J. F. CAVANAGH. Digital Computer Arithmetic. McGraw-Hill,
1984.
8) DONALD E. KNUTH Sorting and Searching, volume 3 of The Art of
Computer Programming Addison-Wesley, 1973
9) N. BIGGS Discrete Mathematics

You might also like