background image

 

Krzysztof Pancerz

Algorytmy i struktury danych

Algorytmy 

i

struktury danych

WYKŁAD 1

Dr inż. Krzysztof Pancerz

background image

 

Krzysztof Pancerz

Algorytmy i struktury danych

Proces tworzenia i uruchamiania programów

background image

 

Krzysztof Pancerz

Algorytmy i struktury danych

Algorytm, program

Algorytm – przepis postępowania prowadzący 
do rozwiązania określonego zadania.

Program – zapis algorytmu i danych w 
konkretnym języku programowania.

Generalnie, program realizuje przetwarzanie 
określonych danych wejściowych (podawanych 
przez użytkownika) w dane wyjściowe (wynik 
działania programu).

background image

 

Krzysztof Pancerz

Algorytmy i struktury danych

Algorytm, program (cd.)

Algorytmy + Struktury danych 

=

 Programy

(

tytuł książki Niklausa Wirtha

)

background image

 

Krzysztof Pancerz

Algorytmy i struktury danych

Sposoby reprezentacji algorytmów

Język naturalny.

Lista kroków.

Drzewo algorytmu.

Schemat blokowy.

Pseudokod (mniej formalny, bardziej intuicyjny 
system notacji).

Kod w języku programowania.

background image

 

Krzysztof Pancerz

Algorytmy i struktury danych

Własności algorytmów

Skończoność (realizowany ciąg operacji 
powinien mieć swój koniec).

Określoność (operacje oraz porządek ich 
wykonywania powinny być ściśle określone).

Ogólność (algorytm powinien odnosić się nie 
tylko do jednego szczególnego przypadku, ale 
do pewnej klasy zadań).

Efektywność (algorytm powinien prowadzić do 
rozwiązania możliwie najprostszą drogą).

background image

 

Krzysztof Pancerz

Algorytmy i struktury danych

Całkowita poprawność algorytmu

Algorytm jest całkowicie poprawny jeśli dla 
każdych danych wejściowych spełniających 
wymagane warunki wstępne zatrzymuje się i 
daje poprawny wynik. 

Dowód poprawności algorytmu:

udowodnienie własności stopu (dla każdych danych 

wejściowych spełniających wymagane warunki 

wstępne algorytm zatrzymuje się),

udowodnienie częściowej poprawności (jeśli 

algorytm zatrzymuje się to daje poprawny wynik).

background image

 

Krzysztof Pancerz

Algorytmy i struktury danych

Całkowita poprawność algorytmu (cd.)

Całkowita poprawność 

Własność stopu 

Częściowa poprawność

background image

 

Krzysztof Pancerz

Algorytmy i struktury danych

Podstawowe typy danych w języku C/C++

Typ danej określa zbiór jej możliwych wartości 
oraz zestaw operacji, które można nad nimi 
wykonywać. Jednocześnie określa on rozmiar 
pamięci potrzebny do przechowywania danej 
oraz sposób zapisu danej.

background image

 

Krzysztof Pancerz

Algorytmy i struktury danych

Podstawowe typy danych w języku C/C++ (cd.)

short, intlong – typy reprezentujące liczby 
całkowite,

usigned short, unsigned intunsigned long 
– typy reprezentujące liczby całkowite,

floatdouble – typy reprezentujące liczby 
rzeczywiste,

char – typ reprezentujący znaki.

background image

 

Krzysztof Pancerz

Algorytmy i struktury danych

Literały

Literały całkowite 

np. 12, -34

Literały rzeczywiste 

np. 1.2, -3.45, 0.1E2, 1.0E-10

Literały znakowe

np. 'a', '&'

background image

 

Krzysztof Pancerz

Algorytmy i struktury danych

Zmienne

Zmienna jest identyfikatorem, który podczas 
działania programu może przyjmować różne 
wartości ze zbioru określonego za pomocą 
typu. Każda zmienna używana w programie 
musi zostać zadeklarowana.

Deklaracja zmiennej:
typ nazwa;
Przykład deklaracji:
int a;

background image

 

Krzysztof Pancerz

Algorytmy i struktury danych

Operator przypisania

Operator przypisania = służy do ustalenia 

