You are on page 1of 64

Algorytmy i struktury danych

Notatki nr 1 Pawe Rembelski


PJWSTK

1 marca 2012

Pawe Rembelski (PJWSTK)

Algorytmy i struktury danych

1 marca 2012

1 / 51

Notacja asymptotyczna  przypomnienie Algorytmy  podstawy Algorytmy iteracyjne  przykad Algorytmy rekurencyjne  przykad

Pawe Rembelski (PJWSTK)

Algorytmy i struktury danych

1 marca 2012

2 / 51

Notacja asymptotyczna  przypomnienie

Notacja asymptotyczna  przypomnienie

Pawe Rembelski (PJWSTK)

Algorytmy i struktury danych

1 marca 2012

3 / 51

Notacja asymptotyczna  przypomnienie

Rzdy funkcji

Denicja
Niech

f : N R+ {0} i g : N R+ {0}
n
lim

bd funkcjami takimi, e:

f (n ) = a, g (n ) g

gdzie

a R+ {0}. a = 0, a = c,

Jeeli:

to mwimy, e

oznaczamy przez gdzie

rzd funkcji f jest cile mniejszy f g,


(lub

ni rzd funkcji

jest pewn dodatni sta, to mwimy, e

rzdowi funkcji

f g, a = ,

rzd funkcji f jest rwny funkcje f i g s tego samego rzdu) i oznaczamy przez
ni rzd funkcji

to mwimy, e

oznaczamy przez

rzd funkcji f jest cile wikszy g.

Pawe Rembelski (PJWSTK)

Algorytmy i struktury danych

1 marca 2012

4 / 51

Notacja asymptotyczna  przypomnienie

Rzdy funkcji

Wniosek
Jeeli dla pewnej funkcji

znajdziemy funkcj

tak, e

oraz:

g (n) = c , gdzie c 0 jest pewn sta, to f jest funkcj sta, g (n) = logc n, gdzie c > 0 jest pewn sta i n 1, to f jest funkcj logarytmiczn (dla funkcji log2 n wprowadzamy oznaczenie lg n), g (n ) = n c , g (n ) = n c , g (n ) = c n , g (n ) = n n ,
1
gdzie

c>1 c1 c>1

jest pewn sta, to

f f f

jest funkcj pierwiastkow (lub

podwielomianow), gdzie jest pewn sta, to jest funkcj wielomianow

(szczeglnym przypadkiem funkcji wielomianowej jest funkcja liniowa gdzie to jest pewn sta, to

f (n) = n),

jest funkcj wykadnicz,

jest funkcj ponadwykadnicz.

Wniosek
Jeeli

c>1

jest pewn sta, to:

c logc n n c n n lg n nc c n n! nn ,
dla wszystkich dostatecznie duych
Pawe Rembelski (PJWSTK)

n N.
1 marca 2012 5 / 51

Algorytmy i struktury danych

Notacja asymptotyczna  przypomnienie

Ograniczenie z dou

Denicja
Niech to mwimy e rzd funkcji

f : N R+ {0} i g : N R+ {0} bd funkcjami. Jeeli f f jest rwny co najmniej rzdowi funkcji g ogranicza z dou funkcj f ) i oznaczamy przez f = (g ).

albo

