S-Analiza algorytmow - Z.Czech -PĹš .pdf
(
290 KB
)
Pobierz
calosc.dvi
Instytut Informatyki
Politechnika ‘l¡ska
Analizaalgorytmów
Opracował: Zbigniew Czech
Materiały dydaktyczne
Gliwice, wrzesie« 2004
Spis tre±ci
1 Dowodzenie poprawno±ci algorytmów 4
1.1 Aksjomaty arytmetyki liczb . . . . . . . . . . . . . . . . . . . . . . . . . . . . 5
1.2 Prawa rachunku zda« . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 5
1.3 Reguły dowodzenia (wnioskowania) . . . . . . . . . . . . . . . . . . . . . . . . 6
1.4 Dowodzenie sko«czono±cialgorytmów . . . . . . . . . . . . . . . . . . . . . . 8
2 Zło»ono±¢ obliczeniowa algorytmów 8
2.1 Obliczanie warto±ci wielomianu . . . . . . . . . . . . . . . . . . . . . . . . . . 8
2.2 Mno»enie liczb całkowitych . . . . . . . . . . . . . . . . . . . . . . . . . . . . 9
2.3 Znajdowanie maksymalnego (minimalnego) elementu . . . . . . . . . . . . . . 9
2.4 Jednoczesne znajdowanie maksymalnego i minimalnego elementu . . . . . . . 10
2.5 Mno»enie dwóch
n
-bitowych liczb dwójkowych . . . . . . . . . . . . . . . . . 10
2.6
Sortowanie przez ł¡czenie
. . . . . . . . . . . . . . . . . . . . . . . . . . . 11
3 Kopce i kolejki priorytetowe 11
3.1 Procedury operuj¡ce na kopcu . . . . . . . . . . . . . . . . . . . . . . . . . . 11
3.2 Operacje na kolejkach priorytetowych . . . . . . . . . . . . . . . . . . . . . . 12
3.3 Sortowanie przez kopcowanie . . . . . . . . . . . . . . . . . . . . . . . . . . . 13
4 Wyszukiwanie 14
4.1 Wyszukiwanie liniowe . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 14
4.2 Wyszukiwanie liniowe z zastosowaniemwartownika . . . . . . . . . . . . . . . 14
4.3 Wyszukiwanie liniowe w uporz¡dkowanejtablicy . . . . . . . . . . . . . . . . 15
4.4 Wyszukiwanie binarne (logarytmiczne) . . . . . . . . . . . . . . . . . . . . . . 15
4.5 Drzewa poszukiwa« binarnych . . . . . . . . . . . . . . . . . . . . . . . . . . 15
4.6 Haszowanie . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 19
4.6.1 Haszowanie otwarte . . . . . . . . . . . . . . . . . . . . . . . . . . . . 19
4.6.2 Haszowanie zamkni¦te . . . . . . . . . . . . . . . . . . . . . . . . . . . 21
4.7 Minimalne, doskonałe funkcje haszuj¡ce . . . . . . . . . . . . . . . . . . . . . 22
5 Operacje na tekstach 24
5.1 Wyszukiwanie „naiwne” . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 24
5.2 Algorytm Knutha, Morrisa i Pratta (KMP) . . . . . . . . . . . . . . . . . . . 25
5.3 Wyszukiwanie niezgodno±ciowe . . . . . . . . . . . . . . . . . . . . . . . . . . 26
5.4 Algorytm Boyera i Moora (BM). . . . . . . . . . . . . . . . . . . . . . . . . . 26
6 Sortowanie 27
6.1 Sortowanie przez proste wstawianie . . . . . . . . . . . . . . . . . . . . . . . 27
6.2 Algorytm Shella, czyli sortowanie za pomoc¡ malej¡cych przyrostów . . . . . 29
6.3 Sortowanie przez proste wybieranie . . . . . . . . . . . . . . . . . . . . . . . 30
6.4 Sortowanie przez prosta zamian¦ . . . . . . . . . . . . . . . . . . . . . . . . . 32
6.5 Sortowanie szybkie – algorytm Quicksort. . . . . . . . . . . . . . . . . . . . . 34
6.6 Inna wersja algorytmu Quicksort . . . . . . . . . . . . . . . . . . . . . . . . . 36
6.7 Czasy wykonania programów sortowania . . . . . . . . . . . . . . . . . . . . . 38
7 Selekcja
39
8 Sortowanie przy uwzgl¦dnieniu szczególnych własno±ci kluczy 39
8.1 Sortowanie kubełkowe . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 40
8.2 Sortowanie pozycyjne . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 41
9 Algorytmy zachłanne 43
9.1 Kolorowaniezachłanne . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 43
9.2 Problem komiwoja»era . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 43
9.3 Znajdowanie najta«szych dróg — algorytm Dijkstry . . . . . . . . . . . . . . 44
2
10 Algorytmy grafowe 44
10.1 Przeszukiwanie grafu w gł¡b. . . . . . . . . . . . . . . . . . . . . . . . . . . . 44
10.2 Przeszukiwanie grafu wszerz . . . . . . . . . . . . . . . . . . . . . . . . . . . 46
10.3 Wyznaczanie cykli podstawowych (fundamentalnych) . . . . . . . . . . . . . . 47
10.4 Minimalne drzewa rozpinaj¡ce . . . . . . . . . . . . . . . . . . . . . . . . . . 48
10.5 Wyznaczanie cykli Eulera . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 49
11 Wyszukiwanie wyczerpujace. Algorytm z powrotami
49
12 Przeszukiwanie heurystyczne 49
12.1 Przeszukiwanie wszerz . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 49
12.2 Przeszukiwanie w gł¡b z iteracyjnym pogł¦bianiem . . . . . . . . . . . . . . . 50
12.3 Przeszukiwanie według strategii „najlepszy wierzchołek jako pierwszy” . . . . 50
13 Generowanie permutacji
51
14 Pytania
53
15 Podzi¦kowania
56
Literatura
56
3
1 Dowodzenie poprawno±ci algorytmów
Przed dowodem poprawno±ci
{
(
n>
0)
and
(
m>
0)
}
warunek wst¦pny (asercja wej±ciowa)
begin
iloczyn
:=0;
N
:=
n
;
repeat
iloczyn
:=
iloczyn
+
m
;
N
:=
N −
1;
until N
=0;
end
;
{
iloczyn
=
n
m
}
warunek ostateczny (asercja wyj±ciowa)
Po przeprowadzeniu dowodu
{
(
n>
0)
and
(
m>
0)
}
begin
iloczyn
:=0;
N
:=
n
;
repeat
{
Niezmiennik: (
iloczyn
+
N
m
=
n
m
)
and
(
N >
0)
}
iloczyn
:=
iloczyn
+
m
;
N
:=
N −
1;
{
(
iloczyn
+
N
m
=
n
m
)
and
(
N -
0)
}
until N
=0;
{
(
iloczyn
+
N
m
=
n
m
)
and
(
N
=0)
}
end
;
{
iloczyn
=
n
m
}
Proces obliczeniowy
Instrukcje
Wyniki oblicze«
Niezmiennik iteracji
n= 5 m= 8
iloczyn:=0; N :=n; iloczyn= 0,N = 5,m= 8 ( 0+5
8=40) and (N > 0)
iloczyn:= iloczyn+m N :=N −1 iloczyn= 8,N = 4,m= 8 ( 8+4
8=40) and (N > 0)
iloczyn:= iloczyn+m N :=N −1 iloczyn= 16,N = 3,m= 8 (16+3
8=40) and (N > 0)
iloczyn:= iloczyn+m N :=N −1 iloczyn= 24,N = 2,m= 8 (24+2
8=40) and (N > 0)
iloczyn:= iloczyn+m N :=N −1 iloczyn= 32,N = 1,m= 8 (32+1
8=40) and (N > 0)
iloczyn:= iloczyn+m N :=N
−
1 iloczyn= 40,N = 0,m= 8 (40+0
8=40) and (N = 0)
Procedura assert oraz przykład jej u»ycia
procedure assert
(
b
:
Boolean
;
t
:
string
);
if not b then write
(
t
);
assert
((
n>
0)
and
(
m>
0), “not 1”);
begin
iloczyn
:=0;
N
:=
n
;
repeat
assert
((
iloczyn
+
N
m
=
n
m
)
and
(
N >
0), “not 2”);
iloczyn
:=
iloczyn
+
m
;
N
:=
N −
1;
assert
((
iloczyn
+
N
m
=
n
m
)
and
(
N -
0), “not 3”);
until N
=0;
4
assert
((
iloczyn
+
N
m
=
n
m
)
and
(
N
=0), “not 4”);
end
;
assert
(
iloczyn
=
n
m
, “not 5”);
1.1 Aksjomaty arytmetyki liczb
Przemienno±¢ dodawania i mno»enia
x
+
y
=
y
+
x
x
y
=
y
x
ł¡czno±¢ dodawania i mno»enia
(
x
+
y
)+
z
=
x
+(
y
+
z
)
(
x
y
)
z
=
x
(
y
z
)
Rozdzielno±¢ dodawania i odejmowania wzgl¦dem mno»enia
x
(
y
+
z
)=
x
y
+
x
z
x
(
y−z
)=
x
y−x
z
Inne
x
+0=
x
x
0=0
x
1=
x
1.2 Prawa rachunku zda«
e1, e2, e3 — zdania
1. Prawa przemienno±ci
(
e
1
^e
2)
(
e
2
^e
1)
(
e
1
_e
2)
(
e
2
_e
1)
(
e
1
e
2)
(
e
2
e
1)
2. Prawa łaczno±ci
e
1
^
(
e
2
^e
3)
(
e
1
^e
2)
^e
3
e
1
_
(
e
2
_e
3)
(
e
1
_e
2)
_e
3
3. Prawa rozdzielno±ci
e
1
_
(
e
2
^e
3)
(
e
1
_e
2)
^
(
e
1
_e
3)
e
1
^
(
e
2
_e
3)
(
e
1
^e
2)
_
(
e
1
^e
3)
4. Prawa De Morgana
¬
(
e
1
^e
2)
¬e
1
_¬e
2
¬
(
e
1
_e
2)
¬e
1
^¬e
2
5. Prawo podwójnego przeczenia
¬
(
¬e
1)
e
1
6. Prawo wył¡czonego ±rodka
e
1
_¬e
1
true
7. Prawo zaprzeczenia
e
1
^¬e
1
false
8. Prawo implikacji
e
1
)e
2
¬e
1
_e
2
9. Prawo równowa»no±ci
(
e
1
e
2)
(
e
1
)e
2)
^
(
e
2
)e
1)
10. Prawa upraszczania alternatywy
5
Plik z chomika:
PI_
Inne pliki z tego folderu:
Algorytmy genetyczne + struktury danych = programy ewolucyjne- Zbigniew Nahorski.pdf
(21798 KB)
Wprowadzenie do algorytmów- T.H.Cormen, C.E. Leiserson, R.L.Rivest.pdf
(29012 KB)
Algorytmy, struktury danych i techniki programowania. Wydanie II- Piotr Wróblewski [Helion].pdf
(5666 KB)
Rzecz o istocie informatyki -Algorytmika- Harel David [WNT].pdf
(12589 KB)
Algorytmy + struktury danych = programy - Wirth Niklaus [WNT].pdf
(51165 KB)
Inne foldery tego chomika:
@Podstawy@
Anatomia_PC-SERVIS
Programowanie
Zgłoś jeśli
naruszono regulamin