• Nie Znaleziono Wyników

(4)Tematyka wykładu (cd.) Wyszukiwanie w zbiorze nieuporz ˛adkowanym (haszowanie)

N/A
N/A
Protected

Academic year: 2021

Share "(4)Tematyka wykładu (cd.) Wyszukiwanie w zbiorze nieuporz ˛adkowanym (haszowanie)"

Copied!
756
0
0

Pełen tekst

(1)

Wydział Matematyki i Nauk Informacyjnych Politechnika Warszawska

Algorytmy i struktury danych - wykłady

Anna Maria Radzikowska

(2)

Algorytmy i Struktury Danych

Wykład 1:

Wprowadzenie

dr Anna Maria Radzikowska

Wydział Matematyki i Nauk Informacyjnych Politechnika Warszawska

(3)

Tematyka wykładu

Podstawy analizy poprawno´sci i zło˙zono´sci algorytmów

Metoda niezmienników dowodzenia poprawno´sci programów.

Zło˙zono´s´c czasowa i pami˛eciowa algorytmów.

Metody sortowania danych

Sortowanie tablic (QuickSort, HeapSort, elementarne sortowanie).

Sortowanie plików.

Metody selekcji.

Wyszukiwanie w zbiorze uprz ˛adkowanym Listy.

Drzewa (BST, AVL–drzewa, B–drzewa, drzewa PATRICIA).

(4)

Tematyka wykładu (cd.)

Wyszukiwanie w zbiorze nieuporz ˛adkowanym (haszowanie).

Podstawowe metody teoriografowe.

Reprezentacja grafów.

Przeszukiwanie grafów.

Podstawowe algorytmy teoriografowe.

(5)

Literatura

Lech Banachowski, Krzysztof Diks, Wojciech Rytter (1996). Algorytmy i struktury danych, Wydawnictwo Naukowo–Techniczne, Warszawa.

Alfred V. Aho, John E. Hopcroft, Jeffrey D. Ullman (2003).

Projektowanie i analiza algorytmów, HELION.

Alfred V. Aho, John E. Hopcroft, Jeffrey D. Ullman (2003). Algorytmy i struktury danych, HELION.

Thomas H. Cormen, Charles E. Leiserson, Ronald L. Rivest (1996).

Wprowadzenie do algorytmów i struktur danych, Wydawnictwo Naukowo–Techniczne, Warszawa.

(6)

Literatura (cd.)

Lech Banachowski, Antoni Kreczmar (1982). Elementy analizy algorytmów, Wydawnictwo Naukowo–Techniczne, Warszawa.

Lech Banachowski, Antoni Kreczmar, Wojciech Rytter (1987). Analiza algorytmów i struktur danych, Wydawnictwo Naukowo–Techniczne, Warszawa.

Niklaus Wirth (1980). Algorytmy + struktury danych = programy, Wydawnictwo Naukowo–Techniczne, Warszawa.

Robert Sedgewick (1999). Algorytmy w C++, Oficyna Wydawnicza READ ME, Warszawa.

(7)

Poj˛ecie algorytmu

Definicja 1.1 Algorytmem nazywamy abstrakcyjny opis działa´n na pewnych obiektach prowadz ˛acy do rozwi ˛azania okre´slonego problemu.

Problem taki (zestaw zada´n, zwanych jego instancjami) nazywamy problemem algorytmicznym.

Przykładowo:

porz ˛adkowanie ci ˛agów liczbowych.

mno˙zenie macierzy

wyszukiwanie okre´slonych elementów w zbiorze.

(8)

Klasy problemów algorytmicznych

Wyró˙zniamy 3 podstawowe klasy problemów algorytmicznych:

algorytmicznie rozwi ˛azywalne — istnieje algorytm daj ˛acy poprawny wynik dla ka˙zdej instancji problemu.

Przykładowo: mno˙zenie macierzy.

algorytmicznie cz˛e´sciowo rozwi ˛azywalne — istnieje algorytm, który dla ka˙zdej instancji problemu daje albo poprawny wynik albo nie ko´nczy oblicze´n.

Przykładowo: problem spełnialno´sci formuł klasycznej logiki 1–szego rz˛edu.

algorytmicznie nierozwi ˛azywalne — wpp.

Przykładowo: problem stopu algorytmów.

(9)

Syntaktyka i semantyka

Syntaktyka — dziedzina bada´n lingwistycznych zajmuj ˛aca si˛e form ˛a, postaci ˛a, strukturami wyra˙ze´n j˛ezykowych.

Semantyka – dziedzina bada´n lingwistycznych zajmuj ˛aca si˛e znaczeniem wyra˙ze´n j˛ezykowych.

Podstawowe typy semantyk:

semantyka operacyjna — opisuje znaczenie wyra˙ze´n j˛ezyka przy

pomocy działa´n okre´slonych w innym j˛ezyku (w informatyce: operacji wykonywanych przez pewien abstrakcyjny automat).

semantyka denotacyjna — opisuje znaczenie wyra˙ze´n j˛ezyka przypisuj ˛ac im pewne obiekty matematyczne.

semantyka aksjomatyczna — opisuje znaczenie wyra˙ze´n j˛ezyka przy pomocy pewnej logiki.

(10)

Struktury danych

Struktur ˛a danych nazywamy reprezentacj˛e zbioru obiektów (danych) o okre´slonej syntaktyce, skojarzon ˛a ze zbiorem pewnych działa´n na tych obiektach.

Z kolei algorytmy działaj ˛a na obiektach przyjmuj ˛acych form˛e struktur danych.

