AiSD 2008 01m id 53468 Nieznany (2)

background image

2008-10-07

1

Pojęcia podstawowe.

Abstrakcyjne typy danych

Algorytmy i struktury danych

Wykład 1.

Rok akademicki: 2008/2009

2

Ramowy plan wykładów

Pojęcie podstawowe. Poprawność i złożoność algorytmów

Rekurencja

Algorytmy tablicowe

Zbiory

Tablice asocjacyjne

Struktury listowe

Drzewa

Grafy

Paweł Lula, Katedra Systemów Obliczeniowych, Uniwersytet Ekonomiczny w Krakowie

background image

2008-10-07

2

3

Literatura

Cormen T., Leiserson C., Rivest R., Stein C., Wprowadzenie do algorytmów,
Wydawnictwo Naukowo-Techniczne, 2004

Lafore R., Java. Algorytmy i struktury danych, Helion, 2004

Koffman E., Wolfgang P., Struktury danych i techniki obiektowe na
przykładzie Javy 5.0, Helion, 2006

Wirth N., Algorytmy + struktury danych = programy, dowolne wydanie

Sysło M., Algorytmy, Wydawnictwo Szkolne i Pedagogiczne, Warszawa,
1997

Paweł Lula, Katedra Systemów Obliczeniowych, Uniwersytet Ekonomiczny w Krakowie

4

Informacje organizacyjne

Osoby prowadzące: Paweł Lula (wykład), Janusz Sztorc i Wit
Urban (ćwiczenia)

Wymiar godzinowy: 30 + 30

Egzamin: pisemny (nie ma zwolnień z egzaminu)

Materiały do wykładu:

http://www.ae.krakow.pl/~lulap

Paweł Lula, Katedra Systemów Obliczeniowych, Uniwersytet Ekonomiczny w Krakowie

background image

2008-10-07

3

5

Algorytm

sposób postępowania umożliwiający rozwiązanie zadania
określonego typu

podany w postaci zestawu kolejnych czynności do wykonania

wykonawcą algorytmu może być człowiek lub urządzenie (np.
komputer)

Paweł Lula, Katedra Systemów Obliczeniowych, Uniwersytet Ekonomiczny w Krakowie

6

Struktura danych

Zestaw powiązanych ze sobą danych wraz z mechanizmami
określającymi sposób tworzenia, likwidowania i wykorzystania
zdefiniowanego zestawu jako całości oraz poszczególnych jego
elementów.

Paweł Lula, Katedra Systemów Obliczeniowych, Uniwersytet Ekonomiczny w Krakowie

background image

2008-10-07

4

7

Program komputerowy

zrozumiały dla komputera sposób zapisu algorytmu i opisu
struktur danych

zapisywany przy użyciu języków programowania.

Paweł Lula, Katedra Systemów Obliczeniowych, Uniwersytet Ekonomiczny w Krakowie

Ewolucja metod programowania (1)

Programowanie w języku maszynowym

Programista posługuje się pojęciami
charakterystycznymi dla systemu
komputerowego, a nie dla dziedziny
zastosowań (operuje rozkazami
wchodzącymi w skład listy rozkazów
procesora)

Rozkazy składające się na program
programista zapisu w postaci binarnych
kodów

Programista operuje bezpośrednio na
komórkach pamięci operacyjnej.
Odpowiedzialny jest za określenie sposobu
binarnej reprezentacji informacji.

8

Paweł Lula, Katedra Systemów Obliczeniowych, Uniwersytet Ekonomiczny w Krakowie

background image

2008-10-07

5

Ewolucja metod programowania (2)

Programowanie w języku
symbolicznym (asemblerze)

Programista posługuje się rozkazami
pochodzącymi z listy rozkazów procesora
(ale są one zapisywane w postaci
instrukcji, a nie w postaci binarnych
kodów).

