Praca Mgr prezentacja

background image

Algorytmy Grafowe

background image

Spis treści

Wprowadzenie do Gr

Wprowadzenie do Gr

afów

afów

1 Grafy – podstawowe defin

icje

2 Graf prosty i graf ogólny

3 Elementy grafów

4 Rodzaje grafów

5 Grafy i ich reprezentacje

Algorytmy Grafowe

Algorytmy Grafowe

1 Algorytm Forda-

Bellmana

2 Algorytm Dijkstry

3 Algorytm Floyda

background image

Wprowadzenie do

Grafów

1 Grafy – podstawowe definicje

2 Graf prosty i graf ogólny

3 Elementy grafów

4 Rodzaje grafów

5 Grafy i ich reprezentacje

background image

Algorytmy Grafowe

1 Algorytm Forda-Bellmana

2 Algorytm Dijkstry

3 Algorytm Floyda

background image

Grafy – podstawowe

definicje

Graf: G = (V, E)
Zbiór wierzchołków grafu:

V = {1, 2, …, n}

Zbiór krawędzi grafu:

E  { {i, j} : ij i i, jV}

Rysunek grafu:

- wierzchołek i przedstawia symbol
- krawędź {i, j} przedstawia odcinek łączący dwa

wierzchołki

Przykład grafu i jego rysunek:
G = (V, E)

V = {1, 2, 3, 4, 5, 6, 7 }
E = { {1, 2 }, {1, 3 }, {1, 4 }, {2, 3 }, {3, 4 }, {6, 7 } }

Spis treści

background image

Graf prosty i graf ogólny

Grafem prostym, nazywamy graf G = (V, E) – (gdzie V jest

niepustym

skończonym

zbiorem

elementów

zwanych

wierzchołkami lub węzłami, a E jest skończonym zbiorem

nieuporządkowanych par różnych (w parach) elementów zbioru V

zwanym krawędziami). W każdym grafie prostym istnieje co

najwyżej jedna krawędź łącząca daną parę wierzchołków.

Jednakże wiele wyników dotyczących grafów prostych można

rozszerzyć tak, by dotyczyły obiektów ogólniejszych, w których

dwa wierzchołki mogą być połączone więcej niż jedna krawędzią.

Ponadto możemy pozbyć się ograniczenia mówiącego, że

krawędź łączy dwa różne wierzchołki i dopuścić pętle.

Spis treści

background image

Graf prosty i graf ogólny

Powyższy obiekt, w którym mogą występować krawędzie

wielokrotne i pętle, nazywamy grafem ogólnym, lub po prostu
grafem
. Zatem każdy graf prosty jest grafem ogólnym, ale nie
każdy graf ogólny jest grafem prostym. Zatem graf G składa się
z niepustego zbioru skończonego V (G), którego elementy
nazywamy wierzchołkami, i skończonej rodziny E (G) par nie
uporządkowanych (niekoniecznie różnych) elementów zbioru V
(G) nazywanych krawędziami.

Zatem na rysunku 4 zbiorem wierzchołków V (G) jest zbiór {u,

v, w, z}, a rodzina E (G) składa się z krawędzi uv, vv
(występującej dwukrotnie), vw (występującej trzykrotnie), uw
(występującej dwukrotnie) i wz.

Użycie słowa „rodzina” oznacza, że dopuszczamy istnienie

krawędzi wielokrotnych, zbioru z powtórzeniami, czyli
zbiorowości elementów z których niektóre mogą występować
wielokrotnie.

Spis treści

background image

Elementy grafów

Spis treści

Trasą w grafie G łączącą wierzchołki x i y nazywamy ciąg x,
e1, u, e2, v…, w, ek-1, y,
gdzie e1 = {x,u}, e2 = {u,v}, …,
ek-1 = {w,y}
i k ≥ 1, inaczej mówiąc trasa jest to „linia” po
której przedostajemy się z jednego wierzchołka do innego,
składająca się z ciągu kolejno przechodzonych krawędzi.
Na przykład ciąg P

Q

R w grafie przedstawionym na

rysunku 5 jest trasą o długości 2, a ciąg P

S

Q

T

S

R jest trasą długości 5.

background image

Elementy grafów

Spis treści

Drogą w grafie G= (V, E) nazywamy ciąg

wierzchołków vi

V, gdzie i = 1, …n, taki, że dla

dowolnego k = 1, …n-1, (vk, vk+1)

E, czyli taki ciąg