(lub funkcja

g,

Na przedstawionym rysunku
Pawe Rembelski (PJWSTK)

f = (g ),

gdzie

c>0

jest pewn sta.


1 marca 2012 6 / 51

Algorytmy i struktury danych

Notacja asymptotyczna  przypomnienie

Ograniczenie z gry

Denicja
Niech to mwimy e rzd funkcji

f : N R+ {0} i g : N R+ {0} bd funkcjami. Jeeli f g f jest rwny co najwyej rzdowi funkcji g (lub ogranicza z gry funkcj f ) i oznaczamy przez f = O (g ).

albo

funkcja

g,

Na przedstawionym rysunku
Pawe Rembelski (PJWSTK)

f = O (g ),

gdzie

c>0

jest pewn sta.


1 marca 2012 7 / 51

Algorytmy i struktury danych

Notacja asymptotyczna  przypomnienie

Ograniczenie z dou i z gry

Denicja
Niech e

f : N R+ {0} i g : N R+ {0} bd funkcjami. Jeeli f g , to mwimy funkcja g ogranicza z dou i z gry funkcj f i oznaczamy przez f = (g ).

Na przedstawionym rysunku
Pawe Rembelski (PJWSTK)

f = (g ),

gdzie

c1 , c2 > 0

s pewnymi staymi.
1 marca 2012 8 / 51

Algorytmy i struktury danych

Notacja asymptotyczna  przypomnienie

Funkcja lg

n!

Ograniczenie z gry:

lg

n! = lg

n i =1

i lg

n i =1

n = lg nn = n lg n,

czyli lg

n! n lg n.
n n
lg

Ograniczenie z dou:

lg

n!

= =

lg

i =1

i=

i =1

n
lg
1

xdx =

n
1

ln

ln 2

dx

x ln x x
ln 2

n
1

n ln n
ln 2

= c n lg n,

gdzie

c1

jest pewn dodatni sta, czyli lg

n! c n lg n.
< c 1,

Wniosek
Poniewa lg lg

n! n lg n n! = (n lg n).

i lg

n! c n lg n,

dla 0

to lg

n!

n lg n.

Std

Pawe Rembelski (PJWSTK)

Algorytmy i struktury danych

1 marca 2012

9 / 51

Algorytmy  podstawy

Algorytmy  podstawy

Pawe Rembelski (PJWSTK)

Algorytmy i struktury danych

1 marca 2012

10 / 51

Algorytmy  podstawy

Intuicje

Algorytm i zagadnienia towarzyszce

Pawe Rembelski (PJWSTK)

Algorytmy i struktury danych

1 marca 2012

11 / 51

Algorytmy  podstawy

Problemy nierozstrzygalne i rozstrzygalne

Nieformalnie o problemach nierozstrzygalnych ...


Problem nierozstrzygalny
rozwizania, np: problem Hamleta: by albo nie by, oto jest pytanie ..., problem stopu: zaproponowa algorytm sprawdzajcy, czy dowolny inny algorytm jest procesem skoczonym. to zagadnienie, dla ktrego nie istnieje skoczony algorytm

Zadanie. Poda uzasadnienie dla nierozstrzygalnoci problemu stopu.

Nieformalnie o problemach rozstrzygalnych ...


Problem rozstrzygalny (algorytmiczny)
algorytm rozwizania, np: problem wyprania ubra w pralce automatycznej: dla okrelonej pralki, rodka piorcego i sterty brudnych ubra zaproponowa algorytm ich wyprania, problem elementu maksymalnego: zaproponowa algorytm wyszukujcy element maksymalny w danym skoczonym, niepustym wektorze rnych liczb naturalnych. to zagadnienie, dla ktrego istnieje skoczony

Zaoenie
Przedmiotem dalszych wsplnych rozwaa bd jedynie problemy algorytmiczne.
Pawe Rembelski (PJWSTK) Algorytmy i struktury danych 1 marca 2012 12 / 51

Algorytmy  podstawy

Struktura dla algorytmu

Nieformalnie o strukturze dla algorytmu ...


Struktur dla algorytmu nazywamy rodowisko wykonania owego algorytmu zadane bezporednio charakterystyk rozwizywanego problemu algorytmicznego.

Formalnie o strukturze dla algorytmu ...


Struktur dla algorytmu
nazywamy system algebraiczny

S = U , o0 , o1 , o2 , . . . , rn , r1 , . . . , rm ,
gdzie

jest uniwersum a

i relacje w zbiorze problemu.

U,

oi , rj ,

dla 0

i n

oraz 0

j m,

to odpowiednio operacje

ktry pozwala na wyraenie charakterystyki rozwizywanego

Przykad. Struktura dla problem elementu maksymalnego:

S = N, +, <

Uwaga! W dalszej czci wykadu podczas konstrukcji algorytmw bdziemy domylnie


zakadali dostpno podstawowych struktur algebraicznych i co za tym zwykle bdziemy podawa jedyni ich niezbdne rozszerzenie.

Pawe Rembelski (PJWSTK)

Algorytmy i struktury danych

1 marca 2012

13 / 51

Algorytmy  podstawy

Pojcie algorytmu

Nieformalnie o algorytmie ...


Algorytm* to metoda postpowania, ktra w danym rodowisku prowadzi do rozwizania postawionego problemu algorytmicznego, intuicyjnie

algorytm (problem) = rozwi azanie .


Przykad. Algorytm dla problemu wyprania ubra w pralce automatyczne:
wcz pralk, zaaduj ubrania i nasyp proszek, jeeli ubrania s bardzo brudne, to nastaw program z zakresu VII-XII, w przeciwnym przypadku nastaw program z zakresu I-VI, odkr zawr doprowadzajcy wod do pralki, nacinij przycisk START, dopki nie zawieci si kontrolka KONIEC, nie przeszkadzaj pralce w pracy, zakr zawr doprowadzajcy wod do pralki, wyjmij ubrania, wycz pralk.

* okrelenie algorytm wywodzi si od nazwiska matematyka perskiego Muhammed'a ibn Musa Alchwarizmi (przeom VIII i IX wieku).

Pawe Rembelski (PJWSTK)

Algorytmy i struktury danych

1 marca 2012

14 / 51

Algorytmy  podstawy

Pojcie algorytmu

Formalnie o algorytmie ...


S = U , o0 , o1 , o2 , . . . , rn , r1 , . . . , rm to elementw wejciowych IN U (inaczej informacje wejciowe, dane wejciowe, argumenty algorytmu) w zbir elementw wyjciowych OUT U (inaczej informacje wyjciowe, dane wyjciowe, rezultat algorytmu).
nad struktur skoczony cig czynnoci, ktre pozwalaj przeksztaci zadany zbir

Algorytm (metoda, procedura)

Przykad. Algorytm znajdowania elementu maksymalnego w niepustym wektorze


(tablicy)

rnych liczb naturalnych dugoci

dane wejciowe: dane wyjciowe: algorytm MAX:

n: T  wektor wejciowy, n  rozmiar (dugo) max  element maksymalny wektora T , max


warto

wektora

T,

T [0], max jest mniejsza ni warto 2-go elementu wektora, to przypisz zmiennej max warto owego elementu, jeeli warto zmiennej max jest mniejsza ni warto 3-go elementu wektora, to przypisz zmiennej max warto owego elementu,
przypisz zmiennej jeeli warto zmiennej ... jeeli warto zmiennej

max

jest mniejsza ni warto

wektora, to przypisz zmiennej

max

n-go

elementu

warto owego elementu,

zwr jako wynik warto zmiennej


Pawe Rembelski (PJWSTK)

max .

Algorytmy i struktury danych

1 marca 2012

15 / 51

Algorytmy  podstawy

Zapis algorytmu

Denicja
Schematem blokowym algorytmu
rozwaanej metody. nazywamy skoczony graf skierowany o ustalonej skadni i semantyce krawdzi oraz wierzchokw, reprezentujcy sposb dziaania

Przykad. Algorytm znajdowania elementu maksymalnego w niepustym wektorze


(tablicy)

rnych liczb naturalnych dugoci

n:

Pawe Rembelski (PJWSTK)

Algorytmy i struktury danych

1 marca 2012

16 / 51

Algorytmy  podstawy

Zapis algorytmu

Denicja
Implementacj algorytmu
nazywamy zapis sposobu dziaania rozwaanej metody w danym jzyku (pseudokodzie) o ustalonej skadni i semantyce.

Przykad. Algorytm znajdowania elementu maksymalnego w niepustym wektorze


(tablicy)

rnych liczb naturalnych dugoci

n:

1 int Max(int T[], int n) { 2 int i:=1, max:=T[0]; 3 4 while (i<n) { 5 if (max<T[i]) max:=T[i]; 6 i:=i+1; 7 } 8 return max; 9 }
Uwaga! W dalszej czci wykadu bdziemy analizowali algorytmy zapisane gwnie w
postaci implementacyjnej w pseudokodzie o skadni i semantyce zblionej do jzykw programowania rwnoci).
Pawe Rembelski (PJWSTK) Algorytmy i struktury danych 1 marca 2012 17 / 51

C, C++, Java