Języki symboliczne wprowadziły zmiany
w sposobie notacji programu, ale nie
spowodowały zasadniczych zmian w
zestawie pojęć wykorzystywanych do
opisu algorytmów.

Pojawiła się możliwość przypisywania
nazw komórkom pamięci (definiowanie
zmiennych)

9

Paweł Lula, Katedra Systemów Obliczeniowych, Uniwersytet Ekonomiczny w Krakowie

Ewolucja metod programowania (3)

Programowanie w językach wysokiego

poziomu I generacji

Pojawiła się możliwość stosowania instrukcji:

podstawienia (przypisania),

warunkowej,

pętli (iteracji),

skoku.

Przy opisie algorytmy następuje rezygnacja ze

stosowania rozkazów z listy rozkazów

procesora i pojawia się możliwość stosowania

pojęć o znacznie większym stopniu ogólności.

Wprowadzenie mechanizmu deklarowania
zmiennych

Ułatwione zostało operowanie na
wartościach tekstowych

Pojawiła się możliwość korzystania ze
złożonych typów danych (tablice, pliki)

10

Paweł Lula, Katedra Systemów Obliczeniowych, Uniwersytet Ekonomiczny w Krakowie

background image

2008-10-07

6

Ewolucja metod programowania (4)

Programowanie proceduralne

Możliwość definiowania podprogramów.

Zdefiniowanie nowego podprogramu
pozwala na rozszerzenie zbioru instrukcji
dostępnych w stosowanym języku
programowania.

Mechanizm parametrów zwiększył
uniwersalność definiowanych instrukcji.

Pojawiła się możliwość definiowania danych
lokalnych (dostępnych tylko w
podprogramie) oraz danych globalnych
(dostępnych w całym programie)

11

Paweł Lula, Katedra Systemów Obliczeniowych, Uniwersytet Ekonomiczny w Krakowie

Ewolucja metod programowania (5)

Programowanie strukturalne

Zwiększenie liczby instrukcji sterujących
(np.: różne postaci pętli, instrukcji
warunkowych, wyboru, podstawienia) –
dzięki czemu można było wyeliminować
instrukcję skoku bezwarunkowego

Podział programu na dwie części: opis
struktur danych i opis algorytmu

Zwiększenie liczby dostępnych typów
danych (tablice, rekordy, zbiory, pliki),

Możliwość stosowania dynamicznych
struktur danych (stos, kolejka, listy, drzewa),

Możliwość definiowania własnych struktur
danych.

12

Paweł Lula, Katedra Systemów Obliczeniowych, Uniwersytet Ekonomiczny w Krakowie

background image

2008-10-07

7

Ewolucja metod programowania (6)

Programowanie obiektowe

Równoległe definiowanie algorytmów i
struktur danych i ich połączenie w jedną całość
(klasę):

reprezentuje w programie fragment rzeczywistości
(jego cechy, jego zachowania),

pozwala programiście posługiwać się pojęciami
charakterystycznymi dla dziedziny problemu
(oderwać się od pojęć związanych ze sprzętem
komputerowym),

pozwala ukryć szczegóły implementacji

klasa – abstrakcyjny typ danych
(ABSTRAHOWANIE - operacja myślowa
polegająca na uwzględnianiu tylko wybranych
cech sytuacji (przedmiotu, osoby), z
pominięciem cech uznanych za nieistotne)

13

Paweł Lula, Katedra Systemów Obliczeniowych, Uniwersytet Ekonomiczny w Krakowie

Interfejs jako kolejny poziom abstrahowania

Klasa:

reprezentuje obiekt rzeczywisty (koło, kwadrat, prostokąt),

charakteryzuje jego cechy (pola),

opisuje czynności (metody)

Interfejs:

reprezentuje obiekt abstrakcyjny (figura posiadająca środek symetrii),

wskazuje czynności charakterystyczne dla obiektu (ale ich nie
implementuje)

interfejs – abstrakcyjny typ danych, poziom abstrakcji wyższy
niż w przypadku klasy.