jego wierzchołków, że każde dwa kolejne wierzchołki
w tym ciągu są połączone trasą, gdzie wszystkie
krawędzie i wierzchołki są różne. Inaczej mówiąc
drogą nazywamy taką trasę, w której żaden
wierzchołek nie występuje więcej niż jeden raz.

Na przykład P

T

S

R jest drogą.

background image

Elementy grafów

Spis treści

Drogą w grafie G= (V, E) nazywamy ciąg wierzchołków vi

V,

gdzie i = 1, …n, taki, że dla dowolnego k = 1, …n-1, (vk,
vk+1)

E, czyli taki ciąg jego wierzchołków, że każde dwa

kolejne wierzchołki w tym ciągu są połączone trasą, gdzie
wszystkie krawędzie i wierzchołki są różne. Inaczej mówiąc
drogą nazywamy taką trasę, w której żaden wierzchołek nie
występuje więcej niż jeden raz.

Na przykład P

T

S

R jest drogą.

Drogę v = (v1,…, vn) w grafie

G = (V, E) nazywamy

skończoną, jeśli istnieje n

N, dla którego nie ma

określonego wierzchołka vn+1, długość tą oznacza

się

v= n -1.

Drogę (lub ścieżkę) v = (v1,…, vn) w grafie G = (V,E)
nazywamy zamkniętą, jeśli v1 = vn.

background image

Elementy grafów

Spis treści

Ścieżka i cykl
Ścieżką
nazywamy trasę, w której wszystkie krawędzie
są różne, ponadto jeśli wierzchołki są różne to taka
ścieżkę nazywamy drogą. Natomiast cyklem nazywamy
ścieżkę zamkniętą zawierającą co najmniej jedną
krawędź, można zauważyć że każda pętla lub para
krawędzi wielokrotnych tworzą cykl.

Na przykład: trasa v

w

x

y

z

z

x jest

ścieżką

trasa v

w

x

y

z

x

v jest ścieżką

zamkniętą

a trasa v

w

x

v jest cyklem

background image

Elementy grafów

Spis treści

Stopnie wierzchołków na przykładzie grafu

skierowanego.

Dla grafu G = (V, E) i jego łuku a = (i, j)

E mówimy że

wierzchołki i, j są incydentne z łukiem a tzn. że łuk a prowadzi
z wierzchołka i do j. Wierzchołki incydentne z danym łukiem
nazywamy odpowiednio jego początkiem (i) i końcem (j).

V

+

(i) – zbiór końców łuków wychodzących z wierzchołka i :

V

+

(i) = { j

V : (i, j)

E }

V

-

(i) – zbiór początków łuków wchodzących do wierzchołka i :

V

-

(i) = { j

V : (i, j)

E }

d

+

(i) = | V

+

(i) | – stopień wyjściowy wierzchołka i

d

-

(i) = | V

-

(i) | – stopień wejściowy wierzchołka i

d(i) = d

+

(i) + d

-

(i) – stopień wierzchołka i

background image

Elementy grafów

Spis treści

Przykład wyznaczania stopni wierzchołków w grafie

V

+

(3) = {2, 4, 5}  d

+

(3) = 3; V

-

(3) = {2, 5}  d

-

(3) = 2;

d(3) = 5

V

+

(6) = {6}  d

+

(6) = 1; V

-

(6) = {6}  d

-

(6) = 1; d(6) = 2

background image

Rodzaje grafów

Spis treści

Wśród grafów rozróżniamy następujące rodzaje:
Graf pusty –
graf, którego zbiór krawędzi jest zbiorem
pustym tzn. składa się tylko z wierzchołków, oznaczany
Nn gdzie n to liczba wierzchołków

Graf pełny – graf prosty w którym dowolne dwa
wierzchołki są sąsiednie, oznaczany Kn gdzie n to liczba
wierzchołków a liczba krawędzi to n ( n - 1 ) / 2

background image

Rodzaje grafów

Spis treści

Graf cykliczny – Graf spójny, regularny stopnia

drugiego oznaczany jako Cn gdzie n to liczba
wierzchołków.

Graf liniowy – Graf otrzymany z grafu cyklicznego

poprzez usunięcie jednej krawędzi jest oznaczany przez
Pn gdzie n to liczba wierzchołków.

background image

Rodzaje grafów

Spis treści

Graf koło – Graf powstały z grafu cyklicznego poprzez

połączenie każdego wierzchołka z nowym, dodanym
wierzchołkiem oznaczany Wn gdzie n to liczba
wierzchołków – rys 12.