wartości zmiennej.

Przykład
x=y oznacza, że wartość przypisywana jest do 

zmiennej x.

background image

 

Krzysztof Pancerz

Algorytmy i struktury danych

Operatory arytmetyczne

+

dodawanie

odejmowanie

*

mnożenie

/

dzielenie

%

reszta z dzielenia

-

zmiana znaku liczby

background image

 

Krzysztof Pancerz

Algorytmy i struktury danych

Operatory arytmetyczne (cd.)

++

inkrementacja (zwiększanie o 1)

- - 

dekrementacja (zmniejszanie o 1)

background image

 

Krzysztof Pancerz

Algorytmy i struktury danych

Operatory logiczne

&&

iloczyn logiczny (koniunkcja)

||

suma logiczna (alternatywa)

!

negacja

a

b

a && b

a || b

!a

false

flase

false

false

true

false

true

false

true

true

true

false

false

true

false

true

true

true

true

false

background image

 

Krzysztof Pancerz

Algorytmy i struktury danych

Operatory relacyjne

==

równy

!=

różny

<

mniejszy

<=

mniejszy lub równy

>

większy

>=

większy lub równy

background image

 

Krzysztof Pancerz

Algorytmy i struktury danych

Instrukcja warunkowa IF

if (warunek)
instrukcja

 Jeśli warunek jest prawdziwy (true), instrukcja zostaje 

wykonana i sterowanie przenoszone jest do kolejnych instrukcji 

po instrukcji warunkowej. 

 Jeśli warunek nie jest prawdziwy (false), instrukcja nie zostaje 

wykonana, a sterowanie przenoszone jest bezpośrednio do 
kolejnych instrukcji po instrukcji warunkowej. 

 instrukcja może być instrukcją złożoną { }.

background image

 

Krzysztof Pancerz

Algorytmy i struktury danych

Instrukcja warunkowa IF-ELSE

if (warunek)
  instrukcja1
else
  instrukcja2

 Jeśli warunek jest prawdziwy (true), tylko instrukcja1 zostaje 

wykonana i sterowanie przenoszone jest do kolejnych  instrukcji 

po instrukcji warunkowej. 

 Jeśli warunek nie jest prawdziwy (false), tylko instrukcja2 zostaje 

wykonana i sterowanie przenoszone jest do kolejnych instrukcji 
po instrukcji warunkowej. 

 instrukcja1 oraz instrukcja2 mogą być instrukcjami złożonymi { }.

background image

 

Krzysztof Pancerz

Algorytmy i struktury danych

Instrukcja iteracyjna (pętla) WHILE

while (warunek)
  instrukcja

 Dopóki warunek jest prawdziwy (true), instrukcja jest 

wykonywana. Gdy warunek przestaje być prawdziwy (false) 

sterowanie przenoszone jest do kolejnych instrukcji po 
instrukcji WHILE. 

 instrukcja może być instrukcją złożoną { }.

background image

 

Krzysztof Pancerz

Algorytmy i struktury danych

Instrukcja iteracyjna (pętla) DO-WHILE

do {
  instrukcja
}
while (warunek
);

 Pętla DO-WHILE działa podobnie jak pętla WHILE. Różnica 

polega na tym, że warunek jest testowany po wykonaniu 

instrukcji. W związku z tym instrukcja zostaje wykonana co 
najmniej jeden raz. 

background image

 

Krzysztof Pancerz

Algorytmy i struktury danych

Instrukcja iteracyjna (pętla) FOR

for (zm=pocz; zm<=koniec; zm++)
  instrukcja

 pocz oraz koniec są wyrażeniami typu 

całkowitego.

 Zmiennej zm przypisywana jest 

wartość pocz. Dopóki wartość zmiennej 

jest mniejsza lub równa wartości koniec
instrukcja jest wykonywana. Za każdym 

razem wartość zmiennej zwiększana 
jest o 1. Gdy wartość zmiennej zm staje 

się większa od wartości koniec 
sterowanie jest przenoszone do 
kolejnych instrukcji po instrukcji FOR.

 instrukcja może być instrukcją złożoną 

{ }.

background image

 