Paweł Lula, Katedra Systemów Obliczeniowych, Uniwersytet Ekonomiczny w Krakowie

14

background image

2008-10-07

8

15

Interfejsy (1)

Interfejs - zbiór nagłówków metod i definicji stałych.

nagłówki metod - określają sposób ich wywoływania, nie określają
sposobu ich implementacji (określamy co można zrobić, ale nie
mówimy jak to zrobić),

stałe - określają wartości cech, które nie ulegają zmianie (stałe są
definiowane jako pola publiczne, statyczne i finalne).

Paweł Lula, Katedra Systemów Obliczeniowych, Uniwersytet Ekonomiczny w Krakowie

16

Interfejsy (2)

Definicja interfejsu:

interface NazwaInterfejsu [extends
nazwyInterfejsów] {

nagłówki metod

}

Paweł Lula, Katedra Systemów Obliczeniowych, Uniwersytet Ekonomiczny w Krakowie

background image

2008-10-07

9

17

Przykład interfejsu

interface OperacjeGraficzne {

void rysowanie();

void usuwanie();

}

Paweł Lula, Katedra Systemów Obliczeniowych, Uniwersytet Ekonomiczny w Krakowie

18

Implementacja interfejsu

Definicja metod umieszczonych w interfejsach umieszczana
jest w klasach implementujących dany interfejs.

... class nazwaKlasy extends ... implements ListaInterfejsów

klasa implementująca interfejs musi zawierać definicje
wszystkich metod zadeklarowanych w interfejsie (w
przeciwnym przypadku staje się klasą abstrakcyjną)

klasa może implementować wiele interfejsów

Paweł Lula, Katedra Systemów Obliczeniowych, Uniwersytet Ekonomiczny w Krakowie

background image

2008-10-07

10

19

Zastosowanie interfejsów

wskazuje na właściwości pewnego abstrakcyjnego pojęcia

definiowanie związków pomiędzy klasami - wszystkie klasy
implementujące interfejs posiadają wspólne właściwości
(mogą realizować operacje określone w interfejsie)

nazwa interfejsu może funkcjonować jako nazwa typu

Paweł Lula, Katedra Systemów Obliczeniowych, Uniwersytet Ekonomiczny w Krakowie

20

Przykład (1)

interface ZdolnyDoLotu {

void jestemWPowietrzu();

}

abstract class Zwierze {
}

class ZwierzeLadowe extends Zwierze {
}

class ZwierzeWodne extends Zwierze {
}

Paweł Lula, Katedra Systemów Obliczeniowych, Uniwersytet Ekonomiczny w Krakowie

background image

2008-10-07

11

21

Przykład (2)

class Ptak extends Zwierze implements ZdolnyDoLotu {

public void jestemWPowietrzu()

{

System.out.println("Lecacy ptak");

}

}

Paweł Lula, Katedra Systemów Obliczeniowych, Uniwersytet Ekonomiczny w Krakowie

22

Przykład (3)

abstract class Pojazd {

}

class Statek extends Pojazd {

}

class Samochod extends Pojazd {

}

Paweł Lula, Katedra Systemów Obliczeniowych, Uniwersytet Ekonomiczny w Krakowie

background image

2008-10-07

12

23

Przykład (4)

class Samolot extends Pojazd implements ZdolnyDoLotu {

public void jestemWPowietrzu()

{

System.out.println("Lecacy samolot");

}

}

Paweł Lula, Katedra Systemów Obliczeniowych, Uniwersytet Ekonomiczny w Krakowie

24

Przykład (5)

public class Lot {

public static void wzbijaSieWPowietrze(ZdolnyDoLotu obiektLatajacy) {

obiektLatajacy.jestemWPowietrzu();

}

public static void main(String [] args)
{

Ptak p = new Ptak();
Samolot s = new Samolot();

wzbijaSieWPowietrze(p);
wzbijaSieWPowietrze(s);

}

}