Graf planarny – to graf, który można przedstawić na

płaszczyźnie tak, by żadne dwie krawędzie się nie
przecinały – rys 13.

background image

Rodzaje grafów

Spis treści

Graf dwudzielny – Graf jest dwudzielny jeżeli zbiór

wierzchołków grafu G można podzielić na dwa rozłączne
zbiory V

1

i V

2

w taki sposób, że każda krawędź grafu G

łączy dowolny wierzchołek ze zbioru V

1

z dowolnym

wierzchołkiem ze zbioru V

2

i jest oznaczany K

r

, s gdzie r

to ilość wierzchołków zbioru V

1

, a s to ilość

wierzchołków zbioru V

2

.

background image

Rodzaje grafów

Spis treści

Graf regularny – każdy wierzchołek grafu ma taki sam

stopień. Jeżeli każdy wierzchołek jest stopnia r, to graf
jest regularny stopnia r i oznacza się go Kn gdzie n to
liczba wierzchołków. Szczególne znaczenie mają grafy
kubiczne, tzn. grafy regularne stopnia 3.

background image

Rodzaje grafów

Spis treści

Graf kubiczny (w tym graf Petersena) – Graf r-

regularny jest grafem, dla którego stopień każdego
wierzchołka jest równy r. Graf 3-regularny nazywamy
grafem kubicznym, w którym wszystkie wierzchołki
mają stopień równy 3, tzn. że z każdego wierzchołka
wychodzi tyle samo krawędzi tj. 3.

background image

Rodzaje grafów

Spis treści

Sześć postaci grafu Petersena

background image

Rodzaje grafów

Spis treści

background image

Rodzaje grafów

Spis treści

Graf spójny i graf niespójny – graf jest spójny wtedy i

tylko wtedy, gdy każda para wierzchołków jest
połączona drogą, w przeciwnym razie nazywamy go
grafem nie spójnym. Poniżej umieszczono przykład dla
pary wierzchołków v, w.

background image

Grafy i ich reprezentacje

Spis treści

Graf skierowany i nieskierowany

W informatyce grafem nazywamy strukturę G=(V, E) składającą

się z węzłów (wierzchołków, oznaczanych przez V) wzajemnie
połączonych za pomocą krawędzi (oznaczanych przez E).

Grafy dzielimy na grafy skierowane i nieskierowane:

Graf nieskierowany Graf skierowany

background image

Grafy i ich reprezentacje

Spis treści

Graf skierowany (lub diagraf) G jest opisaną parą (V, E),

gdzie V jest zbiorem skończonym, a E jest relacją binarną
w V. Zbiór V jest nazywany zbiorem wierzchołków G, a
jego elementy są nazywane wierzchołkami. Zbiór E jest
nazywany zbiorem krawędzi G, a jego elementy
nazywamy krawędziami.

Graf skierowany

background image

Grafy i ich reprezentacje

Spis treści

W grafie nieskierowanym G=(V, E), zbiór krawędzi E to

zbiór nieuporządkowanych par wierzchołków. Oznacza to,
iż krawędź E jest zbiorem {u, v}, gdzie, u, v

V i u

v.

W grafie nieskierowanym nie mogą występować pętle,
więc każda krawędź zawiera dokładnie dwa różne
wierzchołki.

Graf nieskierowany

background image

Grafy i ich reprezentacje

Spis treści

Jeśli krawędź łączy dwa wierzchołki to jest z nimi

incydentna. Pętla własna to krawędź łączące wierzchołek z
samym sobą. Stopień wierzchołka w grafie nieskierowanym
to liczba incydentnych z nim krawędzi.

Istnieje kilka algorytmów do przechowania grafu w pamięci.

Graf nieskierowany

background image

Grafy i ich reprezentacje

Spis treści

Poniżej została omówiona macierz sąsiedztwa

Budujemy tablicę o rozmiarach V*V, gdzie V-liczba

wierzchołków. Następnie wypełniamy ją zerami- jeśli
dwa wierzchołki nie są połączone krawędzią i
jedynkami- jeśli dwa wierzchołki są połączone. Oto
macierz sąsiedztwa dla grafu z rysunku 1:

1

2

3

4

5

1

0

1

1

0

1

2

1

0

1

1

1

3

1

1

0

1

0

4

0

1

1

0

1

5

1

1

0

1

0

Złożoność pamięciowa O(V2)

Widać, że macierz jest
symetryczna.

Stosując

