Download as docx, pdf, or txt
Download as docx, pdf, or txt
You are on page 1of 17

1.

Algorytm – skonczony zbior operacji koniecznych do wykonania zadania z pewnej


klasy zadan, przetwarzajac dane, nalezace do pewnej klasy danych.

2. Algorytm powinen spelniac nastepujace zalozenia:


 Poprawnosc(dla kazdego wlasciwego zestawu danych po wykonaniu
skonczonej liczby czynnosci prowadzi do poprawnych wynikow);
 Jeznoznacznosc(wykonanie algorutmow dla tych samych danych powoduje
wykonanie tego samego wyniku);
 Skonczonosc;
 Uniwersalnosc(algorytm rozwiazuje dowolne zadanie).

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.

5. Niezmiennik petli – wlasnosc, ktora jesli jest prawdziwa na poczatku wykonanie


petli, to jest rowniez prawdziwa po wykonaniu petli.
6. Metoda dziel I zwyciezaj:

To techika projektowania algorytmow polegajaca na rekurencyjnym dzieleniu


zadanego problemu na podproblemy az do przypadkow trywialnych.
Jesli mamy doczynenie z przypadkiem trywialnym, to jest to przypadek bazowy.
Musimy ustawic:
 Jak rozwiazac przypadek trywialny;
 Jak rozwiazac przypadek bazowy;
 Jak wyznaczyc rozwiazanie problem majac rozwiazanie podproblemu.
Przyklad:
Poszukiwanie binarne: odnalesc liczbe posortowanej tablicy.
Przypadek trywialny: tablica jednoelementowa.
W przeciwnym przypadku dzielimy tablice na 2 czesci I rozwiazujemy zadanie osobno
dla kazdej z nich.

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.

8. Programowanie dynamiczne – technika projektowania algorytmow polegajaca na


rozwiezaniu podproblemow i zapamietywaniu ich wynikow. Problemy dzielone sa
na mniejsze podproblemy i wyniki ich rozwiazania sa zapisywane w tabele. Dzieki
temu w przypadku natrafiania na ten sam podproblem nie trzeba go ponownie
rozwiazywac.
9. Metoda wstepujaca z zapamietywaniem
Polega na rekurencyjnym wywolaniu funkcji z zapamietywaniem wynikow. Metoda ta
jest podobna do metody dziel i zwyciezaj.

10. Metoda wstepujaca


Polega na rozwiazywaniu wszystkich mozliwych podproblemow zaczynajac od tych o
najmniejszym rozmiarze. Wowczas w momencie rozwiazania podproblemu sa
dostepne rozwiazanie go podproblemu.
Przyklad:
Dyskretny problem plecakowy:
Zlodziej grabujacy sklep znalaz n przedmiotow. I-ty przedmiot ma wartosc Ci i wage
Wi. Daze on do zabrania jak najbardziej kosztownego, ale nie moze wziac wiecej niz
W kg. Nie moze dzielic przedmiotow ani zabrac wielokrotnosci przedmiotow. Jakie
przedmioty moze wziac zlodziej?
n=3
p1: 10 kg, 60 zl
p2: 20 kg, 100zl
p3: 30 kg, 120 zl.
Maksymalna pojemnosc plecaka 50 kg.
1) Scharakteryzowanie struktury optymalnego roziwazania.
V[0,...n; 0,...k]
Element V[t, s] przychowyje maksymalna wartosc {1, 2,...i} dla dowolnego podzbioru
elementow o sumetrycznym rozmiarze < S.
Jesli obliczyc wszystkie elementy tej macierzy to element V[m, b] bedzie zawieral
rozwiazanie problemu.
2) Rekurencyjne zdefiniowanie kosztu optymalnego rozwiazania
V[0, S]=0;
*V[i, S]=moc[V(i-1, S), W(a, i)+Vti-1; S-S(ai)].
Gdzie V[i-1; S] oznacza najlepsze roziazanie dla rozwiazanej aktualnej pojemnosci
plecaka S, oraz podzbiorow y[j-1, S-S(ai)] omniejszonej o rozmiar S(ai) ktore
probujemy dolozyc do plecaka dla przedmiotow {1,...,n-1}
3) Obliczenie kosztu metoda wstepujaca
 Wypelni 1 wiersz zgodnie ze wzorem V[0, S]=0.
 Oblicz pozostale elementy uzywajac wzore *.
 Wypelni tabele rzad porzedia.

11. Metoda prob i bledow.


Sposob osiagania okreslonego celu polegajacy na stosowaniu kolejno
roznych dostepnych srodkow, az do znalezienia teko, ktory jest skuteczny.
Przyklad:
Problem plecakowy. Polega na systematycznym podejmowaniu kolejnyh
prob dobierania przedmiotow za wszystkie puszczane kombinacje zostana
wyczerpana.

12.Rozmiar danych wejsciowych


To liczba pojedynczych danych whodzoncych w zestaw danych wejsciowych.
Przyklad:
1) W problemie sortowania – liczba elementow w ciagu wejsciowym.
2) Drzewo binarne – liczba wezlow w drzewie.
3) Wartosc wielomianu – stopien wielomianu.

13. Zlozonosc obliczeniowa – ilosc zasobow komputerowych potrzebnych do