Paweł Lula, Katedra Systemów Obliczeniowych, Uniwersytet Ekonomiczny w Krakowie

background image

2008-10-07

13

Wymagania wobec algorytmów

poprawność – algorytm generuje prawidłowe rezultaty (nie
zawiera błędów),

wydajność – realizacja algorytmu wymaga użycia
akceptowalnej ilości zasobów:

czasu,

pamięci.

Paweł Lula, Katedra Systemów Obliczeniowych, Uniwersytet Ekonomiczny w Krakowie

25

26

Pojęcie błędu

niezgodność z obowiązującymi regułami pisania, liczenia,
wymowy itp.; odstępstwo od normy; pomyłka

postępek, działanie, które przynosi komuś złe skutki;
niewłaściwe posunięcie, przedsięwzięcie

mylne, fałszywe mniemanie o czymś (przestarz.)

Źródło: Słownik języka polskiego PWN

Paweł Lula, Katedra Systemów Obliczeniowych, Uniwersytet Ekonomiczny w Krakowie

background image

2008-10-07

14

27

Błędy w programowaniu

błędy logiczne – na etapie projektowania algorytmu (środki
zaradcze: stosowanie sprawdzonych algorytmów, formalne
dowodzenie poprawności algorytmu, testowanie programu)

błędy wykonania programu – ujawniające się w trakcie
realizacji algorytmu zapisanego w postaci programu
(ujawniające się w postaci wyjątków)

błędy syntaktyczne – polegające na niezgodności tekstu
programu z gramatyką języka programowania (wykrywane
przez kompilator)

Paweł Lula, Katedra Systemów Obliczeniowych, Uniwersytet Ekonomiczny w Krakowie

28

Złożoność obliczeniowa

Złożoność obliczeniowa algorytmu – ilość zasobów systemu
komputerowego niezbędnych do jego realizacji.

Zasoby systemu komputerowego niezbędne do realizacji
algorytmu:

czas pracy procesora (złożoność czasowa algorytmu),

pamięć operacyjna (złożoność pamięciowa algorytmu).

Złożoność obliczeniowa jest uzależniona od wielkości zadania.

Paweł Lula, Katedra Systemów Obliczeniowych, Uniwersytet Ekonomiczny w Krakowie

background image

2008-10-07

15

29

Sortowania przez wybieranie (1)

import java.io.*;

public class SortowaniePrzezWybieranie {

static void sortuj(int [] liczby) {

int k, pomoc;
for (int i = 0; i < liczby.length - 1; i++) {

k = i;
for (int j = i; j < liczby.length; j++)

if (liczby[k] > liczby[j])

k = j;

pomoc = liczby[i];
liczby[i] = liczby[k];
liczby[k] = pomoc;

}

}

Paweł Lula, Katedra Systemów Obliczeniowych, Uniwersytet Ekonomiczny w Krakowie

30

Sortowania przez wybieranie (2)

static int czytajLiczbe() throws IOException

{

BufferedReader klaw = new BufferedReader (new

InputStreamReader (System.in));

return Integer.parseInt(klaw.readLine());

}

static void drukujWektor(int [] tab) {

for (int i = 0; i < tab.length; i++)

System.out.print(tab[i] + " ");

System.out.print("\n");

}

Paweł Lula, Katedra Systemów Obliczeniowych, Uniwersytet Ekonomiczny w Krakowie

background image

2008-10-07

16

31

Sortowania przez wybieranie (3)

public static void main(String [] args) throws IOException {

System.out.print("Liczba elementow w wektorze: ");
int n = czytajLiczbe();

int [] wektor = new int[n];

for (int i = 0; i < wektor.length; i++)

wektor[i] = (int) (100 * Math.random());

long czas1, czas2;
czas1 = System.currentTimeMillis();
// czas w milisekundach, jaki upłynął od
// 1 stycznia 1970 roku, godz. 0:00

sortuj(wektor);
czas2 = System.currentTimeMillis();
System.out.println("Czas realizacji obliczen: " + (czas2 - czas1));

}

}