tablicę dynamiczną można
więc zmniejszyć rozmiar
macierzy

do

połowy

zapisując ją jako macierz
dolno-

(lub

górno)

-trójkątną.

background image

Grafy i ich reprezentacje

Spis treści

Lista incydencji

Należy utworzyć listę dla każdego wierzchołka v, w której

przechowujemy zbiór wierzchołków połączonych krawędzią
z v. Lista dla grafu z rysunku 1 wygląda następująco:

1: 2, 3, 5
2: 1, 3, 4
3: 1, 2, 4
4: 2, 3, 5

5: 4, 1, 5

Złożoność pamięciowa O(V+E)

background image

Grafy i ich reprezentacje

Spis treści

Lista krawędzi

Lista krawędzi jest to lista, na której przechowujemy

wszystkie krawędzie występujące w grafie.

Przykład dla grafu skierowanego

Złożoność pamięciowa O(E)

1 - 2

2 - 4

2 - 5

3 - 1

3 - 2

4 - 3

5 - 1

5 - 4

Zapisując przy pomocy

tej reprezentacji

graf, w którym
występują krawędzie
skierowane i
nieskierowane należy
w przypadku krawędzi
nieskierowanej z u do v
zapisać krawędź dwukrotnie: u
- v
oraz v - u.

background image

Grafy i ich reprezentacje

Spis treści

Macierz incydencji

Macierz incydencji to tablica o rozmiarach V*E. Składa się ona z E
kolumn i V wierszy, jeśli krawędź wychodzi z danego wierzchołka
to piszemy w odpowiedniej kolumnie (-1), jeśli do niego wchodzi
piszemy (+1), jeśli wierzchołek nie należy do krawędzi piszemy 0,
jeśli jest to pętla własna
piszemy 2.

Złożoność pamięciowa O(E*V)

 

1

2

3

4

5

1 - 2

-1

1

0

0

0

1 - 3

1

0

-1

0

0

1 - 5

1

0

0

0

-1

2 - 4

0

-1

0

1

0

2 - 5

0

-1

0

0

1

2 - 3

0

1

-1

0

0

3 - 4

0

0

1

-1

0

5 - 4

0

0

0

1

-1

background image

Grafy i ich reprezentacje

Spis treści

Macierz grafu jest to trochę bardziej skomplikowana
reprezentacja grafu niż poprzednie.
Należy utworzyć tablicę o rozmiarach (V+2)2. Wiersze i kolumny
numerujemy od 0 do V+1. Najpierw zajmiemy się częścią macierzy
ograniczoną przez indeksy od 1 do V. Załóżmy, że w wierszach
mamy i-te wierzchołki a w kolumnach j-te wierzchołki. Liczby,
które mogą znaleźć się na skrzyżowaniu wierzchołka i oraz j
można podzielić na 3 grupy:

od 1 do V - istnieje krawędź skierowana: i <- j

od V+1 do 2*V - istnieje krawędź skierowana: i -> j

od (-V) do (-1) - brak incydentnych krawędzi

Sedno macierzy grafu polega jednak na tym, że odczytana wartość
nie tylko informuje nas, czy istnieje krawędź łącząca wierzchołki i
oraz j, ale zawiera też adres następnego wierzchołka, który jest w
takiej samej relacji z wierzchołkiem i co wierzchołek j.

background image

Algorytm Forda-

Bellmana

Spis treści

Algorytm

Bellmana-Forda

wyznacza

najmniejszą

odległości od ustalonego wierzchołka s do wszystkich
pozostałych w skierowanym grafie bez cykli o ujemnej
długości.

Algorytm Forda-Bellmana w każdym kroku oblicza

górne oszacowanie D(v

i

) odległości od wierzchołka s do

wszystkich pozostałych wierzchołków v

i

. W pierwszym kroku

przyjmujemy D(v

i

)=A(s,v

i

). Gdy stwierdzimy, że D(v)>D(u)

+A(u,v), to każdorazowo polepszamy aktualne oszacowanie i
podstawiamy D(v):=D(u)+A(u,v). Algorytm kończy się, gdy
żadnego oszacowania nie można już poprawić, macierz D(v

i

)

zawiera najkrótsze odległości od wierzchołka s do wszystkich
pozostałych.

background image

Algorytm Forda-

Bellmana

Spis treści