Zatem poj˛ecie struktury danych jest nierozerwalnie zwi ˛azane z poj˛eciem algorytmu.

(11)

Analiza poprawno´sci algorytmów

(12)

Podstawy metody niezmienników

Definicja 1.2 Dziedzin ˛a algorytmiczn ˛a nazywamy układ DAL = (U, f1, . . . , fn, r1, . . . , rm), gdzie

U 6= ∅ jest zbiorem obiektów

fi : Uki → U , i = 1, . . . , n, jest symbolem funkcyjnym, ki nazywamy arno´sci ˛a (liczb ˛a argumentów) symbolu fi; w ogólno´sci fi jest symbolem funkcji cz˛e´sciowej

rj ⊆ Ukj, j = 1, . . . , m, jest symbolem relacyjnym.

Przykłady:

(Z, +, −, ∗, div, mod, =, <)

(R, +, −.∗, /, ln, exp, sin, cos, arc tg, <).

(B, ¬, ∧, ∨, →, ↔).

(AN, =, <).

(13)

Dziedziny algorytmiczne

Elementarne dziedziny algorytmiczne:

liczby całkowite : int liczby rzeczywiste : real warto´sci logiczne : Bool

symbole : char

napisy : string

wska´zniki : ↑ D (D – pewna dziedzina algorytmiczna).

(14)

Dziedziny algorytmiczne (cd.)

Zło˙zone dziedziny algorytmiczne:

A = A1 × A2 × . . . × Ak

gdzie Ai, i = 1, . . . , k, jest dziedzin ˛a algorytmiczn ˛a. Obiekty tych dziedzin nazywamy rekordami i zapisujemy:

struct A = record

pole1 : A1 . . .

polek : Ak end

(15)

Termy

Definicja 1.3 Termami nazywamy wyra˙zenia spełniaj ˛ace nast˛epuj ˛ace warunki:

ka˙zda stała (element dziedziny algorytmicznej U ) i ka˙zda zmienna typu U jest termem

je´sli f jest symbolem funkcji k–argumentowej i t1, . . . , tn s ˛a termami, to f (t1, . . . , tn) jest termem.

Termy w dziedzinie liczb (całkowitych, rzeczywistych) nazywamy wyra˙zeniami arytmetycznymi.

Termy w dziedzinie (B, ¬, ∧, ∨, →, ↔) nazywamy wyra˙zeniami logicznymi.

(16)

Termy (cd.)

Przykłady:

+(x, ∗(2, y)) (tj. x + 2 ∗ y) jest termem

x ∨ (2 < y) jest termem (x jest typu logicznego, y typu liczbowego)

1

2 + 14 + 18 + . . . nie jest termem.

(17)

Wyra˙zenia logiczne

Wyra˙zeniami logicznymi jest najmniejszy zbiór napisów spełniaj ˛acy warunki:

ka˙zda stała logiczna (true, f alse) jest wyra˙zeniem logicznym ka˙zda zmienna logiczna jest wyra˙zeniem logicznym

je´sli t1, . . . ,tn s ˛a termami i r jest symbolem n–argumentowej relacji, to r(t1, . . . , tn) jest wyra˙zeniem logicznym

je´sli α i β s ˛a wyra˙zeniami logicznymi, to ¬α, α ∧ β, α ∨ β, α → β, α ≡ β s ˛a wyra˙zeniami logicznymi.

(18)

Warto´sciowanie termów

Definicja 1.4

Niech (U, f1, . . . , fn, r1, . . . , rm) b˛edzie dziedzin ˛a algorytmiczn ˛a.

Warto´sciowaniem termów w tej dziedzinie nazywamy funkcj˛e val : T erms(U ) → U ∪ {⊥} okre´slon ˛a nast˛epuj ˛aco:

val(u) = u dla ka˙zdego u ∈ U Niech x b˛edzie zmienn ˛a typu U . val(x) =

ostatnio nadana warto´s´c zmiennej x

⊥, je´sli nie nadano warto´sci x

je´sli t1, . . . , tn s ˛a termami, f jest symbolem n–argumentowej funkcji F oraz val(ti) 6= ⊥, i = 1, . . . , n, to

val(f (t1, . . . , tn)) = F (val(t1), . . . , val(tn)), o ile warto´s´c funkcji F dla (val(t1), . . . , val(tn)) jest okre´slona

val(f (t1, . . . , tn)) = ⊥ wpp.

(19)

Warto´sciowanie wyra˙ze ´n logicznych

warto´sciowanie stałych i zmiennych logicznych okre´slone jest tak jak w przypadku termów

je´sli r jest symbolem n–argumentowej relacji R, t1,. . . ,tn s ˛a termami oraz val(ti) 6= ⊥, i = 1, . . . , n, to

val(r(t1, . . . , tn)) =

true je´sli (val(t1), . . . , val(tn)) ∈ R f alse wpp

warto´sci logiczne negacji, koniunkcji, dysjunkcji, implikacji i równowa˙zno´sci s ˛a okre´slone według reguł rachunku logicznego.

(20)

Instrukcje

Definicja 1.5

Instrukcj ˛a jest napis postaci:

Napis pusty (instrukcja pusta)

Niech x b˛edzie zmienn ˛a typu U i niech t ∈ T erms(U ). Instrukcj ˛a przypisania jest wyra˙zenie x := t

Je´sli I1, I2 s ˛a instrukcjami, to I1; I2 jest instrukcj ˛a zwan ˛a instrukcj ˛a zło˙zon ˛a