Paweł Lula, Katedra Systemów Obliczeniowych, Uniwersytet Ekonomiczny w Krakowie

32

Sortowania przez wybieranie (4)

Rezultat działania programu:

Liczba elementow w wektorze: 10000

Czas realizacji obliczen: 250

Paweł Lula, Katedra Systemów Obliczeniowych, Uniwersytet Ekonomiczny w Krakowie

background image

2008-10-07

17

33

Czas realizacji algorytmu (1)

Paweł Lula, Katedra Systemów Obliczeniowych, Uniwersytet Ekonomiczny w Krakowie

34

Czas realizacji algorytmu (2)

Czas (milisekundy)

0

20000

40000

60000

80000

100000

120000

0

50000

100000

150000

200000

250000

y = 0,000002 n

2

– 0,0094 n + 286,41

Paweł Lula, Katedra Systemów Obliczeniowych, Uniwersytet Ekonomiczny w Krakowie

background image

2008-10-07

18

Oszacowanie czasu realizacji algorytmu (1)

35

Paweł Lula, Katedra Systemów Obliczeniowych, Uniwersytet Ekonomiczny w Krakowie

Oszacowanie czasu realizacji algorytmu (2)

Analiza powyższych danych pozwala stwierdzić, że czas
obliczeń uzależniony jest przede wszystkim od składnika:

0,000002 n

2

Składnik ten nazywany jest składnikiem dominującym.

Po pominięciu stałych współczynników można stwierdzić, że
zależność pomiędzy czasem wykonania a wielkością zadania
ma charakter funkcji kwadratowej. Kwadratowy charakter
zależności uwidacznia się w coraz większym stopniu wraz ze
wzrostem wielkości zadania.

36

Paweł Lula, Katedra Systemów Obliczeniowych, Uniwersytet Ekonomiczny w Krakowie

background image

2008-10-07

19

Cechy empirycznego określania złożoności

Zalety:

otrzymane czasy obliczeń są proste w interpretacji

Wady:

konieczność wielokrotnego uruchamiania programu (dla złożonych algorytmów
może to być bardzo czasochłonne),

uzyskane wyniki dotyczą zastosowanego w obliczeniach zestawu danych (trudno
jest określić czas realizacji dla przypadku „najlepszego”, najgorszego” oraz
„przeciętnego”),

wyniki dotyczą zwykle stosunkowo niewielkich zbiorów danych – nie wiadomo, czy
dla zbiorów o większym rozmiarze charakter zależności się nie zmieni,

czas jest uzależniony od szybkości i architektury komputera, języka programowanie,
techniki translacji, systemu operacyjnego – trudna porównywalność wyników

z uwagi na wielozadaniowy charakter systemów operacyjnych trudno jest określić,
jaka część czasu była rzeczywiście przeznaczona na realizację analizowanego
programu.

37

Paweł Lula, Katedra Systemów Obliczeniowych, Uniwersytet Ekonomiczny w Krakowie

38

Bezpośrednia analiza algorytmów

Analiza dotyczy:

charakteru zależności (np. zależność liniowa lub kwadratowa), a nie jej
dokładnej postaci (wzór funkcji) – uwzględniany jest element dominujący,
pomijane są współczynniki stałe

górnego i dolnego ograniczenia czasu realizacji algorytmu (a nie czasu
realizacji algorytmu)

górne ograniczenie – czas realizacji algorytmu jest nie większy niż ...
(ale może być krótszy) – przypadek pesymistyczny,

dolne ograniczenie – czas realizacji algorytmu jest nie mniejszy niż ...
(ale może być dłuższy) – przypadek optymistyczny,

zachowania się algorytmu dla zbiorów danych o dużej wielkości (czyli dla
wszystkich n większych od pewnej wartości n

0

)