Pseudokod wygląda następująco: (n- liczba wierzchołków)
begin;
for v:=[1..n] do D(v):=A(s,v);
- przyjmujemy, że najkrótszą drogą z u do v
jest
krawędź (u,v)
for k:=1 to (n-2) do - w (n-2) krokach można zbadać każdą drogę o (n-1)
krawędziach i wybrać najkrótszą
begin
for v:=[1..n]-{s} do
- odległość od s do s wynosi 0 i już się na pewno nie
zmieni
for u:=[1..n] do
D(v):=min{D(v), D(u)+A(u,v)};
- wybierz krótszą drogę
end;
Algorytm można ulepszyć sprawdzając w każdej iteracji, czy coś się
zmieniło od poprzedniej i jeśli nie, to można zakończyć obliczenia.

background image

Algorytm Forda-

Bellmana

1

2

3

4

5

6

1

0

2

4

2

0

4

3

0

-2

3

4

1

0

2

5

0

6

2

1

0

Spis treści

Dla pełnej jasności poniżej zamieszczono prosty przykład:
Oto graf i jego reprezentacja w postaci macierzy wag krawędzi.

Przyjmujemy s=1:

Przebieg obliczeń:

K

D(

1)

D(

2)

D(

3)

D(

4)

D(

5)

D(

6)

0

0

2

4

1

0

2

4

2a

6b

4c

2

0

2

4

2

5d

4

3

0

2

4

2

5

4

background image

Algorytm Forda-

Bellmana

Spis treści

Objaśnienia:
W pierwszym kroku (k=0) D(vi)=A(1,vi). Przepisujemy pierwszy wiersz macierzy
wag krawędzi.
a) Pierwsze skrócenie drogi:
w poprzednim kroku D(4)=, gdyż nie istnieje krawędź od 1 do 4. Teraz jednak
możemy przejść przez wierzchołek 3 (odległość od 1 do 3 wynosi 4) a następnie
do 4 (waga krawędzi [3,4]=-2), długość drogi od 1 do 4 wynosi więc 4-2=2.
b) Podobnie jest tu, do wierzchołka 5 możemy dojść przez 2, 3, lub 6. Wybieramy
oczywiście drogę o mniejszej długości:
D(2)+A(2,5)=2+4=6 (ta wartość jest najmniejsza)
D(3)+A(3,5)=4+3=7
D(6)+A(6,5)=+1 (ta wartość jest największa)
Wybieramy opcję z wierzchołkiem nr. 2.
c) Do wierzchołka 6 możemy dojść przez 4 (do którego dochodzimy przez 3)
droga jest więc następująca: 1, 3, 4, 6 a jej długość wynosi D(4)+A(4,6)=2+2=4
d) Jak wynika z punktu b), do wierzchołka 5 możemy dojść także poprzez
wierzchołek 6.
W poprzednim kroku poznaliśmy odległość do wierzchołka 6 i nie wynosi ona już
nieskończoność. Sprawdźmy więc, jaka byłaby długość drogi do wierzchołka 5
poprzez 6: D(6)+A(6,5)=4+1=5. Jest to wartość mniejsza niż aktualna (6), więc
znaleźliśmy krótszą drogę.
W kroku k=3 nic się nie zmieniło od kroku k=2. Kończymy obliczenia i mamy
wektor najkrótszych dróg od wierzchołka s=1 do wszystkich pozostałych.
Złożoność obliczeniowa: O(n3).

background image

Algorytm Dijkstry

Spis treści

Algorytm Dijkstry służy do wyznaczania najmniejszej

odległości od ustalonego wierzchołka s do wszystkich
pozostałych w skierowanym grafie, jednakże graf wejściowy
nie może zawierać krawędzi o ujemnych wagach.

W

algorytmie

tym

pamiętany

jest

zbiór

Q

wierzchołków, dla których nie obliczono jeszcze najkrótszych
ścieżek, oraz wektor D[i] odległości od wierzchołka s do i.
Początkowo zbiór Q zawiera wszystkie wierzchołki a wektor
D jest pierwszym wierszem macierzy wag krawędzi A.

background image

Algorytm Dijkstry

Spis treści

Algorytm przebiega następująco:

•Dopóki zbiór Q nie jest pusty wykonuj:
•Pobierz ze zbioru Q wierzchołek v o najmniejszej wartości D[v] i usuń

go ze zbioru.

•Dla każdego następnika i, wierzchołka v dokonaj relaksacji ścieżki, tzn.

sprawdź, czy D[i]>D[v]+A[v,i], tzn. czy aktualne oszacowanie odległości
do wierzchołka i jest większe od oszacowania odległości do wierzchołka
v plus waga krawędzi (v,i). Jeżeli tak jest, to zaktualizuj oszacowanie D[i]
przypisując mu prawą stronę nierówności (czyli mniejszą wartość).