(z wyjtkiem np. instrukcji przypisania i symbolu relacji

Algorytmy  podstawy

Poprawno algorytmu

Nieformalnie o poprawnoci algorytmu ...


Algorytm jest poprawny, jeeli w przyjtym rodowisku wykonania realizuje zamierzenia opisane relacja midzy danymi wejciowymi a danymi wyjciowymi, czyli rozwizuje postawiony problem.

Denicja
Specykacj algorytmu nazywamy par WP , WK , dla WP bdcego warunkiem pocztkowym i WK jest warunkiem kocowym algorytmu, gdzie posta obu warunkw
jest podyktowana sformuowaniem rozwizywanego problemu.

Przykad. Specykacja algorytmu Max:

1 int Max(int T[], int n) { | WP :T 2 8 9 }

jest niepustym wektorem

int i:=1, max:=T[0]; ... return max; | WK : Max (T , n) = max , gdzie max

rnych liczb naturalnych,

n N+ , |T | = n

jest maksymalnym elementem wektora

Pawe Rembelski (PJWSTK)

Algorytmy i struktury danych

1 marca 2012

18 / 51

Algorytmy  podstawy

Poprawno algorytmu

Denicja
Algorytm

Alg

specykacj

WP , WK

dziaajcy w strukturze

jest

czciowo poprawny Alg

ze wzgldu na

wtedy i tylko wtedy, gdy dla wszystkich danych wejciowych,

ktre speniaj warunek pocztkowy

WP ,

jeeli algorytm

dane wyjciowe speniaj warunek kocowy

WK .

zatrzyma si, to uzyskane

Pytanie. Czy algorytm Max jest czciowo poprawny w strukturze

S = N, +, <

Denicja
Algorytm

Alg

dziaajcy w strukturze

wzgldu na specykacj

WP , WK

jest

cakowicie poprawny (poprawny) WP algorytm Alg WK .

ze

wtedy i tylko wtedy, gdy dla wszystkich danych zatrzyma si i

wejciowych, ktre speniaj warunek pocztkowy

uzyskane dane wyjciowe speniaj warunek kocowy

Pytanie. Czy algorytm Max jest cakowicie poprawny w strukturze

S = N, +, <

Pawe Rembelski (PJWSTK)

Algorytmy i struktury danych

1 marca 2012

19 / 51

Algorytmy  podstawy

Poprawno algorytmu

Wniosek
Kady algorytm, ktry jest cakowicie poprawny jest take czciowo poprawny, ale nie kady algorytm, ktry jest czciowo poprawny jest take cakowicie poprawny.

Denicja
Algorytm

Alg

ma (spenia)

wasno stopu

wtedy i tylko wtedy, gdy zatrzymuje si dla

dowolnych danych wejciowych speniajcych warunek pocztkowy

WP .

Wniosek
Aby dowie poprawnoci cakowitej algorytmu wystarczy: udowodni jego poprawno czciow, wykaza wasno stopu algorytmu.

Pawe Rembelski (PJWSTK)

Algorytmy i struktury danych

1 marca 2012

20 / 51

Algorytmy  podstawy

Poprawno algorytmu

Trudnoci
Czy ustalenie wasnoci poprawnoci nawet trywialnego algorytmu iteracyjnego jest zadaniem prostym ... niestety nie! Dla niektrych algorytmw wasno poprawnoci zaley od poprawnoci dotychczas nierozwizanych hipotez.

Przykad. Rozwamy algorytm realizujcy nastpujcy cig operacji:

1 bool Collatz(int n) { | WP : n N 2 int i:=n; 3 4 while (i>1) { 5 if (i mod 2=0) i:=i/2; 6 else i:=3*i+1; 7 } 8 return TRUE; | WK : Collatz (n) = TRUE 9 }

Hipoteza Collatza
Dla dowolnej liczby naturalnej dodatniej n prawd jest, e Collatz (n) = TRUE .

Pawe Rembelski (PJWSTK)

Algorytmy i struktury danych

1 marca 2012

21 / 51

Algorytmy  podstawy

Poprawno algorytmu

Wniosek
Zamy, e hipoteza Collatz'a jest faszywa, wtedy: algorytm Collatz jest czciowo poprawny, algorytm Collatz nie jest cakowicie poprawny (brak wasnoci stopu).

Pawe Rembelski (PJWSTK)

Algorytmy i struktury danych

1 marca 2012

22 / 51

Algorytmy  podstawy

Koszt algorytmu

Denicja
Operacj dominujc
w algorytmie nazywamy t z jego czynnoci skadowych, ktrej wykonanie uwaamy za najbardziej kluczowe z punktu widzenia np. implementacji realizacji w danym rodowisku obliczeniowym.

Pytanie. Ktr z operacji w algorytmie Max powinnimy uzna za dominujc, jeeli


algorytm implementujemy i uruchamiamy na standardowym komputerze klasy PC?

1 int Max(int T[], int n) { 2 int i:=1, max:=T[0]; 3 4 while (i<n) { | operacja porwnania 5 if (max<T[i]) max:=T[i]; | operacja porwnania, operacja przypisania 6 i:=i+1; | operacja przypisania, operacja dodawania 7 } 8 return max; 9 }

Pawe Rembelski (PJWSTK)

Algorytmy i struktury danych

1 marca 2012

23 / 51

Algorytmy  podstawy

Koszt algorytmu

Denicja
Niech

Alg

bdzie algorytmem oraz

algorytmu.

Koszt czasowy

bd ustalonymi danymi wejciowymi dla tego

wykonania algorytm

Alg

dla danych wejciowych

jest to

liczba operacji dominujcych jakie wykonuje rozwaany algorytm na rozwaanych danych wejciowych. Koszt czasowy oznaczamy przez

t (Alg , d ).

Pytanie. Jaki jest koszt czasowy algorytmu Max dla danych wejciowych
gdzie

n = 100? Alg

d = (T , n),

Denicja
Niech bdzie algorytmem oraz algorytmu.

Koszt pamiciowy

bd ustalonymi danymi wejciowymi dla tego

wykonania algorytm

Alg

dla danych wejciowych

jest to

liczba dodatkowych jednostek pamici jakie s niezbdne do wykonania rozwaanego algorytmu na rozwaanych danych wejciowych. Koszt pamiciowy oznaczamy przez

s (Alg , d ).
gdzie

Pytanie. Jaki jest koszt pamiciowy algorytmu Max dla danych wejciowych

n = 100?

d = (T , n), t (d )
i

s (d )

Uwaga! W dalszej czci wykadu bdziemy uywali skrconej notacji zoonoci


jeeli bdzie to jednoznaczne.
Algorytmy i struktury danych 1 marca 2012

Pawe Rembelski (PJWSTK)

24 / 51

Algorytmy  podstawy

Zoono algorytmu

Denicja
Zoono czasowa
algorytmu

Alg

to liczba operacji dominujcych jakie wykonuje

rozwaany algorytm na danych wejciowych rozmiaru tych danych. Zoono czasow oznaczamy przez

n, wyraona T (Alg , n).

jako funkcja rozmiaru

Pytanie. Jaka jest zoono czasowa algorytmu Max? Pytanie. Jakie jest ograniczenie dolne zoonoci czasowej algorytmu Max?

Denicja
Zoono pamiciowa S (Alg , n).
algorytmu

Alg

to liczba dodatkowych jednostek pamici jakie s

niezbdne do wykonania rozwaanego algorytmu na danych wejciowych rozmiaru

n,

wyraona jako funkcja rozmiaru tych danych. Zoono pamiciow oznaczamy przez

Pytanie. Jaka jest zoono pamiciowa algorytmu Max? Pytanie. Jakie jest ograniczenie grne zoonoci pamiciowej algorytmu Max?

S (n )

Uwaga! W dalszej czci wykadu bdziemy uywali skrconej notacji zoonoci


jeeli bdzie to jednoznaczne.

T (n)

Pawe Rembelski (PJWSTK)

Algorytmy i struktury danych

1 marca 2012

25 / 51

Algorytmy  podstawy

Zoono algorytmu

Trudnoci ...
Czy zoono czasow algorytmu mona zawsze oszacowa w sposb dokadny ...

niestety nie! Dla niektrych algorytmw, zoono czasowa jest funkcj nie tylko
rozmiaru danych wejciowych ale i ich postaci.

Przykad. Nieco inny algorytm dla rozwaanego problemu:

1 int ModifiedMax(int T[], int n) { | WP :T 2 3 4 5 6 7 8 9 } int i:=1, max:=T[0];

jest niepustym wektorem

rnych liczb naturalnych,

n N+ , |T | = n

while (i<n) { if (max<T[i]) max:=T[i]; if (T[i] mod 2=1) { T[i]:=T[i]-1; i:=0; } else i:=i+1; } return max; | WK : ModiedMax (T , n) = max , gdzie max
maksymalnym elementem wektora

Pytanie. Jaka jest zoono czasowa algorytmu ModiedMax, jeeli operacj


dominujc jest czynno porwnywania wartoci elementw wektora wejciowego z wartoci zmiennej

max ?

Pawe Rembelski (PJWSTK)

Algorytmy i struktury danych

1 marca 2012

26 / 51

Algorytmy  podstawy

Zoono algorytmu

Denicja
Pesymistyczna zoono czasowa algorytmu Alg , oznaczona przez W (Alg , n) jest rwna W (Alg , n) = max {t (Alg , d ) : d Dn } ,
gdzie

Dn

jest zbiorem wszystkich danych wejciowych rozmiaru

rozwizuje algorytm

Alg .

dla problemu, ktry

Denicja
rednia (oczekiwana) zoono czasowa
rwna algorytmu

Alg ,

oznaczona przez

A (Alg , n)

jest

A (Alg , n) =
d Dn

p (d ) t (Alg , d ) , n
dla problemu, ktry

gdzie

Dn

jest zbiorem wszystkich danych wejciowych rozmiaru

rozwizuje algorytm

Alg ,

p (d )

jest prawdopodobiestwem wystpienia danych

d.

Uwaga! W dalszej czci wykadu bdziemy uywali skrconej notacji zoonoci


i

A (n )

W (n )

jeeli bdzie to jednoznaczne.

Pytanie. Jaka jest rednia i pesymistyczna zoono czasowa algorytmu Max oraz
ModiedMax, jeeli operacj dominujc jest czynno porwnywania wartoci elementw wektora wejciowego z wartoci zmiennej
Pawe Rembelski (PJWSTK)

max ?

Algorytmy i struktury danych

1 marca 2012

27 / 51

Algorytmy  podstawy

Zoono algorytmu

Denicja
Algorytm nazywamy

efektywnym

jeeli jego zoono czasowa i pamiciowa jest co

najwyej wielomianowa wzgldem rozmiaru danych wejciowych.

Przykad. Rozwamy trzy algorytmy


gdzie

Alg1 , Alg2 i Alg3

rozwizujce ten sam problem,

T (Alg1 , n) = lg n, T (Alg2 , n) = n2 , T (Alg3 , n) = 2n . n d


na trzech jednakowych komputerach, ktre dla uproszczenia wykonuj jedn

Uruchamiamy rwnolegle rozwaane algorytm dla identycznych danych wejciowych rozmiaru

operacj dominujc na sekund. Jak dugo bdziemy oczekiwali na wynik oblicze? dla dla dla

n = 8, t (Alg1 , d ) = 3 sek., t (Alg2 , d ) = 64 sek., t (Alg3 , d ) = 256 sek. n = 16, t (Alg1 , d ) = 4 sek., t (Alg2 , d ) = 256 sek., t (Alg3 , d ) 18, 2 godz. n = 32, t (Alg1 , d ) = 5 sek., t (Alg2 , d ) 17, 1 min., t (Alg3 , d ) 136, 2 lat! Alg3
dla danych

Pytanie. Ile lat zajmie wykonania algorytmu

rozmiaru 64?

Pawe Rembelski (PJWSTK)

Algorytmy i struktury danych

1 marca 2012

28 / 51

Algorytmy  podstawy

Optymalno algorytmu

Denicja
problem

T (n) bdzie funkcj zoonoci czasowej algorytmu Alg rozwizujcego pewien P dla danych wejciowych rozmiaru n. Algorytm Alg nazywamy asymptotycznie optymalnym rozwizaniem problemu P jeeli nie istniej algorytm Alg , o pesymistycznej zoonoci czasowej W (Alg , n), rozwizujcy problem P taki, e W (Alg , n) T (n).
Niech

Denicja
Alg P dla danych wejciowych rozmiaru n. Algorytm Alg nazywamy asymptotycznie optymalnym, w przypadku rednim, rozwizaniem problemu P jeeli A (Alg , n) T (n).
Niech bdzie funkcj zoonoci czasowej optymalnego algorytmu rozwizujcego pewien problem

T (n )

Denicja
Niech

Alg P dla danych wejciowych rozmiaru n. Algorytm Alg nazywamy asymptotycznie optymalnym, w przypadku pesymistycznym, rozwizaniem problemu P jeeli W (Alg , n) T (n ).
bdzie funkcj zoonoci czasowej optymalnego algorytmu rozwizujcego pewien problem
Pawe Rembelski (PJWSTK) Algorytmy i struktury danych 1 marca 2012 29 / 51

T (n )

Algorytmy  podstawy

Optymalno algorytmu

Wniosek
Kady algorytm optymalny w przypadku pesymistycznym jest algorytmem optymalnym dla zadanej klasy problemw, ale nie kady algorytm optymalny w przypadku rednim jest algorytmem optymalnym dla zadanej klasy problemw.

Pawe Rembelski (PJWSTK)

Algorytmy i struktury danych

1 marca 2012

30 / 51

Algorytmy iteracyjne  przykad

Problem, struktura i specykacja algorytmu

Algorytmy iteracyjne  przykad


Problem, struktura i specykacja algorytmu

Pawe Rembelski (PJWSTK)

Algorytmy i struktury danych

1 marca 2012

31 / 51

Algorytmy iteracyjne  przykad

Problem, struktura i specykacja algorytmu

Problem
Poda algorytm iteracyjny

Alg (n)

obliczajcy silni liczby naturalnej

n.

Struktura dla algorytmu


Struktura dla algorytmu iteracyjnego Alg:

N, +, , <

Specykacja algorytmu
Specykacj algorytmu Alg stanowi para kocowy s postaci kolejno:

WP , WK

, gdzie warunki pocztkowy i

WP : n N, WK : Alg (n) = n!

Pawe Rembelski (PJWSTK)

Algorytmy i struktury danych

1 marca 2012

32 / 51

Algorytmy iteracyjne  przykad

Algorytm iteracyjny Silnia

Algorytmy iteracyjne  przykad


Algorytm iteracyjny Silnia

Pawe Rembelski (PJWSTK)

Algorytmy i struktury danych

1 marca 2012

33 / 51

Algorytmy iteracyjne  przykad

Algorytm iteracyjny Silnia  implementacja

Rozwizanie problemu  algorytm iteracyjny Silnia:

1 int Silnia(int n) { | WP : n N 2 int i:=0, s:=1; 3 4 while (i<n) { 5 i:=i+1; 6 s:=s*i; 7 } 8 return s; | WK :Silnia (n) = n! 9 }

Pawe Rembelski (PJWSTK)

Algorytmy i struktury danych

1 marca 2012

34 / 51

Algorytmy iteracyjne  przykad

Poprawno czciowa algorytmu

Dowd czciowej poprawnoci algorytmu metod niezmiennikw:

1 int Silnia(int n) { | n N 2 int i:=0, s:=1; | (i = 0 s = 1) (i ! = 1 s = 1) s = i 3 | ustalenie niezmiennika: NZ : s = i ! 4 while (i<n) { | werykacja niezmiennika: s = i ! 5 i:=i+1; | (s = i ! i := i + 1) s = (i 1)! 6 s:=s*i; | odtworzenie niezmiennika: (s = (i 1)! s := s i ) 7 } | (NZ (i

8 return 9 }

< n)) (s = i ! i n) (s = i ! i = n ) s = n ! s; | s = n! Silnia (n) = n!

s i = (i 1)!

= i!

NZ : s

= i!

Wniosek
Algorytm iteracyjny Silnia jest czciowo poprawny wzgldem specykacji

WP , WK
=0

poniewa z warunku pocztkowego n

oraz tu po inicjalizacji zmiennych i

jak i w

kadej iteracji rozwaanej ptli zmienna i inkrementowana jest o warto rwn 1, to ostatecznie
i

= n.

Std warunek i

mona wzmocni do postaci i

= n.

Pawe Rembelski (PJWSTK)

Algorytmy i struktury danych

1 marca 2012

35 / 51

Algorytmy iteracyjne  przykad

Poprawno cakowita algorytmu

Dowd wasnoci stopu algorytmu przez indukcj wzgldem wartoci argumentu

n N:

n = 0 i inicjalizacji zmiennej i := 0, nie jest speniony warunek i < n, std algorytm Silnia zatrzymuje si, zaoenie indukcyjne: dla 0 i < n algorytm Silnia spenia wasno stopu, teza indukcyjna: dla n 1 algorytm Silnia spenia wasno stopu.
baza indukcji: dla
dozoru ptli iteracyjnej

Dowd tezy indukcyjnej


Silnia (n 1) jest skoczone. Dalej z treci i := i + 1 oraz warunku dozoru ptlii < n wynika, e wykonanie algorytmu Silnia (n) jest o jeden krok iteracyjny dusze od wykonania algorytmu Silnia (n 1). Std wykonanie algorytmu Silnia (n) jest skoczone dla dowolnego n 1.
0 Zatem, wykonanie algorytmu ptli iteracyjnej Z zaoenia indukcyjnego algorytm Silnia spenia wasno stopu dla dowolnego

i < n.

Wniosek
Poniewa algorytm iteracyjny Silnia jest czciowo poprawny i spenia wasno stopu, to jest cakowicie poprawny wzgldem specykacji .

n N, Silnia(n) = n!

Pawe Rembelski (PJWSTK)

Algorytmy i struktury danych

1 marca 2012

36 / 51

Algorytmy iteracyjne  przykad

Zoono algorytmu

Zoono czasowa algorytmu


operacja dominujca: mnoenie liczb naturalnych, liczba operacji dominujcych niezbdnych do wykonania algorytmu zaley jedynie do rozmiaru danych wejciowych, nie za od ich postaci, std:

A (n ) = W (n ).

liczba operacji dominujcych niezbdnych do wykonania algorytmu dla wartoci argumentu

n: n 1,

oszacowanie zoonoci czasowej wzgldem wartoci argumentu

T (n) = n 1 = (n),

n:

oszacowanie zoonoci czasowej wzgldem liczby bitw niezbdnych do zapisania wartoci argumentu

= lg (n + 1) n: T (n) = (2 ),

Zoono pamiciowa algorytmu


ilo pamici dodatkowej niezbdnej do wykonania algorytmu dla wartoci argumentu

n:

2 zmienne dodatkowe,

oszacowanie zoonoci czasowej wzgldem wartoci argumentu oszacowanie zoonoci czasowej wzgldem liczby bitw niezbdnych do zapisania wartoci argumentu

n : S (n ) = ( 1),

= lg (n + 1) n : S (n ) = ( 1).
1 marca 2012 37 / 51

Pawe Rembelski (PJWSTK)

Algorytmy i struktury danych

Algorytmy rekurencyjne  przykad

Problem, struktura i specykacja algorytmu

Algorytmy rekurencyjne  przykad


Problem, struktura i specykacja algorytmu

Pawe Rembelski (PJWSTK)

Algorytmy i struktury danych

1 marca 2012

38 / 51

Algorytmy rekurencyjne  przykad

Problem, struktura i specykacja algorytmu

Problem
Poda algorytm rekurencyjny

Alg (n)

obliczajcy silni liczby naturalnej

n.

Struktura dla algorytmu


Struktura dla algorytmu rekurencyjnego Alg:

N, +, , =

Specykacja algorytmu
Specykacj algorytmu Alg stanowi para kocowy s postaci kolejno:

WP , WK

, gdzie warunki pocztkowy i

WP : n N, WK : Alg (n) = n!.

Pawe Rembelski (PJWSTK)

Algorytmy i struktury danych

1 marca 2012

39 / 51

Algorytmy rekurencyjne  przykad

Algorytm rekurencyjny Silnia

Algorytmy rekurencyjne  przykad


Algorytm rekurencyjny Silnia

Pawe Rembelski (PJWSTK)

Algorytmy i struktury danych

1 marca 2012

40 / 51

Algorytmy rekurencyjne  przykad

Algorytm rekurencyjny Silnia  implementacja

Rozwizanie problemu  algorytm rekurencyjny Silnia:

1 int Silnia(int n) { | WP : n N 2 if (n=0) 3 return 1; | WK :Silnia (n) = n! 4 else 5 return Silnia(n-1)*n; | WK :Silnia (n) = n! 6 }

Pawe Rembelski (PJWSTK)

Algorytmy i struktury danych

1 marca 2012

41 / 51

Algorytmy rekurencyjne  przykad

Poprawno czciowa algorytmu

n N:

Dowd czciowej poprawnoci algorytmu przez indukcj wzgldem wartoci argumentu

1 int Silnia(int n) { | WP : n N 2 if (n=0) 3 return 1; | baza indukcji: Silnia(n) = 1, dla n = 0 4 else | zaoenie indukcyjne: Silnia(i 1) = (i 1)!, dla 0 i < n 5 return Silnia(n-1)*n; | teza indukcyjna: Silnia(n) = n!, dla n 1 6 }

Dowd tezy indukcyjnej


W wierszu 5-tym algorytmu mamy indukcyjnego

Silnia (n) := Silnia (n 1) n, std i z zaoenia Silnia (n) := (n 1)! n, zatem Silnia (n) = n!, dla dowolnego n 1. Silnia (n) = n!, dla dowolnego n N, co WK :Silnia (n) = n!. WP , WK

Z bazy indukcji oraz tezy indukcyjnej wynika, e

dowodzi poprawnoci warunku kocowego rozwaanego algorytmu

Wniosek
Algorytm rekurencyjny Silnia jest czciowo poprawny wzgldem specykacji .

Pawe Rembelski (PJWSTK)

Algorytmy i struktury danych

1 marca 2012

42 / 51

Algorytmy rekurencyjne  przykad

Poprawno cakowita algorytmu

Dowd wasnoci stopu algorytmu przez indukcj wzgldem wartoci argumentu

n N:

baza indukcji: dla

n=0

wykonana jest pierwsza cz instrukcji warunkowej, std

algorytm Silnia zatrzymuje si,

zaoenie indukcyjne: dla 0 teza indukcyjna: dla

i <n

algorytm Silnia spenia wasno stopu,

n1

algorytm Silnia spenia wasno stopu.

Dowd tezy indukcyjnej


Z zaoenia indukcyjnego algorytm Silnia spenia wasno stopu dla dowolnego 0

i < n.

algorytmu algorytmu

Silnia (n) := Silnia (n 1) n Silnia (n)

Zatem, wykonanie algorytmu

Silnia (n 1)

jest skoczone. Dalej z treci

wynika, e wykonanie algorytmu

jeden krok rekurencyjny dusze od wykonania algorytmu jest skoczone dla dowolnego

n 1.

Silnia (n 1).

Silnia (n)

jest o

Std wykonanie

Wniosek
Poniewa algorytm rekurencyjny Silnia jest czciowo poprawny i spenia wasno stopu, to jest cakowicie poprawny wzgldem specykacji

n N, Silnia(n) = n!

Pawe Rembelski (PJWSTK)

Algorytmy i struktury danych

1 marca 2012

43 / 51

Algorytmy rekurencyjne  przykad

Zoono algorytmu

Zoono czasowa algorytmu


operacja dominujca: mnoenie liczb naturalnych, liczba operacji dominujcych niezbdnych do wykonania algorytmu zaley jedynie do rozmiaru danych wejciowych, nie za od ich postaci, std:

A (n ) = W (n ).

liczba operacji dominujcych niezbdnych do wykonania algorytmu dla wartoci argumentu

n: n 1,

oszacowanie zoonoci czasowej wzgldem wartoci argumentu

T (n) = n 1 = (n),

n:

oszacowanie zoonoci czasowej wzgldem liczby bitw niezbdnych do zapisania wartoci argumentu

= lg (n + 1) n: T (n) = (2 ),

Zoono pamiciowa algorytmu bez uwzgldnienia kosztw rekursji


ilo pamici dodatkowej niezbdnej do wykonania algorytmu dla wartoci argumentu

n:

brak zmiennych dodatkowych,

oszacowanie zoonoci czasowej wzgldem wartoci argumentu oszacowanie zoonoci czasowej wzgldem liczby bitw niezbdnych do zapisania wartoci argumentu

n : S (n ) = ( 1),

= lg (n + 1) n : S (n ) = ( 1).
1 marca 2012 44 / 51

Pawe Rembelski (PJWSTK)

Algorytmy i struktury danych

Algorytmy rekurencyjne  przykad

Zoono algorytmu

Zoono pamiciowa algorytmu z uwzgldnieniem kosztw rekursji


ilo pamici dodatkowej niezbdnej do wykonania algorytmu dla wartoci argumentu

n:

stos wywoa rekurencyjnych wysokoci

n,

oszacowanie zoonoci czasowej wzgldem wartoci argumentu

S (Silnia, n) = (n),

n:

oszacowanie zoonoci czasowej wzgldem liczby bitw niezbdnych do zapisania wartoci argumentu

= lg (n + 1) n: S (Silnia, n) = (2 ).

Uwaga! W dalszej czci wykadu bdziemy domylnie analizowali zoono algorytmw


rekurencyjnych z uwzgldnieniem kosztw rekursji.

Pawe Rembelski (PJWSTK)

Algorytmy i struktury danych

1 marca 2012

45 / 51

Dodatek A  twierdzenie o rekursji uniwersalnej

Dodatek A  twierdzenie o rekursji uniwersalnej

Pawe Rembelski (PJWSTK)

Algorytmy i struktury danych

1 marca 2012

46 / 51

Dodatek A  twierdzenie o rekursji uniwersalnej

Twierdzenie o rekursji uniwersalnej

Twierdzenie o rekursji uniwersalnej


Niech a 1, b > 1 bd staymi, f : N R+ {0} pewn funkcj i nich T (n) rwnaniem rekurencyjnym zoonoci pewnego algorytmu, postaci T (n) = aT gdzie
n b

n + f (n ) , b

traktujemy jako

n b
logb

, wtedy:
a

jeeli f (n) = O n

dla pewnej staej > 0, to T (n) = nlogb a ,

jeeli f (n) = nlogb a , to T (n) = nlogb a lg n , jeeli f (n) = nlogb a+


n b

dla pewnej staej > 0, to T (n) = (f (n)) ,

pod warunkiem, e af dostatecznie duych n.


Pawe Rembelski (PJWSTK)

cf (n) dla pewnej staej c < 1 i wszystkich


Algorytmy i struktury danych 1 marca 2012 47 / 51

Dodatek A  twierdzenie o rekursji uniwersalnej

Twierdzenie o rekursji uniwersalnej

Przykad. Korzystajc z twierdzenia o rekurencji uniwersalnej oszacuj zoono


nastpujcego algorytmu rekurencyjnego zakadajc, e operacj dominujc jest dodawanie liczb cakowitych:

1 int Run(int int n) { | WP : n N 2 int i, tmp:=0; 3 4 if (n=0) return 0; 5 6 for (i:=0;i<n*n;i:=i+1) tmp:=tmp+i+1; 7 8 return 4*Run(n/2)+2*Run(n/2)+Run(n/2); 9 }
Rwnanie rekurencyjne dominujcej ma posta

T (n )

zoonoci algorytmu

Run (n)

wzgldem przyjtej operacji

T (n) = 3T
Std stae

n
2

+ 2n2 + 2.
uniwersalnej s rwne odpowiednio

a=3

oraz

a i b wystpujce w twierdzeniu o rekursji b = 2. Dalej logb a = log2 3 1, 585.

Pawe Rembelski (PJWSTK)

Algorytmy i struktury danych

1 marca 2012

48 / 51

Dodatek A  twierdzenie o rekursji uniwersalnej

Twierdzenie o rekursji uniwersalnej

Werykacja poprawnoci wariantw twierdzenia, dla

f (n) = 2n2 + 2
std

otrzymujemy:

f (n ) = O n

1,585

dla pewnej staej

> 0,

T (n) = nlog2 3 ,

f (n) = n1,585 , std T (n) = nlog2 3 lg n , 1 f (n) = n1,585+ dla pewnej staej > 0, np. = 16 , std T (n) = (f (n)) n jeeli istnieje staa c < 1 taka, e 3f 2 cf (n) dla dostatecznie duych n. Std 15 dla np. c = 16 otrzymujemy
3 2 12 8

n2
4

+2
48 8 33 8

15 16 15 8 3 8

n2 + 2
15 8

n2 +

n2 +
2

n
Zatem dla

11.

T (n ) =

n N rozwaana nierwno 2 2 2n + 2 = n .

jest prawdziwa gdy

n > 3.

Ostatecznie

Pawe Rembelski (PJWSTK)

Algorytmy i struktury danych

1 marca 2012

49 / 51

Literatura

Literatura
1

T. H. Cormen, C. E. Leiserson, R. L. Rivest, C. Stein, Wprowadzenie do algorytmw, WNT 2004. L. Banachowski, K. Diks, W. Rytter, Algorytmy i struktury danych, WNT 1996. A. V. Aho, J. E. Hopcroft, J. D. Ullman, Algorytmy i struktury danych, Helion 2003. A. Dako, T. L. Lee, G. Mirkowska, P. Rembelski, A. Smyk, M. Sydow, Algorytmy i struktury danych  zadania, PJWSTK 2006. R. Sedgewick, Algorytmy w C++, RM 1999. N. Wirth, Algorytmy + struktury danych = programy, WNT 1999. A. Drozdek, D. L. Simon, Struktury danych w jzyku C, WNT 1996. D. Harel, Rzecz o istocie informatyki  Algorytmika, WNT 2001.
Algorytmy i struktury danych 1 marca 2012 50 / 51

5 6 7 8

Pawe Rembelski (PJWSTK)

Zadania wiczeniowe

Zadania wiczeniowe

Pawe Rembelski (PJWSTK)

Algorytmy i struktury danych

1 marca 2012

51 / 51

Zadania wiczeniowe 1 Uporzdkuj malejco nastpujce funkcje zmiennej 1 2 3 4 2

wzgldem ich rzdw:

f1 (n) = lg n3 , f2 (n) = n lg n!, f3 (n) = n1/3 + n, 4 f1 (n) = n3 lg 3n, f2 (n) = 2lg n , f3 (n) = 2n , 1 f1 (n) = n 2 + lg n, f2 (n) = lg n2 , f3 (n) = 2lg n , f4 (n) = n2 f (n )
,

n +n3

1 2

f1 (n) = n (1 + n)2 , f2 (n) = n3 lg3 n, f3 (n) = nn , f4 (n) = 22n .


s poprawne:

Okrel, ktre z podanych ogranicze funkcji 1

f (n ) =
gdzie

f (n ) = O n 2

lg

n
,

f (n ) =

f (n) = n sin2 (n), f (n) = (n lg n) , f (n) = O nlg 3


gdzie

1 n 1
,

f (n )

f (n ) =
gdzie

f (n ) f (n ) =

gdzie 3

f (n) = lg n n.

= lg n n , n 2lg n , f (n) = (n), n! , f (n) = O n lg n = n2 |sin (n)|, 3 n 2 , f (n ) = O n , f (n ) = 1 n 1 lg 2

f (n ) = n n

Ktre z nastpujcych wasnoci s prawdziwe i dlaczego?

n
1 lg

i =1
2 lg

i i

= (n). =

i =1
4

Oszacuj za pomoc notacji zmiennej :

i uporzdkuj niemalejco, ze wzgldu na rzd wielkoci, nastpujce funkcje Algorytmy i struktury danych 1 marca 2012 51 / 51

Pawe Rembelski (PJWSTK)

Zadania wiczeniowe 1

f1 (n) = lg2 (3n) , f2 (n) = n lg n! + n, f3 (n) = n + n, f4 (n) = 3 n + n lg n, f5 (n) = 3 + 2, n cos2 (n), f6 (n) = n 3 n f1 (n) = n2 + sin2 n 2 , f2 (n) = lg n + n, f3 (n) = 2 + lg n!, f4 (n) = n lg n + 2 n, f5 (n) = nlg 8 + n, f6 (n) = lg lg n2 , 1 f1 (n) = 32n + 3n , f2 (n) = lg n + n 4 , f3 (n) = n3 lg n + n2 |sin (2n)| , f4 (n) = 2n
2lg n + 1 , lg n n2 f1 (n) = n! + n lg n, f2 (n) = 2n3 + 3n , f3 (n) = n lg n! + n2 , f4 (n) = n 3n 4 . 3 |sin (n)| + n, f6 (n) = 3 + 3 2 cos2 (n) + lg (n) , f6 (n) =

+ n2lg n , f5 (n) =

n + 2 n 7 , f (n ) = 5

Ktra z wymienionych wasnoci jest prawdziwa, jeeli wiadomo, e:

g (n) = O (f (n)) i h (n) = O (f (n)), g (n) = (f (n)) i h (n) = (f (n)),


gdzie ( ), ( ), ( ) s funkcjami okrelonymi w zbiorze liczb naturalnych o wartociach w zbiorze liczb rzeczywistych dodatnich: 1 2 3 4 6

f n g n h n

g (n) + h (n) = O (f (n)), g (n) h (n) = (f (n)), g (n) h (n) = O (f (n)), g (n) /h (n) = (f (n)), dla h (n) = 0. Alg Alg x f n n K t

Niech bdzie algorytmem, ktrego zoono wyraa si pewn funkcj ( ), gdzie jest rozmiarem danych wejciowych. Czas wykonania algorytmu dla danych rozmiaru na komputerze wynosi sekund. Ile czasu zajmie wykonanie algorytmu dla danych rozmiaru -krotnie mniejszego na komputerze ? Jaki jest maksymalny rozmiar danych, jakie algorytm mone przetworzy na komputerze w cigu sekund? Oblicz czas, w jakim komputer , -krotnie szybszy od komputera , obliczy rezultat algorytmu dla danych wejciowych rozmiaru ,

Alg

Alg

Pawe Rembelski (PJWSTK)

Algorytmy i struktury danych

1 marca 2012

51 / 51

Zadania wiczeniowe gdzie: 1 2 3 7 Niech

f (n) = lg n, x = 128, t = 7, p = 2, t = 20, p = 8, x = 512, f (n) = n2 , x = 4, t = 10, p = 4, t = 250, p = 5, x = 50, f (n) = 2n , x = 6, t = 64, p = 3, t = 40, p = 4, x = 8. Alg1 , Alg2 i Alg3
bd algorytmami o nastpujcej zoonoci czasowej wzgldem danych rozmiaru

n:

T (Alg1 , n) = (n lg n), A (Alg2 , n) = (n), W (Alg2 , n) = O n2 , A (Alg3 , n) = n , W (Alg3 , n) = (n lg n).


Okrel moliwie dokadnie zoono czasow nastpujcych algorytmw: 1

void Algorytm(int n) { for (i:=0;i<n;i:=i+1) Alg1(n); } void Algorytm(int n) { for (i:=0;i<n;i:=i+1) { Alg2(n); Alg3(n); } } void Algorytm(int n) { for (i:=0;i<n;i:=i+1) Alg1(n); for (i:=0;i<n;i:=i+1) {

Pawe Rembelski (PJWSTK)

Algorytmy i struktury danych

1 marca 2012

51 / 51

Zadania wiczeniowe

}
4

Alg2(n); Alg3(n);

void Algorytm(int n) { for (i:=0;i<n;i:=i+1) { Alg1(n); for (j:=0;j<n;j:=j+1) { Alg2(n); Alg3(n); } } } void Algorytm(int n) { for (i:=0;i<n;i:=i+1) Alg1(n); for (i:=0;i<lg(n);i:=i+1) { Alg2(n); Alg3(n); }

}
6

void Algorytm(int n) { for (i:=0;i<n;i:=i+1) { Alg1(n); for (j:=0;j<n*lg(n);j:=j+1) { Alg2(n); Alg3(n); }


Algorytmy i struktury danych 1 marca 2012 51 / 51

Pawe Rembelski (PJWSTK)

Zadania wiczeniowe

}
8

Dla podanej poniej funkcji Run, warunku pocztkowego N, N uzasadnij, e formua = jest niezmiennikiem ptli w tym algorytmie oraz ustal warunek kocowy. Co jest wynikiem dziaania tej funkcji? Jaka jest jej zoono czasowa wyraona wzgldem wielkoci liczb i ?

s pw

ab

a b

int Run(int a, int b) { | WP : a N, b N int s:=1, p:=a, w:=b; while (w>0) { if (w mod 2=0) { p:=p*p; w:=w/2; } else { s:=s*p; w:=w-1; } } }
9

return s; | WK : ?

Nastpujcy algorytm oblicza kwadrat liczby naturalnej . Udowodnij, e formua 2 1, = 2 1, = 2 jest niezmiennikiem ptli w podanym algorytmie.

int Sqr(int n) { | WP : n N \ {0} int s:=1, i:=1, k:=1; while (i<2n-1) { i:=i+2; s:=s+i; k:=k+1; }
Pawe Rembelski (PJWSTK) Algorytmy i struktury danych 1 marca 2012 51 / 51

Zadania wiczeniowe

}
10

return s; | WK : s = n2

Dla podanej poniej funkcji Horner, warunku pocztkowego kocowego

n N, x

wyka poprawno warunku

j =0

T [j ]x j ,

gdzie

jest

n-elementowym x

wektorem liczb rzeczywistych reprezentujc

wspczynniki pewnego wielomianu zmiennej niezmiennikiem ptli w tym algorytmie).

(podpowied: uzasadnij, e formua

n
=

j =i

T [j ]x (j i )

jest

real Horner(int x, int n, real T[]) { | WP : n N, x N int i:=n; real s:=T[n]; while (i>0) { s:=s*x; s:=s+T[i-1]; i:=i-1; } return s; | WK : s = }
11 Rozwa poniszy algorytm, gdzie wszystkie elementy wektora prawdziwo nastpujcych stwierdze: 1 2 niezmiennikiem ptli zewntrznej jest formua jeeli

n j =0

T [j ]x j

rozmiaru

s parami rne. Oce

T [0]

jest elementem najmniejszym w tablicy

T [k ] > T [k 1] dla wszystkich 0 k < i , T , to po wykonaniu algorytmu take tak


1 marca 2012

jest, 51 / 51

Pawe Rembelski (PJWSTK)

Algorytmy i struktury danych

Zadania wiczeniowe 3 liczba porwna elementw tablicy

T,

jakie wykona algorytm dla

n = 4,

jest rwna 8.

void Run(int n, int T[]) { | WP : n N \ {0} int i, j, min; for (i:=0;i<n-1;i:=i+1) { min:=i; j:=i+1; while (j<=n) { if (T[j]<T[min]) min:=j; j:=j+1; } } Swap(T,i,min);

}
12

Zaproponuj algorytm obliczania wartoci wspczynnika dwumianowego Newtona wartoci parametrw 1 2

n i k: n k
=

n k

, dla dowolnych

korzystajc wprost z denicji korzystajc z trjkta Pascala.

n! k !(nk )!

Porwnaj koszty tych algorytmw. Ustal niezmienniki ptli, tak by umoliwiy uzasadnienie poprawnoci przedstawionych algorytmw. 13 Zaproponuj algorytm obliczania wartoci 1 2 iteracyjnej, rekurencyjnej.

n-tej

liczby Fibonacciego w wersji:

Uzasadnij poprawno i oszacuj zoono rozwizania. Pawe Rembelski (PJWSTK) Algorytmy i struktury danych 1 marca 2012 51 / 51

Zadania wiczeniowe 14 Zaproponuj algorytm iteracyjny dla problemu Wierz z Hanoi i 1 2 3 4 iteracyjnej, rekurencyjnej, iteracyjnej dla

krkw w wersji:

krkw,

rekurencyjnej dla

krkw,

Uzasadnij poprawno i oszacuj zoono rozwizania. 15 Dane s liczby naturalne i , gdzie , > 0. Zaproponuj algorytm obliczania czci cakowitej logarytmu z przy podstawie . Uzasadnij poprawno i oszacuj zoono rozwizania.

n k n k n

n k

16

Dane s liczby naturalne i zapisane w systemie dziesitnym. Zaproponuj algorytm, ktry podaje reprezentacj liczby w systemie o podstawie . Uzasadnij poprawno i oszacuj zoono rozwizania.

17

Dana jest liczba naturalna . Zaproponuj algorytm badania, czy jest to liczba pierwsza. Uzasadnij poprawno i oszacuj zoono rozwizania. Dane s dwie liczby naturalne i reprezentowane przez tablice i zawierajce kolejne cyfry rozwinicia dziesitnego tych liczb. Zaproponuj algorytm realizujcy tzw. mnoenie pisemne tych liczb. Uzasadnij poprawno i oszacuj zoono rozwizania. Dana jest liczba i cig liczb rzeczywistych zapisanych w tablicy . Zaproponuj algorytm, ktry znajduje najduszy podcig rosncy tego cigu. Uzasadnij poprawno i oszacuj zoono rozwizania. Rozwa algorytm

18

a b

A B

19

Tab

20

int Run(int n) { | WP : ? int m:=3, wynik:=0; while (m<n+1) { m:=m*3; wynik:=wynik+1; } return wynik; | WK : ?
Pawe Rembelski (PJWSTK) Algorytmy i struktury danych 1 marca 2012 51 / 51

Zadania wiczeniowe

}
Zaproponuj tak specykacj, wzgldem ktrej algorytm ten byby cakowicie poprawny w strukturze liczb naturalnych. Uzasadnij poprawno algorytmu stosujc metod niezmiennikw. Napisz, jaki problem rozwizuje ten algorytm, tzn. scharakteryzuj zaleno midzy wartoci n, a zmienn wynik. Oszacuj jego koszt ze wzgldu na wybran operacj dominujc. 21 Niech Run bdzie nastpujcym algorytmem

int Run(int x, int y) { | WP : x N, , y N int z:=0; while (y!=0) { if (y mod 2=1) z:=z+x; x:=x*2; y:=y div 2; } } return z; | WK : ?

Podaj niezmiennik ptli while wystpujcej w tym algorytmie wiedzc, e i s liczbami naturalnymi. Podaj warunek kocowy , tak by algorytm Run by poprawny wzgldem specykacji. Warunek powinien opisywa zaleno midzy pocztkowymi wartociami zmiennych , , a wartociami , , po wykonaniu ptli. Uzasadnij poprawno algorytmu Run wzgldem wybranej specykacji. Oszacuj koszt czasowy algorytmu.

WK

x y

x y

WK x y z

22

Niech bdzie macierz kwadratow rzdu . Rozwa poniszy algorytm Run. Zaproponuj specykacj i udowodnij cakowit poprawno tego algorytmu ze wzgldu na podan specykacj. Uzasadnij poprawno i oszacuj zoono rozwizania.

int Run(int M[][], int n) { | WP : ? int i, j; M[0,0]:=1; for (i:=1;i<n;i:=i+1) {


Pawe Rembelski (PJWSTK) Algorytmy i struktury danych 1 marca 2012 51 / 51

Zadania wiczeniowe

} }
23

M[i,0]:=1; M[i,i]:=1; for (j:=1;j<=i;j:=1) M[i,j]:=M[i-1,j-1]+M[i-1,j];

return M[n-1,n-1]; | WK : ?

Dana jest funkcja Run nastpujcej postaci:

// wariant I int RUN(int n) { // WP : n if (n=0) return 1; } return RUN(n-1)+RUN(n-1);

// wariant II int RUN(int n) { // WP : n if (n=0) return 1;

if (n mod 2=0) return RUN(n-1)+RUN(n-1); else return RUN(n-1);

1 2

Podaj oglny wzr (zwart posta) na warto wynikow funkcji Oszacuj za pomoc notacji

Run(n).

zoono czasow i pamiciow rozwaanej funkcji wzgldem:

wartoci zmiennej , liczby bitw niezbdnej do zapisania wartoci zmiennej 3

n.

Zaproponuj funkcj FastRun, ktra daje te same wyniki co funkcja Run, ale ma zoono obliczeniow mniejszego rzdu ni funkcja Run i uywa jedynie operacji arytmetycznych dodawania, odejmowania, mnoenia i dzielenia. Uzasadnij poprawno rozwizania korzystajc z metody niezmiennikw. Algorytmy i struktury danych 1 marca 2012 51 / 51

Pawe Rembelski (PJWSTK)

Zadania wiczeniowe 24 Uzasadnij przez indukcj wzgldem obliczajcego

an ,

gdzie

a, n N+ :

poprawno cakowit algorytmu rekurencyjnego

Pow (a, n)

int POW(int a, int n) { // WP : a, n > if (n=0) return 1; }


25

return a*POW(a,n-1);

Uzasadnij przez indukcj wzgldem poprawno cakowit algorytmu rekurncyjnego wyznaczajcego element minimalny wektora liczb naturalnych dugoci > 0:

Min (T , n)
0

int MIN(int T[], int n) { // WP : T jest wektorem liczb naturalnych dugoci n > int tmp; if (n=0) return T[0]; tmp:=MIN(T,n-1); if (tmp<T[n]) return tmp; else return T[n];

}
26

Korzystajc z twierdzenia o rekurencji uniwersalnej podaj oszacowanie rozwiza nastpujcych rwna rekurencyjnych: 1 2 3 4 5

T (n) = 3T n 3 T (n) = 2T T (n) = 8T n 2 T (n) = 9T n 3 T (n ) = T n 2

+ n3 + n, + n,

1, + n

+ 3 lg n!, + 1.
Algorytmy i struktury danych 1 marca 2012 51 / 51

Pawe Rembelski (PJWSTK)

Zadania wiczeniowe 27 Korzystajc z twierdzenia o rekurencji uniwersalnej oszacuj zoono nastpujcych algorytmw rekurencyjnych, gdzie ( ) jest algorytmem o staej zoonoci czasowej:

Tmp i

int Run(int n) { // WP : n if (n=0) return 1; }


2

return 2*Run(n/2)+4*Run(n/2);

int Run(int n) { // WP : n int i; if (n=0) return 1; for (i:=0;i<n;i:=i+1) Tmp(i); }


3

return n*Run(n/2)+n*Run(n/2);

int Run(int n) { // WP : n int i, j, suma:=0;

if (n=0) return 1; for (i:=0;i<n;i:=i+1) for (j:=0;j<n;j:=j+1) Tmp(i); for (i:=0;i<27;i++) suma:=suma+i*Run(n/3); return suma;
Pawe Rembelski (PJWSTK) Algorytmy i struktury danych 1 marca 2012 51 / 51

Zadania wiczeniowe

Pawe Rembelski (PJWSTK)

Algorytmy i struktury danych

1 marca 2012

51 / 51

You might also like