Je´sli α jest wyra˙zeniem logicznym i I1, I2 s ˛a instrukcjami, to

if α then I1 else I2 fi jest instrukcj ˛a zwan ˛a instrukcj ˛a warunkow ˛a

Je´sli α jest wyra˙zeniem logicznym i I jest instrukcj ˛a, to while α do I od jest instrukcja zwan ˛a instrukcj ˛a iteracyjn ˛a.

(21)

Poprawno´s´c algorytmów

(22)

Obliczenie instrukcji

Ka˙zda instrukcja (poza instrukcj ˛a pust ˛a) zmienia warto´sciowanie zmiennych (stan algorytmu). Ci ˛ag warto´sciowa´n obliczanych w trakcie realizacji instrukcji nazywamy obliczeniem instrukcji. Mog ˛a zaj´s´c 3 przypadki:

obliczenie dochodzi do punktu ko´ncowego – jest ono sko´nczone i warto´sciowanie ko´ncowe jest okre´slone

obliczenie jest sko´nczone, ale nie dochodzi do punkty ko´ncowego (tj.

zostaje przerwane, np. wskutek wykonania niedozwolonej operacji) – warto´sciowanie zmiennych NIE jest okre´slone

obliczenie jest niesko´nczone – warto´sciowania zmiennych nie s ˛a okre´slone.

(23)

Obliczenie algorytmu (cd.)

Algorytmem jest ci ˛ag instrukcji.

Definicja 1.6

Obliczeniem algorytmu nazywamy ci ˛ag

(ei0, vi0), (ei1, vi1), . . . , (eik, vik), . . . gdzie

eij s ˛a etykietami kolejno wykonywanych instrukcji ei0 jest etykiet ˛a instrukcji pocz ˛atkowej

eij, eij+1 s ˛a etykietami kolejno wykonywanych instrukcji

vij jest warto´sciowaniem zmiennych PRZED wykonaniem instrukcji o etykiecie eij.

(24)

Niezmienniki

Z ka˙zd ˛a instrukcj ˛a I zwi ˛azana jest para (α, β) warunków logicznych zwanych odpowiednio warunkiem pocz ˛atkowym (przesłank ˛a) i warunkiem ko ´ncowym (wnioskiem) instrukcji.

{α} I {β}

α okre´sla warunek nało˙zony na dane wej´sciowe instrukcji I, za´s β – warunek nało˙zony na wynik I.

Definicja 1.7

Warunek γ nazywamy niezmiennikiem instrukcji I wtt gdy γ zachodzi PRZED i PO wykonanie I dla ka˙zdego obliczenia tej instrukcji.

Innymi słowy, instrukcja nie zmienia warunku γ (jest on niezmienniczy wzgl˛edem I).

(25)

Cz˛e´sciowa poprawno´s´c

Definicja 1.8

Algorytm nazywamy cz˛e´sciowo poprawnym wzgl˛edem warunku

pocz ˛atkowego α i warunku ko ´ncowego β wtt gdy dla ka˙zdych danych

pocz ˛atkowych spełniaj ˛acych warunek α, je´sli obliczenie algorytmu dochodzi do punktu ko´ncowego, to warto´sciowanie ko´ncowe spełnia warunek β.

Uwagi:

Ka˙zdy algorytm A NIE JEST cz˛e´sciowo poprawny wzgl˛edem warunków (true, f alse) i ka˙zdy JEST cz˛e´sciowo poprawny wzgl˛edem

(f alse, true).

Czy algorytm p˛etl ˛acy si˛e jest cz˛e´sciowo poprawny wzgl˛edem zadanych asercji α i β?

Odpowied´z: TAK.

(26)

Własno´s´c stopu i okre´slono´s´c oblicze ´n

Definicja 1.9

Algorytm ma własno´s´c stopu wzgl˛edem warunku pocz ˛atkowego α wtt gdy dla ka˙zdych danych pocz ˛atkowych spełniaj ˛acych α obliczenie algorytmu jest

sko´nczone.

Definicja 1.10

Algorytm ma własno´s´c okre´slono´sci oblicze ´n wzgl˛edem warunku

pocz ˛atkowego α wtt gdy dla ka˙zdych danych pocz ˛atkowych spełniaj ˛acych α obliczenie algorytmu nie jest przerwane.

(27)

Semantyczna poprawno´s´c

Definicja 1.11

Algorytm A nazywamy semantycznie poprawnym wzgl˛edem warunku pocz ˛atkowego α i warunku ko ´ncowego β wtt gdy dla ka˙zdych danych wej´sciowych spełniaj ˛acych α obliczenie algorytmu dochodzi do punktu ko´ncowego i ko´ncowe warto´sciowanie zmiennych spełnia warunek β.

Synonimy:

algorytm semantycznie poprawny, algorytm poprawny, algorytm zgodny ze specyfikacj ˛a.

Algorytm poprawny wzgl˛edem w.p. α i w.k. β to algorytm:

cz˛e´sciowo poprawny wzgl˛edem w.p. α i w.k. β

maj ˛acy własno´s´c okre´slono´sci oblicze´n wzgl˛edem w.p. α maj ˛acy własno´s´c stopu wzgl˛edem w.p. α.

(28)

Metoda niezmienników

Metoda niezmienników Naura–Floyda dowodzenia cz˛e´sciowej poprawno´sci programów i okre´slono´sci ich oblicze´n polega na:

wyró˙znieniu w algorytmie pewnych miejsc

zwi ˛azanie z nimi warunków opisuj ˛acych zale˙zno´sci mi˛edzy warto´sciowaniami zmiennych

