Professional Documents
Culture Documents
Algorytmy I Zlozonosc
Algorytmy I Zlozonosc
3. Poprawnosc algorytmu:
Algorytm jest poprawny wtedy I tylko wtedy, gdy dla kazdych poprawnych danych
wejsciowych zachodza oba ponizsze warunki:
Algorytm zatrzymuje sie po skonczonej liczbie krokow, tak zwana “wlasnosc
stopu”;
Algorytm przy zatrzymaniu zwraca poprawny wynik(czesciowa poprawnosc
algorytmu).
Sprawdzanie czy algorytm jest poprawny jest dziekone na 2 czesci:
Sprawdzanie, czy algorytm ma wlasnosc stopu;
Sprawdzanie przy zalozeniu, ze sie zatrzymuje, czy zwraca poprawny wynik.
4. Czesciowa poprawnosc:
Algorytm jest czesciowo poprawny, jesli spelnia powizszy warunek w formie
implikacji:
Jesli algorytm sie zatrzymal I otrzymal poprawne dane wejsciowe, to zwracony jest
poprawny wynik.
Czesciowa poprawnosc nie gwarantuje zatrzymanie algorytmu.
Dowodzenie czesciowej poprawnosci petli wymaga zastosowania niezmiennika petli.
7. Metoda Zachlanna
To algorytm ktory w celu wyznaczenia rozwiazania w kazdym kroku dokonuje
zachlannego(najlepiej rokujacego w danym momencie) wyboru rozwiazania
czesciowego.
Przyklad:
Zmartwienie kinomana.
Dane: program filmow w kinie na dany dzien.
Wynik: kinoman chce zobaczyc jednego dnia jaknajwiecej filmow.
Strategia: wybrac filmy, ktore sa najkrotsze.
Przyklad:
Dla algorytmu wyznaczania wartosci wielomianu operacja dominujaca – operacja
arytmetyczna. Za jednostke zlozonosci czasowej przyjmuje sie wykonanie jednej
operacji dominujacej.
14.Zlozonosc pesymistyczna
Definiowana jako ilosc zasobow komputerowych potrzebnych przy najgorszych
danych wejsciowych rozmiaru n.
15.Zlozonosc oszekiwana
Ilosc zasobow komputerowych potrzebnych przy typowych danych wejsciowych
rozmiru n.
16.Rzedy g
Niech f, g, h: N->R, {0}
Def. Mowimy, ze funkcja f(n) jest conajwyzej rzedu g(n)
g(f(n)=O(g(n)), jesli istnieje f(n)<=cg(n)
Przyklad: n2+2n=0(n2), bo n2+2n<=3n2
Def. Mowimy, ze funkcja f(n) jest co najmniej rzedu g(n)
g(f(n)= Ω (g(n)), jesli g(n)=(f(n))
Def. Mowimy, ze funkcja f(n) jest dokladnie rzedu g(n)
g(f(n)=(f(n)), jesli zachodzi f(n)=O(g(n)) i f(n)= Ω(g(n))(f(n)=g(n) – f jest
asymptotycznie rownowazna g.
Przyklad: n2+2n=n2, bo n2+2n<=3n2; n2+2n>n2
17.Zlozonosc logarytmiczna
logn
Czas dzialania logarytmiczny wystepuje np dla algorytmow typu: zadanie rozmiaru n
zostaje sprowadzone do zadania rozmiaru 0,5n+pelna stala liczba dzialan, np
poszukiwanie binarne.
18.Zlozonosc liniowa
Czas dzialania liniowy wystepuje np dla algorytmow w ktorych jest wykonywana
pewna stala liczba dzialan dla kazdego z n-elementow wejsciowych. Przyklad:
Algorytm Hornera.
19.Zlozonosc liniowo-logarytmiczna
nlogn
Czas dzialania nlogn. Wystepuje np dla algorytmow typu: zadanie rozmiaru n zostaje
sprowadzone dla dwoch podzadan rozmiaru 0,5n+pelna liczba dzialan. Liniowa
wzgledem rozmiaru n. Potrzebny do wykonania najpierw rozbicia, a nastepnie
scalenia rozwiazania zadania n/2 w zadaniu n.
20.Przeszukiwanie sekwencyjne
Przegladanie kolejnych elementow n-elementowego zbioru. Znalezony element
zostaje zwrocony(interesuje nas nie element a jego pozycja). W przypadku
pesymistycznym algorytm wykonuje n porownan.
Jeśli elementy rozlozone losowo, to prawdopodob. znalezenia elementu: p=1/n;
A(n)=n+1/2.
Przeszukiwanie rozpoczyna się od 1 elementu, p przechowuje pozycje elementu.
1 test: czy pozycja wskazyje na element wewnątrz zbioru;
2 test: czy element różny od poszukiwanego elementu. Jeśli tak, to p=p+1;
Wyjscie z petli:
1)element x nie znalezono;
2)element x znalezono;
21.Przeszukiwanie binarne
W uporządkowanym zbiorze wyszukujemy element srodkowy i sprawdzamy czy on
jest poszukiwanym elementem. Jeśli tak – koniec, jeśli nie – dzielimy dalej, dopóki
nie znajdziemy element poszukiwany albo ni zostanie tylko jeden element.
22.Rekurencja
Funkcja(procedura) wywoluje sama siebie w celu rozwiązanie penego problemu.
Przykład:
1) Silnia;
2) Ciag Fibonaczego
Zastosowanie:
1) Algorytmy wyszukiwania(quick sort);
2) Rekurencyjne struktury danych(linked list);
Problemy:
1) Ograniczenie pojemności stosu wywolan.
Można:
Zwiekszyc rozmiar stosu;
Wykonać optymalizacje.
2) Czas wykonania.
23.Iteracja
Czynność powtarzania tej samej instrukcji(wielu instrukcji) w petli z góry okreslona
liczbe razy lub az do spelnenia określonego warunku.
Itearcja nie czynia stosu do przechowywania zmiennych -> Wykonanie iteracji jest
szybsze od rekurencji.
Iteracja jest skonczona gdy warunek kontroli staje się fałszywy.
24.Sortowanie
Jest lista q[a1, a2, …, an] elementow zbioru liniowo uporządkowanego. Trzeba
dokonać permutacji, ustawijajac elementy w porządku rosnacym.
25.Sortowanie bąbelkowe
Zlozonosc czasowa: O(n2)
Zlozonosc pamieciowa: O(1)
Porownanie dwóch kolejnych elementow i zapamiętanie ich kolejności.
Algorytm ma „maximum”
Można wykorzystać dla zbioru <500 elementow
Zalety:
1) Wydajnosc dla danych wstępnie porortowanych;
2) Wydajnosc dla zbiorow o stalej liczności;
3) Stabilnosc;
4) Prostota w implementacji;
27.Sortowanie szybkie
Wykorzystuje technikę dziel i zwyczezaj. Wybrany jest element o nazwie piwot, dalej
elementy niewieksze od niego – na lewo, a niemniejsze – na prawo.
Powstaje 2 czesci tablicy i dalej kazda z nich sortujemy wedlug tego samego
algorytmu.
Najszybszy bo:
1) Zlozonosc czasowa oczekiwana O(nlogn)
n – 1,4
2) Oczekiwana wrazliwosc czasowa jest
nie wielka
3) Liczba innych dzialan w algorytmie
nie jest znaczno wieksza od liczby
porownan.
Wady:
1) W przypadku pesymistycznym
niestabilność i koszt O(n2)
2) Zlozonosc pamieciowa O(n)
28.Sortowanie Shella
Zbior dzielimy na podzbiory, których elementy sa odlegle od siebie w sortowanym
zbiorze o pewnym odstępie h. Każdy z tych podzbiorów sortujemy przez wstawianie.
Nastepnie odstep zmniejszamy, powoduje to powstanie nowych podzbiorów.
Sortowanie powtarzamy i znowy zmniejszmy odstep az osiagne on wartości 1.
Zlozonosc czasowa: O(n2)
Dobry ciag odstępu:
hs=3hs-1+1;
h=[hs:9]
Przykład:
N=200;
H1=1;
H2=3*1+1;
H3=3*4+1;
…
H6=3*121+1=364>200
H=[h6:9]=364/9=40;
29. Drzewo binarne
Jest hierarhiczna struktura danych, którego elementy będziemy nazywali wezlami lub
wiercholkami. W drzewie binarnym każdy wezel może posiadac 2
nastepniki(potomki, dzieci, węźle potomne). Wezly sa
polaczone krawędziami.
Lisc – wezel który nie posiada wezlow potomnych.
Jeśli chcemy przetwarzać za pomocą drzewa
binarnego – tworzymy tablice. d[1] – korzen drzewa.
Drzewo binarne jest zrownowazone i uporządkowane jesly na wszystkich poziomach,
za wyjątkiem ostatniego, posiada maksymalna liczbe wezlow, a na poziome ostatnim
wezly sa ulozone kolejno od lewej strony – warunek ten gwarantuje nam, ze każdy
element tablicy będę reprezentowal wezel w drzewie binarnym.
Sciezka – ciag wezlow drzewa binarnego, splelniajacy warunek, ze każdy wezel
poprzedni jest rodzicem wedla następnego. K elementow - dlogosc sciezki k-1.
Sturuktury danych
Sposób przechowywania danych w pamięci komputera.
30.Tablica
Ciag elementow jakiegoś typu ulozonych w określonej kolejności. Każdy element ma
index.
Odczyt elementu z tablicy ma zlozonosc czasowa O(1)
Dodawanie elementu do tablicy ma zlozonosc czasowa O(1), bo wystarczy podac
index i zapisac tam dana.
Niemozliwe jest proste dodawanie kolejnego elementu na koniec tabllcy.
Odpowiedniki tablicy – ciag, macierz
31.Rekord
Grupuje logocznie powiazane ze sobą dane roznego typu w jednym obszarze
pamięci.
32.Zbior
Odpowiada matematycznemy pojęciu zbioru.
33.Plik sekwencyjny
Ciag danych. Dane dostępne tylko w określonej kolejności.
34.Lista
Skoncznony ciag elementow. Dlugosc – liczba elementow
q = [x1, x2,…, xn]
Operacje na liscie:
1)Dostep do elementow;
2)Podlista;
3)Zlozenie;
Inne:
a) Front - dostęp do pierwszego elementu
b) Push – dodawanie elementu
c) Pop – usuwanie elementu
d) Mar
e) Inject
f) Eject
Implementacje listy – tablicowa, dowiazowa.
Lista:
Pojedynczo liniowa 1->2
Pojedynczo cykliczna ->1->2->
Podwojnie liniowa 1<->2
Podwojnie cykliczna <->1<->2<->
Na początku listy zawsze będzie element pusty – glowa.
35.Stos
struktura danych typu „ostatnie weszło, pierwsze wyszło” (LIFO), w której dostępny
jest tylko górny element.
36.Kolejka
Kolejka to struktura danych typu „pierwsze weszło, pierwsze wyszło” (FIFO), która
obsługuje dodawanie elementów z tyłu (kolejkowanie) i usuwanie elementów z
przodu (usuwanie z kolejki).
37.Graf
to struktura danych składająca się z wierzchołków i krawędzi, łączących dwa
wierzchołki.
G=
( V,
E)
V=
w ten sposób
odwiedzone wszystkie dostępne wierzchołki.
v0 -> v1 -> v5 -> v2 -> v3 -> v4
41.Algorytm Djikstry
42.Algorytm Floyda-Warshalla
Wzory:
1) W(m)=sup{ t(d) dєDm } – Pesymistyczna zlozonosc czasowa.
2) A(m)= ΣkPmk, k>0 – Oczekiwana zlozonosc czasowa.