Paweł Lula, Katedra Systemów Obliczeniowych, Uniwersytet Ekonomiczny w Krakowie

background image

2008-10-07

20

Górne ograniczenie czasu realizacji algorytmu (1)

f(n) – czas realizacji algorytmu (zależny od n)

f(n) zależy od wielu czynników i podanie dokładnego
charakteru zależności jest trudne

łatwiej jest zdefiniować ograniczenie górne dla f(n).

39

f(n)

n

c g(n)

Paweł Lula, Katedra Systemów Obliczeniowych, Uniwersytet Ekonomiczny w Krakowie

Górne ograniczenie czasu realizacji algorytmu (2)

Czas realizacji algorytmu jest rzędu co najwyżej g(n), jeśli
istnieją stała rzeczywista c > 0 i stała naturalna n

0

takie, że

nierówność f(n) ≤ c g(n) zachodzi dla każdego n ≥ n

0

.

Zbiór wszystkich funkcji f(n) spełniających powyższe
ograniczenie określany jest jako O(g(n)).

O(g(n)) = {f(n): istnieją dodatnie stałe c oraz n

0

takie, że 0 ≤

f(n) ≤ c g(n) dla wszystkich n ≥ n

0

}

40

Paweł Lula, Katedra Systemów Obliczeniowych, Uniwersytet Ekonomiczny w Krakowie

background image

2008-10-07

21

Górne ograniczenie czasu realizacji algorytmu (3)

Stwierdzenie:

czas realizacji algorytmu wynosi O(g(n))

lub

czas realizacji algorytmu jest rzędu co najwyżej g(n)

lub

algorytm jest klasy O(g(n))

oznacza: że istnieje taka stała c, że dla n ≥ n

0

czas realizacji

algorytmu wynosi co najwyżej c g(n).

41

Paweł Lula, Katedra Systemów Obliczeniowych, Uniwersytet Ekonomiczny w Krakowie

Dolne ograniczenie czasu realizacji algorytmu (4)

Czas realizacji algorytmu jest rzędu co najmniej g(n), jeśli istnieją stała
rzeczywista c > 0 i stała naturalna n

0

takie, że nierówność f(n) ≥ c g(n)

zachodzi dla każdego n ≥ n

0

.

Zbiór wszystkich funkcji spełniających to ograniczenie określany jest jako
Ω(g(n))

Ω(g(n)) = {f(n): istnieją dodatnie stałe c i n

0

takie, że 0 ≤ cg(n) ≤ f(n) dla

wszystkich n ≥ n

0

}

42

f(n)

n

c g(n)

Paweł Lula, Katedra Systemów Obliczeniowych, Uniwersytet Ekonomiczny w Krakowie

background image

2008-10-07

22

Dolne i górne ograniczenie czasu realizacji algorytmu (1)

Czas realizacji algorytmu jest dokładnie rzędu g(n) jeśli istnieją
stała rzeczywista c

1

> 0, c

2

> 0 i stała naturalna n

0

takie, że

nierówność c

1

g(n) ≤ f(n) ≤ c

2

g(n) zachodzi dla każdego n ≥ n

0

.

43

f(n)

n

c

1

g(n)

c

2

g(n)

Paweł Lula, Katedra Systemów Obliczeniowych, Uniwersytet Ekonomiczny w Krakowie

Dolne i górne ograniczenie czasu realizacji algorytmu (2)

Zbiór wszystkich funkcji spełniających to ograniczenie
określany jest jako Θ(g(n))

Θ(g(n)) = {f(n); istnieją dodatnie stałe c

1

, c

2

i n

0

takie, że 0 ≤ c

1

g(n) ≤ f(n) ≤ c

2

g(n) dla wszystkich n ≥ n

0

}

44

Paweł Lula, Katedra Systemów Obliczeniowych, Uniwersytet Ekonomiczny w Krakowie

background image