udowodnieniu spełnialno´sci tych warunków dla ka˙zdego obliczenia algorytmu, dla którego spełniony jest warunek pocz ˛atkowy α.

Uwagi:

Własno´s´c stopu dowodzimy oddzielnie.

Bardzo istotny jest wybór miejsc w algorytmie. W szczególno´sci wa˙znym jest ustalenie niezmienników p˛etli. W dowodach stosujemy zasad˛e

indukcji matematycznej.

(29)

Schemat post˛epowania

begin

{α}

E0: I1;

E1: while ϕ do I2 od; {γ}

E2: {β}

end;

Zakładamy α i konstruujemy warunek γ.

Rozwa˙zamy E0 → E1: po wykonaniu I1 dowodzimy, ˙ze γ zachodzi (zachodzi przed 1–szym obrotem p˛etli).

Rozwa˙zamy E1 → E1: zakładamy γ i ϕ; dowodzimy, ˙ze γ zachodzi po wykonaniu I2.

Rozwa˙zamy E1 → E2: z γ i ¬ϕ dowodzimy β.

(30)

Przykład

Udowodni´c cz˛e´sciow ˛a poprawno´s´c nast˛epuj ˛acego algorytmu:

begin

{α : x ≥ 0 ∧ y > 0}

E0: z := 0; u := x;

E1: while u > 0 do z := z + y;

u := u − 1;

od;

E2: {β : z = x ∗ y}

end;

Dowód:

Załó˙zmy, ˙ze dane wej´sciowe (zmienne x i y) spełniaj ˛a α.

Wyznaczmy niezmiennik p˛etli: {γ : x ∗ y = z + u ∗ y ∧ u ≥ 0}.

E0 → E1: Teraz z = 0 i u = x. Zatem z + u ∗ y = 0 + x ∗ y = x ∗ y. Z α, x ≥ 0, wi˛ec u ≥ 0. Wobec tego γ spełniony przed wej´sciem do p˛etli.

(31)

Przykład (cd.)

begin

{α : x ≥ 0 ∧ y ≥ 0}

E0: z := 0; u := x;

E1: while u > 0 do {γ : x ∗ y = z + u ∗ y ∧ u ≥ 0}

z := z + y;

u := u − 1;

od;

E2: {β : z = x ∗ y}

end;

E1 → E1: Załó˙zmy, ˙ze (Z.1) γ(z, u)

(Z.2) u > 0 (“wchodzimy” do p˛etli).

Poka˙zemy, ˙ze (T) γ(z, u).

(32)

Przykład (cd.)

begin

{α : x ≥ 0 ∧ y ∧ 0}

E0: z := 0; u := x;

E1: while u > 0 do {γ : x ∗ y = z + u ∗ y ∧ u ≥ 0}

z := z + y;

u := u − 1;

od;

E2: {β : z = x ∗ y}

end;

Po wykonaniu instrukcji p˛etli mamy z = z + y i u = u − 1. Teraz z + u ∗ y = (z + y) + (u − 1) ∗ y = z + u ∗ y z γ

= x ∗ y.

Z (Z.2), u > 0, wi˛ec u − 1 ≥ 0, zatem u ≥ 0.

Wobec tego γ(z, u) zachodzi.

Na mocy zasady indukcji matematycznej wnioskujemy, ˙ze γ jest niezmiennikiem p˛etli.

(33)

Przykład (cd.)

begin

{α : x ≥ 0 ∧ y ∧ 0}

E0: z := 0; u := x;

E1: while u > 0 do {γ : x ∗ y = z + u ∗ y ∧ u ≥ 0}

z := z + y;

u := u − 1;

od;

E2: {β : z = x ∗ y}

end;

E1 → E2: Teraz γ zachodzi oraz u ≤ 0 (bo “wychodzimy” z p˛etli). Warunki u ≥ 0 (z γ) i u ≤ 0 daj ˛a u = 0.

Z γ otrzymujemy x ∗ y = z + u ∗ y = z + 0 ∗ y = z. Zatem β zachodzi.

(34)

Algorytmy i Struktury Danych

Wykład 2:

Analiza algorytmów (cd.)

dr Anna Maria Radzikowska

Wydział Matematyki i Nauk Informacyjnych Politechnika Warszawska

(35)

Analiza poprawno´sci algorytmów – cd.

(36)

Własno´s´c stopu algorytmów

Przypomnienie:

Algorytm ma własno´s´c stopu wzgl˛edem warunku pocz ˛atkowego α wtt gdy dla ka˙zdych danych pocz ˛atkowych spełniaj ˛acych α jego obliczenie dochodzi do punktu ko´ncowego.

Obliczenie niesko´nczone mo˙ze wyst ˛api´c w trakcie realizacji instrukcji iteracyjnej lub realizacji rekursji.

Własno´s´c stopu dowodzimy stosuj ˛ac metod˛e niezmienników.

Najpopularniejsze metody:

Metoda liczników iteracji (tak˙ze: uogólniona metoda liczników).

Metod˛e malej ˛acych warto´sci.

(37)

Metoda liczników iteracji

Rozwa˙zmy algorytm A:

begin

while ϕ do I

od;

end;

Idea metody:

Przy pomocy nowej zmiennej całkowitej l zliczamy liczb˛e wykonanych iteracji. Wykazujemy, ˙ze ilo´s´c obrotów p˛etli jest

sko´nczona, tj. warto´s´c zmiennej l jest ograniczona przez wyra˙zenie arytmetyczne o warto´sciach dodatnich i nie ulegaj ˛ace zmianie przy ka˙zdym obrocie p˛etli.