Krzysztof Pancerz

Algorytmy i struktury danych

Instrukcja iteracyjna (pętla) FOR (cd.)

for (zm=pocz; zm>=koniec; zm--)
  instrukcja

 pocz oraz koniec są wyrażeniami typu 

całkowitego.

 Zmiennej zm przypisywana jest 

wartość pocz. Dopóki wartość zmiennej 

jest większa lub równa wartości koniec
instrukcja jest wykonywana. Za każdym 

razem wartość zmiennej zmniejszana 
jest o 1. Gdy wartość zmiennej zm staje 

się mniejsza od wartości koniec 
sterowanie jest przenoszone do 
kolejnych instrukcji po instrukcji FOR.

 instrukcja może być instrukcją złożoną 

{ }.

background image

 

Krzysztof Pancerz

Algorytmy i struktury danych

Wczytywanie i wypisywanie danych

cin>>zmienna;

cout<<zmienna;

cin – standardowy strumień wejściowy 
(klawiatura)
cout – standardowy strumień wyjściowy (ekran 
terminala)

background image

 

Krzysztof Pancerz

Algorytmy i struktury danych

Struktura najprostszego programu w języku C/C++

void main( )

{

// ... instrukcje do wykonania ...

}

background image

 

Krzysztof Pancerz

Algorytmy i struktury danych

Podstawowe struktury algorytmów

Algorytmy liniowe.

Algorytmy z rozgałęzieniami.

Algorytmy cykliczne (z pętlami).

background image

 

Krzysztof Pancerz

Algorytmy i struktury danych

Przykład 1 (algorytm liniowy)

Napisać algorytm mnożenia dwóch liczb 
całkowitych.

background image

 

Krzysztof Pancerz

Algorytmy i struktury danych

Rozwiązanie przykładu 1

background image

 

Krzysztof Pancerz

Algorytmy i struktury danych

Przykład 2 (algorytm z rozgałęzieniami)

Napisać algorytm znajdujący maksymalną z 
trzech liczb rzeczywistych aoraz c.

background image

 

Krzysztof Pancerz

Algorytmy i struktury danych

Rozwiązanie przykładu 2

background image

 

Krzysztof Pancerz

Algorytmy i struktury danych

Przykład 3 (algorytm z rozgałęzieniami)

Napisać algorytm rozwiązujący równanie 
kwadratowe:

ax

2

+bx+c=0

przy założeniu, że a≠0.

background image

 

Krzysztof Pancerz

Algorytmy i struktury danych

Rozwiązanie przykładu 3

background image

 

Krzysztof Pancerz

Algorytmy i struktury danych

Przykład 4 (algorytm cykliczny)

Napisać algorytm dodający liczby całkowite 
podawane przez użytkownika aż do momentu 
gdy ich suma przekroczy wartość 100.

background image

 

Krzysztof Pancerz

Algorytmy i struktury danych

Rozwiązanie przykładu 4

background image

 

Krzysztof Pancerz

Algorytmy i struktury danych

Tablice

Tablica jest zbiorem elementów tego samego 
typu. 

Każdy element jest identyfikowany przez indeks 
(numer pozycji na której się znajduje).

W pamięci komputera tablica zajmuje ciągły 
obszar komórek pamięci.

Tablica charakteryzuje się bezpośrednim 
dostępem do elementów. Dostęp ten uzyskuje 
się poprzez podanie odpowiednich indeksów 
elementów.

background image

 

Krzysztof Pancerz

Algorytmy i struktury danych

Tablice jednowymiarowe

A – nazwa tablicy

n – maksymalna liczba elementów, które mogą 
być przechowywane w tablicy (rozmiar tablicy).

i-ty element jest przechowywany w tablicy w 
komórce o indeksie i

background image

 

Krzysztof Pancerz

Algorytmy i struktury danych

Tablice jednowymiarowe (cd.)

Numeracja pozycji rozpoczyna się zawsze 
od zera w języku C/C++
, tj. indeksem 
pierwszego elementu jest 0, następnego 1, itd.

background image

 

Krzysztof Pancerz

Algorytmy i struktury danych

Tablica w pamięci komputera

background image

 