2008-10-07

23

45

Średnia złożoność obliczeniowa

Średnia złożoność czasowa uwzględnia prawdopodobieństwa
pojawienia się każdego możliwego zestawu danych
wejściowych

Z

i

(n) – i-ty możliwy zestaw danych n-elementowy

p

i

– prawdopodobieństwo wystąpienia i-tego zestawu

T

i

(n) – złożoność czasowa algorytmu dla i-tego zestawu

danych

Średnia złożoność czasowa algorytmu dana jest formułą:

( )

( )

=

i

i

i

ś

r

n

T

p

n

T

Paweł Lula, Katedra Systemów Obliczeniowych, Uniwersytet Ekonomiczny w Krakowie

Złożoność obliczenia sortowania przez wybieranie (1)

static void sortuj(int [] liczby) {

int k, pomoc;
for (int i = 0; i < liczby.length - 1; i++) {

//koszt K1
k = i;

for (int j = i; j < liczby.length; j++)

//koszt K2
if (liczby[k] > liczby[j])

k = j;

//koszt K3
pomoc = liczby[i];
liczby[i] = liczby[k];
liczby[k] = pomoc;

}

}

46

Paweł Lula, Katedra Systemów Obliczeniowych, Uniwersytet Ekonomiczny w Krakowie

background image

2008-10-07

24

Złożoność obliczenia sortowania przez wybieranie (2)

for (int i = 0; i < n - 1; i++)
{

K1

for (int j = i; j < n; j++)
{

K2

}

K3

}

47

Paweł Lula, Katedra Systemów Obliczeniowych, Uniwersytet Ekonomiczny w Krakowie

Złożoność obliczenia sortowania przez wybieranie (3)

for (int i = 0; i < n - 1; i++)

{

K1

(n – 1) * K2

K3

}

48

Paweł Lula, Katedra Systemów Obliczeniowych, Uniwersytet Ekonomiczny w Krakowie

background image

2008-10-07

25

Złożoność obliczenia sortowania przez wybieranie (4)

(n – 1) * K1 + (n – 1) [n * K2 + (n-1) * K2 + ... + 2 * K2] + (n – 1)
* K3 =

= n * K1 – K1 + [½ * (2 + n) * (n – 1) * K2] + n * K3 – K3 =

= n * K1 – K1 + n * K2 – K2 + ½ * n

2

* K2 – ½ * n * K2 + n * K3 –

K3 =

= ½ * K2 * n

2

+ (K1 + ½ * K2 + K3) * n – (K1 + K2 + K3) = O(n

2

)

49

Paweł Lula, Katedra Systemów Obliczeniowych, Uniwersytet Ekonomiczny w Krakowie

50

Rodzaje złożoności (1)

Złożoność logarytmiczna – log n

W każdym kroku algorytmu zadanie o rozmiarze n jest
sprowadzane do zadania o rozmiarze n / 2

Przykład:

algorytm wyszukiwania binarnego jest klasy O(log n)

Przykładowa realizacja wyszukiwania binarnego: Mamy
odszukać wartość 11 w ciągu liczb:

1, 2, 7, 9, 9, 11, 12, 15, 22, 34, 52, 67, 87, 90, 99

1, 2, 7, 9, 9, 11, 12

9, 11, 12

Paweł Lula, Katedra Systemów Obliczeniowych, Uniwersytet Ekonomiczny w Krakowie

background image

2008-10-07

26

51

Rodzaje złożoności (2)

Złożoność liniowa – n

gdy dla każdego elementu pochodzącego z n – elementowego
zbioru danych wykonywana jest stała liczba operacji

Przykłady:

wyszukiwanie sekwencyjne

sumowanie liczb w wektorze

wyznaczanie minimum, maksimum

Paweł Lula, Katedra Systemów Obliczeniowych, Uniwersytet Ekonomiczny w Krakowie

52

Rodzaje złożoności (3)