(38)

Metoda liczników iteracji (cd.)

begin

while ϕ do I

od;

end;

Metoda post˛epowania:

Wprowadzamy now ˛a, nie wyst˛epuj ˛ac ˛a w algorytmie, zmienn ˛a całkowit ˛a l (licznik) i przy ka˙zdym obrocie p˛etli zwi˛ekszamy l o 1.

Wyznaczamy wyra˙zenie arytmetyczne τ , którego warto´s´c nie zmienia si˛e w trakcie obrotów p˛etli.

Wykazujemy, ˙ze warunek l ≤ τ jest niezmiennikiem p˛etli.

(39)

Metoda liczników iteracji (cd.)

Algorytm A:

begin {α}

l := 0;

while ϕ do {γ ∧ (l ≤ τ )}

I;

l := l + 1;

od;

end;

Twierdzenie 2.1 (kryterium liczników) Je˙zeli

1. warunek γ ∧ (l ≤ τ ) jest niezmienikiem p˛etli w A wzgl˛edem warunku pocz ˛atkowego α,

2. instrukcja I ma własno´s´c stopu wzgl˛edem warunku γ ∧ ϕ,

to algorytmy A i A maj ˛a własno´s´c stopu wzgl˛edem warunku pocz ˛atkowego α.

(40)

Przykład 2.1

begin

{α : x ≥ 0 ∧ y > 0}

E0: q := 0; r := x;

E1: while r ≥ y do {γ : (x = q ∗ y + r) ∧ (r ≥ 0)}

q := q + 1;

r := r − y od;

E2: {β : (x = q ∗ y + r) ∧ (0 ≤ r < y)}

end;

Zmienn ˛a q przyjmujemy za licznik iteracji. Ponadto, niech τ = xy. Łatwo sprawdzi´c, ˙ze γ jest niezmiennikiem p˛etli. Poka˙zemy, ˙ze

: (l ≤ τ )}

te˙z jest niezmiennikiem p˛etli.

(41)

Przykład 2.1 (cd.)

begin

{α : x ≥ 0 ∧ y > 0}

E0: q := 0; r := x;

E1: while r ≥ y do : q ≤ xy} q := q + 1;

r := r − y od;

E2: {β : (x = q ∗ y + r) ∧ (0 ≤ r < y)}

end;

E0 → E1: Teraz q = 0 i r = x. Z α mamy xy ≥ 0. Zatem q = 0 ≤ xy.

(42)

Przykład 2.1 (cd.)

begin

{α : x ≥ 0 ∧ y > 0}

E0: q := 0; r := x;

E1: while r ≥ y do : q ≤ xy} q := q + 1;

r := r − y od;

E2: {β : (x = q ∗ y + r) ∧ (0 ≤ r < y)}

end;

E1 → E1: Załó˙zmy:

(Z.1) γ(q) (Z.2) r ≥ y.

Wyka˙zemy:

(T) γ(q).

(43)

Przykład 2.1 (cd.)

begin

{α : x ≥ 0 ∧ y > 0}

E0: q := 0; r := x;

E1: while r ≥ y do : q ≤ xy} q := q + 1;

r := r − y od;

E2: {β : (x = q ∗ y + r) ∧ (0 ≤ r < y)}

end;

Po wykonaniu instrukcji p˛etli i mamy q = q + 1 i r = r − y. Zmienne x i y nie zmieniaj ˛a si˛e w p˛etli. Z γ, x = q ∗ y + r, wi˛ec q = xy ry, co wobec r ≥ 0 (z γ) daje q xy. Tym samym q ≤ xy jest niezmiennikiem p˛etli.

Na mocy kryterium liczników algorytm ma własno´s´c stopu.

(44)

Uogólniona metoda liczników

Algorytm A:

begin

while ϕ do I od end;

Uogólnienie:

Ustalamy wyra˙zenie w o warto´sciach całkowitych, którego warto´s´c ro´snie przy ka˙zdym obrocie p˛etli (rosn ˛acy ci ˛ag warto´sciowa´n).

Ustalamy wyra˙zenie arytmetyczne τ , którego warto´s´c nie zmienia si˛e przy

˙zadnym obrocie p˛etli.

Udowadniamy, ˙ze (w > w) ∧ (w ≤ τ ) jest niezmiennikiem p˛etli (tu: w to nowa warto´s´c wyra˙zenia w po obrocie p˛etli).

(45)

Uogólniona metoda liczników (cd.)

A:

begin

while ϕ do {γ}

I od end;

A′′:

begin

t := w − 1;

while ϕ do {γ}

t := w;

I od end;

Twierdzenie 2.2 (uogólnione kryterium liczników) Je´sli

1. warunek γ ∧ (t < w) ∧ (w ≤ τ ) jest niezmiennikiem p˛etli w A′′

wzgl˛edem warunku α,

2. algorytm I ma własno´s´c stopu wzgl˛edem warunku γ ∧ ϕ,

to oba algorytmy A i A′′ maj ˛a własno´s´c stopu wzgl˛edem warunku α.

(46)

Metoda malej ˛acych warto´sci

A :

begin {α}

while ϕ do {γ}

I od;

end;

Metoda dualna wobec uogólnionego kryterium liczników:

Ustalamy wyra˙zenie arytmetyczne w o warto´sciach całkowitych, którego warto´s´c maleje przy ka˙zdym obrocie p˛etli.

Ustalamy wyra˙zenie arytmetyczne τ , którego warto´s´c nie zmienia si˛e przy ka˙zdym obrocie p˛etli.