wykonania algorytmu.
Zlozonosc pamieciowa – ilosc pomieci potrzebnej do wykonania algorytmu
wyrazona jako funkcja ilosci danych.
Zlozonosc czasowa -- ilosc czasu potrzebnego do wykonania algorytmu wyrazona
jako funkcja ilosci danych.
Operacja dominujaca – operacja charakterystyczna dla danego algorytmu.

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;

26.Sortowanie przez wstawianie


Zlozonosc czasowa: O(n2)
Przy każdej iteracji element jest porównywany ze
wcześniejszymi elementami, aż do znalezienia prawidłowej
pozycji.
Najstarszy element na koniec.
Sklada sie z 2 petli:
1) Petla glowna symuluje pobieranie kart(elementow zbioru)
2) Petla soryjaca szuka dla pobranego elementu miejsca w liscie
uporządkowanej.
Optymalizacja:
1) Petla zewn. Wybiera ze zbioru element, lezacy przed lista uporzadkowana;
2) Petla wewn. Poszukuje miejsca wstawienia wybranego elementu, wykorz
wyszukiwania binarnego.
3) Petla wewn. Przesuwa elementy aby zrobić miejsce dla elementu wybranego.

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.

30.Sortowanie przez kopcowanie


Kopiec jest drzewem binarnym, w którym wszystkie węzły spełniają następujący
warunek:
Węzeł nadrzędny jest większy lub równy węzłom potomnym
Budowa kopca:
d[ ]- Zbiór zawierający elementy do wstawienia do kopca. Numeracja elementów
rozpoczyna się od 1.
n- Ilość elementów w zbiorze, n ∈ N
i- zmienna licznikowa pętli umieszczającej kolejne elementy zbioru w kopcu, i ∈ N, i
∈ {2,3,...,n}
j,k- indeksy elementów leżących na ścieżce od wstawianego elementu do korzenia,
j,k ∈ C
x- zmienna pomocnicza przechowująca tymczasowo element wstawiany do kopca
Kroki:
1) Dla i=2,…n wykonuj k2…k5
2) J<-i, k<-j
3) X<-d[i]
4) K>0 i d[k]<x;
d[j]<-d[k]
j<-k; k<-j
5) d[j]<-x;
6) koniec
Rozbior kopca:
a) Zamień miejscami korzeń z ostatnim liściem, który wyłącz ze struktury kopca.
Elementem pobieranym z kopca jest zawsze jego korzeń, czyli element
największy.
b) Jeśli jest to konieczne, przywróć warunek kopca idąc od korzenia w dół.
c) Konyntuj, az kopiec bedzie pusty.
Sortowanie przez kopcowanie
Dane wejściowe
d[ ]- Zbiór zawierający elementy do posortowania, które są numerowane począwszy
od 1.
n- Ilość elementów w zbiorze, n ∈ N
Dane wyjściowe
d[ ]- Zbiór zawierający elementy posortowane rosnąco
Zmienne pomocnicze i funkcje
Twórz_kopiec-procedura budująca kopiec z elementów zbioru d[ ]. Kopiec powstaje
w zbiorze d[ ].
Rozbierz_kopiec-procedura dokonująca rozbioru kopca utworzonego w zbiorze d[ ].
Wynik rozbioru trafia z powrotem do zbioru d[ ].
Lista kroków
K01: Twórz kopiec
K02: Rozbierz kopiec
K03: Zakończ algorytm
klasa złożoności również będzie wynosić O(n log n).

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=

{ v1, v2, ..., vn } – zbiór n ponumerowanych wierzchołków


E = { e1, e2, ... em } – zbiór m ponumerowanych krawędzi. Każda krawędź jest parą
wierzchołków grafu połączonych tą krawędzią.

Lista sasiedstwa: pamięć O(n+m);


Macierz sasiedstwa: pamięć O(n2);

38.Algorytm przechodzenia grafow.


Należy odwiedzić każdy wierzcholek i kazda krawed zaczynać od wierzchołka p. Na
początku wszystkie wierzchołki i krawędzi zaznaczone jako nie odwiedzone.
1) Odwiedz wierzchołek p i zaznacz go jako odwiedzony.
2) Dopóki z jednego z odw. Wierzcholkow wychodzi nie odw. Krawedz, wykonuj
nastepujace czynności:
a) Wybierz dowolny wierzchołek, z którego
wychodzi nie odw. Krawedz.
b) Wybierz nie odw. Krawedz, wychodzaca z
wierzchołka V.
c) Zaznacz krawedz jako odwiedzona.
d) Jeśli wierzchołek nie został odwiedzony
odwiedz go i zaznacz jako odwiedzony.

39.Algorytm przeszukiwania wglab. (DFS)


Zaznaczamy bieżący wierzchołek jako odwiedzony. Przechodzimy do kolejnych
sąsiadów wierzchołka bieżącego i wykonujemy dla nich tą samą operację (tzn.
zaznaczamy je jako odwiedzone i przechodzimy do ich sąsiadów ). Przechodzenie
kończymy, gdy zostaną

w ten sposób
odwiedzone wszystkie dostępne wierzchołki.
v0 -> v1 -> v5 -> v2 -> v3 -> v4

40.Algorytm przeszykiwania wszerz (BFS)


Zaczynamy odwiedzanie od wierzchołka startowego. Następnie odwiedzamy
wszystkich jego sąsiadów. Dalej odwiedzamy wszystkich nieodwiedzonych jeszcze
sąsiadów sąsiadów. Itd.

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.

You might also like