złożoność liniowo – logarytmiczna – n log n

gdy w każdym kroku zadanie o rozmiarze n jest sprowadzane
do dwóch zadań o rozmiarze n/2, a uzyskane wyniki są
ponownie scalane

Przykład:

sortowanie przez łączenie jest klasy O(n log n)

sortowanie szybkie – jest klasy O(n

2

), ale przeciętny czas

realizacji algorytmu jest rzędu n log n

Paweł Lula, Katedra Systemów Obliczeniowych, Uniwersytet Ekonomiczny w Krakowie

background image

2008-10-07

27

53

Rodzaje złożoności (4)

złożoność kwadratowa – n

2

gdy dla każdej pary elementów realizowana jest pewna, stała
liczba operacji (zwykle algorytmy takie są zapisywane za
pomocą dwóch zagnieżdżonych pętli for)

Przykłady:

proste metody sortowania (przez wstawianie, wybieranie, bąbelkowe)
są klasy O(n

2

), również średni czas realizacji tych metod jest rzędu

O(n

2

)

Paweł Lula, Katedra Systemów Obliczeniowych, Uniwersytet Ekonomiczny w Krakowie

54

Rodzaje złożoności (5)

złożoność wielomianowa stopnia wyższego niż dwa (n

3

, n

4

,

...)

Przykład:

mnożenie macierzy w sposób tradycyjny jest algorytmem
klasy O(n

3

)

Paweł Lula, Katedra Systemów Obliczeniowych, Uniwersytet Ekonomiczny w Krakowie

background image

2008-10-07

28

55

Rodzaje złożoności (6)

Złożoność wykładnicza postaci 2

n

gdy realizowanych jest n kroków, a liczba operacji w każdym z
nich wzrasta w sposób geometryczny

Przykład:

wieże Hanoi

Paweł Lula, Katedra Systemów Obliczeniowych, Uniwersytet Ekonomiczny w Krakowie

56

Rodzaje złożoności (7)

Złożoność wykładnicza typu n!

gdy pewna, stała liczba operacji realizowana jest dla każdej
permutacji n elementów

Przykład:

Tworzenie magicznych kwadratów z n elementów (pierwiastek
z n musi być wartością całkowitą)

Algorytm postępowania: tworzymy kolejną permutację,
wpisujemy do kwadratu i sprawdzamy, czy spełnia konieczne
warunki.

Paweł Lula, Katedra Systemów Obliczeniowych, Uniwersytet Ekonomiczny w Krakowie

background image

2008-10-07

29

57

Rodzaje złożoności (8)

Paweł Lula, Katedra Systemów Obliczeniowych, Uniwersytet Ekonomiczny w Krakowie


Wyszukiwarka

Podobne podstrony:
AiSD Wyklad4 dzienne id 53497 Nieznany (2)
AiSD Wyklad9 dzienne id 53501 Nieznany
E1 Teoria 2008 09 id 149145 Nieznany
AiSD Wyklad11 dzienne id 53494 Nieznany
AiSD Wyklad6 dzienne id 53499 Nieznany (2)
AiSD Wyklad7 dzienne id 53500 Nieznany (2)
AiSD Wyklad3 dzienne id 53496 Nieznany (2)
Etap wojewodzki 2008 2009 id 16 Nieznany
Lab 6 7 2008 2009 id 258170 Nieznany
PAiRAII Instr 2008 lab5 id 3455 Nieznany
PAiRAII Instr 2008 lab3 id 3455 Nieznany
AiSD Wyklad5 dzienne id 53498 Nieznany
AiSD Wyklad4 dzienne id 53497 Nieznany (2)
MIGRENA 2008 id 300249 Nieznany
odp maj 2008 id 332083 Nieznany
2008 czerwiec (egzwst) (1)id 26 Nieznany
AiSD skrypt id 53503 Nieznany (2)
ant41 2008 id 65577 Nieznany (2)

więcej podobnych podstron