Udowadniamy, ˙ze warunek (w < w) ∧ (w ≥ τ ) jest niezmienniczy w p˛etli.

(47)

Metoda malej ˛acych warto´sci (cd.)

A :

begin {α}

while ϕ do {γ}

I od end;

A′′′ :

begin {α}

t := w + 1;

while ϕ do {γ}

t := w;

I od end;

Twierdzenie 2.3 (kryterium malej ˛acych warto´sci) Je´sli

1. warunek γ ∧ (t > w) ∧ (w ≥ τ ) jest niezmiennikiem p˛etli przy warunku pocz ˛atkowym α w algorytmie A′′′

2. algorytm I ma własno´s´c stopu przy warunku γ ∧ ϕ, to oba algorytmy A i A′′′ maj ˛a własno´s´c stopu wzgl˛edem α.

(48)

Przykład 2.1 (cd.)

begin

{α : x ≥ 0 ∧ y > 0}

E0: q := 0; r := x; w := r + y;

E1: while r ≥ y do {γ : (x = q ∗ y + r) ∧ (0 ≤ r < y)}

w := r;

q := q + 1;

r := r − y od;

E2: {β : (x = q ∗ y + r) ∧ (0 ≤ r < y)}

end;

Jako warto´s´c malej ˛ac ˛a przyjmujemy warto´sci zmiennej r. Udowodnimy, ˙ze γ : (w > r) jest niezmiennikiem p˛etli.

(49)

Przykład 2.1 (cd.)

begin

{α : x ≥ 0 ∧ y > 0}

E0: q := 0; r := x; w := r + y;

E1: while r ≥ y do {γ : (x = q ∗ y + r) ∧ (0 ≤ r < y)}

w := r;

q := q + 1;

r := r − y od;

E2: {β : (x = q ∗ y + r) ∧ (0 ≤ r < y)}

end;

E0 → E1: Z α, y > 0, wi˛ec w = r + y > r. Zatem γ zachodzi.

(50)

Przykład 2.1 (cd.)

begin

{α : x ≥ 0 ∧ y > 0}

E0: q := 0; r := x; w := r + y;

E1: while r ≥ y do {γ : (x = q ∗ y + r) ∧ (0 ≤ r < y)}

w := r;

q := q + 1;

r := r − y od;

E2: {β : (x = q ∗ y + r) ∧ (0 ≤ r < y)}

end;

E1 → E1: Załó˙zmy, ˙ze (Z.1) γ(r)

(Z.2) r ≥ y.

Wyka˙zemy, ˙ze (T) γ(r).

(51)

Przykład 2.1 (cd.)

begin

{α : x ≥ 0 ∧ y > 0}

E0: q := 0; r := x; w := r + y;

E1: while r ≥ y do {γ : (x = q ∗ y + r) ∧ (0 ≤ r < y)}

w := r;

q := q + 1;

r := r − y od;

E2: {β : (x = q ∗ y + r) ∧ (0 ≤ r < y)}

end;

Z (Z.2), w = r i r = r − y. Poniewa˙z y > 0 (z α), wi˛ec r < r = w. Zatem γ(q) zachodzi.

Pokazali´smy, ˙ze γ jest niezmiennikiem p˛etli. Na mocy kryterium malej ˛acych warto´sci algorytm ma własno´s´c stopu.

(52)

Zło˙zono´s´c algorytmów

(53)

Poj˛ecia pomocnicze

Definicja 2.1

Niech X 6= ∅ oraz niech f, g : X → R. Mówimy, ˙ze f jest co najwy˙zej rz˛edu g, ozn. f = O(g), wtt gdy

(∃c > 0) |f (x)| ≤ c · |g(x)|

dla prawie wszystkich x ∈ X.

co najmniej rz˛edu g, ozn. f = Ω(g), wtt gdy (∃c > 0) |f (x)| ≥ c · |g(x)|

dla prawie wszystkich x ∈ X

dokładnie rz˛edu g, ozn. f = Θ(g), wtt gdy

(∃c1, c2 > 0) c1 · |g(x)| ≤ |f (x)| ≤ c2 · |g(x)|

dla prawie wszystkich x ∈ X.

(54)

Poj˛ecia podstawowe (cd.)

Twierdzenie 2.4.

Niech f, g, h : X → R.

Je´sli f = O(g) i g = O(h), to f = O(h) Je´sli f = Θ(g) i g = Θ(h), to f = Θ(h) Je´sli f = O(g) i g = O(f ), to f = Θ(g) Je´sli f = Θ(g), to g = Θ(f ).

Przykład 2.2

f (n) = n·log n + n +

n, n ∈ N.

f = Θ(n·log n).

(55)

Efektywno´s´c algorytmów

Rozwa˙za´c b˛edziemy teraz algorytm A o zbiorze danych wej´sciowych D i własno´sci stopu dla wszystkich d ∈ D.

Efektywno´s´c A:

czasowa : mierzona liczb ˛a wykonanych operacji przez algorytm A dla danych d ∈ D.

pami˛eciowa : mierzona liczb ˛a komórek pami˛eci potrzebnych do realizacji algorytmu dla danych d ∈ D.

Dla ró˙znych danych d efektywno´s´c A jest zwykle ró˙zna. Rozwa˙zane s ˛a przypadki

najgorszy przeci˛etny najlepszy.

(56)

Operacje jednostkowe

Efektywno´s´c czasow ˛a algorytmów b˛edziemy mierzy´c liczb ˛a wykonanych operacji elementarnych. Operacj ˛a elementarn ˛a jest:

wykonanie operatora artymetycznego, logicznego, relacyjnego nadanie warto´sci zmiennej

obliczanie warto´sci zmiennej indeksowanej, wskazywanej, atrybutu rekordu

przekazanie parametru do podprogramu inicjalizacja wywołania podprogramu wykonanie instrukcji wej´scia/wyj´scia.

(57)

Pełna funkcje kosztu

Definicja 2.2

Pełn ˛a funkcj ˛a kosztu algorytmu A nazywamy funkcj˛e t : D → N, gdzie t(d) jest liczb ˛a wszystkich operacji jednostkowych wykonanych przez algorytm A dla danych d.

Zwykle bardzo trudno (je´sli w ogóle) jest wyznaczy´c pełn ˛a funkcj˛e kosztu.

Zatem w´sród danych wej´sciowych wyró˙zniamy te, które maj ˛a istotny wpływ na koszt algorytmu.

(58)

Wymiar danych

Zwykle D = D1 × D2 × . . . × Dk. Wymiarem danych jest funkcja

| · | : D → W , gdzie W = Di1 × . . . × Dik. Przykład 2.2

Danymi algorytmu mno˙zenia macierzy An×m i Bm×k jest d = (A, B, n, m, k). Wtedy |d| = (n, m, k).

Danymi algorytmu porz ˛adkowania ci ˛agu n–elementowego s ˛a d = (A, n).

Wtedy |d| = n.

(59)

Funkcja kosztu

Definicja 2.3.

Funkcj ˛a kosztu algorytmu nazywamy funkcj˛e T : W → N okre´slon ˛a nast˛epuj ˛aco:

T (w) = sup{t(d) : d ∈ D & |d| = w}.

Synonimy:

funkcja kosztu, funkcja przypadku niepomy´slnego, funkcja

zło˙zono´sci czasowej, zło˙zono´s´c czasowa, pesymistyczna zło˙zono´s´c czasowa.

(60)

Funkcja kosztu (cd.)

Analizuj ˛ac efektywno´s´c algorytmu dogodnie jest rozwa˙za´c wybrane operacje jednostkowe zwane operacjami dominuj ˛acymi — s ˛a to te operacje, których liczba wykona´n w algorytmie (dla wszystkich d ∈ D) jest dokładnie rz˛edu wszystkich wykonanych operacji.

Twierdzenie 2.4 Niech T b˛edzie funkcj ˛a kosztu wyznaczon ˛a wzgl˛edem wszystkich operacji jednostkowych oraz niech Tdom b˛edzie funkcj ˛a kosztu wyznaczon ˛a wzgl˛edem operacji dominuj ˛acych. Wówczas T = Θ(Tdom).

(61)

Przykład 2.3

Zbada´c zło˙zono´s´c nast˛epuj ˛acego algorytmu:

begin

{α : n ≥ 0}

z := 1; k := 0;

while n > k do z := z + z;

k := k + 1 od;

{β : z = 2n} end;

Operacja dominuj ˛aca: np.

dodawanie z + z.

Dla ka˙zdego obrotu p˛etli wykonywana jest 1 operacja dominuj ˛aca.

Liczba obrotów p˛etli: n.

Zatem T (n) = Θ(n).

(62)

´Srednia zło˙zono´s´c czasowa

Załó˙zmy, ˙ze dane jest prawdopodobie´nstwo wyst ˛apienia na wej´sciu danych d ∈ D wymiaru |d| = w, ozn. Pw(d). Zakładamy, ˙ze P

|d|=w Pw(d) = 1 dla wszystkich w ∈ W .

Definicja 2.4

Sredni ˛´ a zło˙zono´sci ˛a czasow ˛a nazywamy funkcj˛e Tave : W → R+ okre´slon ˛a nast˛epuj ˛aco:

Tave(w) = P

|d|=w Pw(d) · t(d).

(63)

´Srednia zło˙zono´s´c czasowa (cd.)

´Sredni ˛a zło˙zono´s´c czasow ˛a wygodniej jest szacowa´c przymuj ˛ac Tave(w) = P

|d|=w Pw(d) · t(d).

gdzie t(d) to liczba operacji dominuj ˛acych wykonywanych dla d ∈ D.

Twierdzenie 2.4 Tave = Θ(Tave ).

(64)

Zło˙zono´s´c pami˛eciowa

Definicja 2.5 Pełn ˛a funkcj ˛a zło˙zono´sci pami˛eciowej algorytmu A jest funkcja s : D → N, gdzie s(d) to liczba wszystkich komórek pami˛eci potrzebnych do realizacji A dla danych d ∈ D.

Definicja 2.6 Funkcj ˛a zło˙zono´sci pami˛eciowej algorytmu A nazywamy funkcj˛e S : W → N okre´slon ˛a nast˛epuj ˛aco:

S(w) = sup{s(d) : d ∈ D & |d| = w}

Definicja 2.7 Sredni ˛´ a zło˙zono´sci ˛a pami˛eciow ˛a algorytmu A nazywamy funkcj˛e Save : W → R+ okre´slon ˛a nast˛epuj ˛aco:

Save(w) = P

|d|=w Pw(d) · s(d).

(65)

Kryteria zło˙zono´sci

Dwa kryteria zło˙zono´sci:

jednolite (najpopularniejsze) logarytmiczne.

Kryterium jednolite:

ka˙zda operacja jednostkowa jest realizowana w stałym czasie (niezale˙znym od warto´sci jej argumentów)