Jak widać z powyższego pseudokodu, algorytm wybiera z kolejki Q
"najlżejszy" wierzchołek, tzn. jest oparty na strategii zachłannej.

Wprawdzie metoda zachłanna nie zawsze daje wynik optymalny, jednak
algorytm Dijkstry jest algorytmem dokładnym.

background image

Algorytm Dijkstry

a

b

c

d

e

a

0

10

5

b

0

1

2

c

0

4

d

7

6

0

e

3

9

2

0

Spis treści

Oto przykładowy graf oraz jego macierz wag krawędzi (nieskończoność oznacza brak krawędzi):

Obliczenia przebiegają następująco: (Dla S=a)
najlżejszy wierzchołek jest podkreślony, wierzchołki, dla których
wyznaczono już najkrótsze ścieżki są zaznaczone kolorem jaśniejszym

Złożoność obliczeniowa: O(n2).

Q

D(a

)

D(b

)

D(c

)

D(d

)

D(e

)

{b,c,d,

e}

0

10

5

{b,c,d}

0

8

14

7

5

{b,c}

0

8

13

7

5

{c}

0

8

9

7

5

{}

0

8

9

7

5

background image

Algorytm Floyda

Spis treści

Algorytm ten służy do wyznaczania najmniejszej odległości

pomiędzy wszystkimi parami wierzchołków w skierowanym grafie bez
cykli o ujemnej długości.
Warunek nieujemności cyklu jest spowodowany faktem, że w grafie o
ujemnych cyklach najmniejsza odległość między niektórymi wierzchołkami
jest nieokreślona, ponieważ zależy od liczby przejść w cyklu.
Algorytmu tego można również użyć do obliczenia domknięcia
przechodniego relacji binarnej przedstawionej w postaci grafu
skierowanego G. Wówczas domknięcie przechodnie definiuje się jako:

En={(x,y): istnieje w G droga o niezerowej długości od x do y}

(przy tej definicji każda krawędź ma wagę 1)

Algorytm Floyda opiera się na następującym spostrzeżeniu. Niech d

ij(k)

oznacza długość najkrótszej spośród najkrótszej v

i

do v

j

o wierzchołkach

pośrednich w zbiorze {v

1

,...,v

k

}

background image

Algorytm Floyda

Spis treści

Pseudokod wygląda następująco: (n- liczba

wierzchołków)

begin;
for i:=1 to n do
for j:=1 to n do d(i,j)=A(i,j);
for i:=1 to n do d(i,i)=0;
for k:=1 to n do
for i:=1 to n do
for j:=1 to n do
d(i,j)=min( d(i,j), d(i,k)+d(k,j) );
end;

background image

Algorytm Floyda

Spis treści

Dla przykładu graf i jego reprezentacja w postaci
macierzy wag krawędzi:

1

2

3

4

5

6

1

0

2

4

2

0

4

3

0

-2

3

4

1

0

2

5

0

6

2

1

0


Document Outline


Wyszukiwarka

Podobne podstrony:
Powszechna Deklaracja Praw Czlowieka ma 59 lat, Dokumenty praca mgr
rola ojca w kształtowaniu charakteru córki, Dokumenty praca mgr
Ciało jako sposób bycia w świecie, Dokumenty praca mgr
dziecko alkohol praca mgr
FILOZOFIA PLATONA, Dokumenty praca mgr
BIBLIOGRAFIA3, Studia, PRACA MGR - TEOLOGIA, MAGISTERKA WSZYSTKO
bibliografia(1), praca mgr
Uwarunkowanie agresji w środowisku rodzinnym, Dokumenty praca mgr
Ściąga, do Szkoły, matura, praca mgr i podyplom., encyklopedie, ściągi, Odwodnienia
praca mgr 24.06, Studia, Prawo
CAŁA PRACA MGR o kompach (2)
Technologia sciekw Wyklady-sciaga, do Szkoły, matura, praca mgr i podyplom., encyklopedie, ściągi, T
praca mgr 02.07, Studia, Prawo
sciagi mag 1, do Szkoły, matura, praca mgr i podyplom., encyklopedie, ściągi, Budownictwo, Budownict
Ściąga odwodnienia, do Szkoły, matura, praca mgr i podyplom., encyklopedie, ściągi, Odwodnienia

więcej podobnych podstron