Krzysztof Pancerz

Algorytmy i struktury danych

Tablice dwuwymiarowe

Każdy element w tablicy dwuwymiarowej jest 
identyfikowany przez dwa indeksy (indeks 
wiersza oraz indeks kolumny).

background image

 

Krzysztof Pancerz

Algorytmy i struktury danych

Tablice jednowymiarowe w języku C/C++

Deklaracja tablicy o ustalonym rozmiarze

typ_elementów nazwa_tablicy[rozmiar];

Przykłady

int A[50];
char znaki[100];

background image

 

Krzysztof Pancerz

Algorytmy i struktury danych

Tablice jednowymiarowe w języku C/C++(cd.)

Inicjalizacja tablic

Przykład
int tab[ ]={1, -5, 0, 34};

Odwołanie do elementów tablicy

nazwa_tablicy[indeks_elementu];
Przykłady
A[5];
znaki[0];

Określenie rozmiaru tablicy w bajtach

sizeof(nazwa_tablicy);

background image

 

Krzysztof Pancerz

Algorytmy i struktury danych

Tablice dwuwymiarowe w języku C/C++

Deklaracja tablicy dwuwymiarowej o ustalonym 
rozmiarze:

typ_elementów nazwa_tablicy[liczba_wierszy

[liczba_kolumn];

Przykłady

float macierz[50][100];
char a[5][5];

background image

 

Krzysztof Pancerz

Algorytmy i struktury danych

Tablice dwuwymiarowe w języku C/C++

Inicjalizacja tablicy

Przykład
char tab[ ][ ]={ {'a', 'b', 'c'}, {'d', 'e', 'f'} };

Odwołanie do elementów tablicy

nazwa_tablicy[indeks_wiersza][indeks_kolumny];
Przykłady
macierz[5][8];
a[0][0];

background image

 

Krzysztof Pancerz

Algorytmy i struktury danych

Wczytywanie elementów tablicy jednowymiarowej

A – tablica o rozmiarze n

background image

 

Krzysztof Pancerz

Algorytmy i struktury danych

Wypisywanie elementów tablicy jednowymiarowej

A – tablica o rozmiarze n

background image

 

Krzysztof Pancerz

Algorytmy i struktury danych

Wyszukiwanie największego elementu w tablicy 

jednowymiarowej

A – tablica o rozmiarze n

max – indeks aktualnie 
największego elementu 
w tablicy

background image

 

Krzysztof Pancerz

Algorytmy i struktury danych

Wyszukiwanie najmniejszego elementu w tablicy 

jednowymiarowej

A – tablica o rozmiarze n

min – indeks aktualnie 
najmniejszego elementu 
w tablicy

min

background image

 

Krzysztof Pancerz

Algorytmy i struktury danych

Zliczanie elementów tablicy jednowymiarowej 

należących do danego przedziału

A – tablica o rozmiarze n

a – lewy kraniec 
przedziału

b – prawy kraniec 
przedziału

background image

 

Krzysztof Pancerz

Algorytmy i struktury danych

Wczytywanie elementów tablicy dwuwymiarowej

M – tablica (macierz) o 
rozmiarze m×n

background image

 

Krzysztof Pancerz

Algorytmy i struktury danych

Grafy

Graf (lub graf nieskierowanyskłada się z 

niepustego skończonego zbioru wierzchołków 
(węzłów) V oraz skończonego zbioru krawędzi 
będących nieuporządkowanymi parami elementów 
ze zbioru V.

background image

 

Krzysztof Pancerz

Algorytmy i struktury danych

Grafy (cd.)

Przykład

G=V , E 
={a , b , c , d }

E={a , b ,b , c ,b , d  ,a , d }

background image

 

Krzysztof Pancerz

Algorytmy i struktury danych

Grafy (cd.)

Graf skierowany składa się z niepustego 

skończonego zbioru wierzchołków (węzłów) V oraz 
skończonego zbioru krawędzi będących 
uporządkowanymi parami elementów ze zbioru V.

background image

 

Krzysztof Pancerz

Algorytmy i struktury danych

Grafy (cd.)

Przykład

G=V , E 
={a , b , c , d }

E={a , b ,b , a ,b , c ,b , d  ,d , a}

background image

 

Krzysztof Pancerz

Algorytmy i struktury danych

Grafy (cd.)

Krawędź (i,j), gdzie  oraz  są wierzchołkami, 
nazywa się krawędzią incydentną z wierzchołkami 
i oraz j

Krawędź (i,i) incydentna z pojedynczym 
wierzchołkiem nazywana jest pętlą.

Krawędzie incydentne z wierzchołkami oraz j
gdzie ij, nazywane są krawędziami 
równoległymi
.

Grafem prostym nazywany jest graf, który nie 
zawiera zarówno pętli jak i krawędzi równoległych.

background image

 

Krzysztof Pancerz

Algorytmy i struktury danych

Grafy (cd.)

Przykład

background image

 

Krzysztof Pancerz

Algorytmy i struktury danych

Reprezentacja grafów

Macierz sąsiedztwa

Wiersze i kolumny macierzy sąsiedztwa m 
etykietowane są uporządkowanymi parami 
wierzchołków.

Jeśli (i,j) jest krawędzią, to m(i,j)=1.

Jeśli (i,j) nie jest krawędzią, to m(i,j)=0.

background image

 

Krzysztof Pancerz

Algorytmy i struktury danych

Reprezentacja grafów

Przykład

m=

[

0  1  0  1 
1  0  1  1 
0  1  0  0 
1  1  0  0

]

background image

 

Krzysztof Pancerz

Algorytmy i struktury danych

Reprezentacja grafów

Przykład

m=

[

0  1  0  0 
1  0  1  1 
0  0  0  0 
1  0  0  0

]

background image

 

Krzysztof Pancerz

Algorytmy i struktury danych

Grafy (cd.)

Graf z wagami (skierowany lub nieskierowany) 

składa się ze zbioru wierzchołków V, zbioru 
krawędzi oraz funkcji wagowej w 
przyporządkowującej każdej krawędzi ze zbioru  
liczbę rzeczywistą. 

Wartość          dla           jest nazywana wagą lub 
kosztem krawędzi e.

e

eE

background image

 

Krzysztof Pancerz

Algorytmy i struktury danych

Grafy (cd.)

Przykład

background image

 

Krzysztof Pancerz

Algorytmy i struktury danych

Grafy (cd.)

Niech u oraz v będą wierzchołkami grafu. Ścieżką z u 

do v długości n nazywamy ciąg n+1 wierzchołków 
oraz n krawędzi o początku w wierzchołku u i końcu 
w wierzchołku v:  

Ścieżka prosta z do jest ścieżką z do bez 

powtarzających się wierzchołków.

Cykl jest ścieżką o niezerowej długości z wierzchołka 

do tego samego wierzchołka bez powtarzających 
się krawędzi.

u , e

1

, v

1

,e

2

, v

2

,... , v

n−1

, e

n

, v

background image

 

Krzysztof Pancerz

Algorytmy i struktury danych

Grafy (cd.)

Przykład

Ścieżka: (a, (a,b), b, (b,d), d)
Cykl: (a, (a,b), b, (b,d), d, (d,a), a)

background image

 

Krzysztof Pancerz

Algorytmy i struktury danych

Grafy (cd.)

Graf spójny jest grafem w którym istnieje ścieżka z u 

do dla każdego wierzchołka u oraz v.

Graf acykliczny jest grafem, który nie zawiera cykli.

background image

 

Krzysztof Pancerz

Algorytmy i struktury danych

Drzewa

Drzewo (lub drzewo wolneT jest grafem prostym, 

który jest acykliczny i spójny.

Przykład

background image

 

Krzysztof Pancerz

Algorytmy i struktury danych

Drzewa (cd.)

Drzewo z korzeniem jest drzewem z wyróżnionym 

jednym wierzchołkiem nazywanym korzeniem. 

Przykład

liście

background image

 

Krzysztof Pancerz

Algorytmy i struktury danych

Drzewa (cd.)

Drzewo binarne jest drzewem z korzeniem, w którym 

każdy wierzchołek ma co najwyżej dwa wierzchołki 
potomne.  

Przykład