ka˙zda warto´s´c typu prostego/wska´znikowego zajmuje stałe pole pami˛eci.

Dalej to wła´snie kryterium b˛edziemy stosowa´c.

(66)

Kryterium logarytmiczne

Kryterium logarytmiczne:

czas realizacji operacji jednostkowej jest wprost proporcjonalny do sumy długo´sci binarnej jej argumentów

ka˙zda warto´s´c typu prostego/wska´znikowego zajmuje pole pami˛eci proporcjonalne do jej długo´sci binarnej.

Długo´s´c binarna liczby n: bin(n) =

1 dla n = 0

⌊log n⌋ + 1 dla n > 0

(67)

Algorytmy i Struktury Danych

Wykład 3:

Analiza algorytmów (cd.), Problem sortowania

dr Anna Maria Radzikowska

Wydział Matematyki i Nauk Informacyjnych Politechnika Warszawska

(68)

Równania rekurencyjne

(69)

Równania rekurencyjne

Wykorzystywane przy badaniu zło˙zono´sci algorytmów rekurencyjnych.

Definicja 3.1 Równaniem rekurencyjnym nazywamy równanie postaci:

xn = f (xn−1, . . . , xn−k) , gdzie (xi)i=0 jest pewnym ci ˛agiem, k ≥ 1.

(70)

Twierdzenie 3.1

Twierdzenie 3.1 Niech a, b, c ∈ R+ oraz niech n ∈ ck dla k ∈ N.

Rozwi ˛azaniem równania rekurencyjnego postaci T (n) =

b dla n = 1

a · T (nc ) + b · n dla n > 1 jest

T (n) =

Θ(n) dla a < c Θ(n log n) dla a = c Θ(nlogc a) dla a > c

Twierdzenie to umo˙zliwia rozwi ˛azanie pewnych równa´n rekurencyjnych dla n b˛ed ˛acych pot˛egami c.

(71)

Twierdzenie 3.1 – dowód

T (n) =

b dla n = 1

a · T (nc ) + b · n dla n > 1 Dowód:

T (n) = aT n c

 + bn = ah

aT  n c2

 + bn c

i + bn = a2T  n c2

 + abn

c + bn

= a2 h

aT  n c3

 + b n c2

i + abn

c + bn = a3T  n c3

 + a2b n

c2 + abn

c + bn

= . . . = akT  n ck

 + bn

k−1

X

i=0

a c

i

= akb + bn

k−1

X

i=0

a c

i

= ak

ck bn + bn

k−1

X

i=0

a c

i

= bn

k

X

i=0

a c

i

.

(72)

Twierdzenie 3.1 – dowód (cd.)

T (n) = bn

k

X

i=0

a c

i

, n = ck, k ∈ N.

Przypadek 1.

Niech a < c. Szereg

X

i=0

a c

i

jest zbie˙zny, wi˛ec T (n) = Θ(n).

Przypadek 2.

Niech a = c. Wtedy

k

X

i=0

a c

i

= k + 1 = logc n + 1.

Zatem T (n) = bn (logc n + 1) = Θ(n log n).

(73)

Twierdzenie 3.1 – dowód (cd.)

Przypadek 3.

Niech a > c. Zauwa˙zmy najpierw, ˙ze loga n = logc n

logc a =⇒ logc n = (loga n) (logc a).

ck = n =⇒ k = logc n.

k = (loga n) (logc a).

ak = a(loga n)(logc a) = nlogc a.

(74)

Twierdzenie 3.1 – dowód (cd.)

T (n) = bn

k

X

i=0

a c

i

, n = ck, k ∈ N.

ak = nlogc a.

T (n) = bn

k

X

i=0

a c

i

= bn1 − ack+1

1 − ac = bnc − ak+1ck

c − a = bnc − a · ak

n

c − a

= bc

c − an − ba · ak

c − a = bc

c − an − ba

c − anlogc a = Θ(nlogc a).

(75)

Czy podane twierdzenie mo˙zna uogólni´c dla wszystkich liczb naturalnych?

(76)

Twierdzenie 3.2

Twierdzenie 3.2 Je´sli

(Z.1) T : N → N i f : R+ → R+ s ˛a funkcjami niemalej ˛acymi (Z.2) T (ak) = Θ(f (ak)) dla k ∈ N i a > 1

(Z.3) (∃x0 > 0) (∃c > 0) (∀x ≥ x0) f (ax) ≤ cf (x) to T (n) = Θ(f (n)) dla ka˙zdego n ∈ N.

To twierdzenie umo˙zliwia rozszerzenie rozwi ˛azania uzyskanego w

Twierdzeniu 3.1 na wszystkie liczby naturalne, o ile rozwi ˛azanie jest funkcj ˛a ograniczon ˛a wielomianowo.

Cytaty

Powiązane dokumenty

[r]

[r]

Ka˙zdy element zbioru F ma tylko jeden element

Dow´ od: Wystarczy poda´ c przyk lad elementu w R[X] dla kt´orego nie istnieje element odwrotny.. W´ owczas, X nie ma elementu odwrotnego i R[X] nie jest

Pokazać, że wykonując te same przekształcenia (w tej samej kolejności!) na macierzy jednostkowej otrzymamy macierz odwrotn ą do wyjściowej macierzy... Vasserstein,

So, now you think you can solve every single problem involving systems of linear differential equations with constant coefficients, eh.. Not to let you down after all the work you

Wyznacz miarę kąta nachylenia przekątnej prostopadłościanu do płaszczyzny

Znajdź wszystkie pierwiastki rzeczywiste tego równania.