Grafy podstawowe pojęcia

Wielkość: px
Rozpocząć pokaz od strony:

Download "Grafy podstawowe pojęcia"

Transkrypt

1 71 Grafy podstawowe pojęcia Graf jest najbardziej złożoną strukturą dynamiczną. W przeciwieństwie do drzewa i listy, które są szczególnymi przypadkami grafów, nie nakładamy tu żadnych ograniczeń, jeśli chodzi o łuki łączące węzły grafu, mogą one występować w dowolnej ilości, łącząc poszczególne węzły w dowolny sposób. Dodatkowo w grafach dopuszczamy przetwarzanie (dodawanie i usuwanie) łuków, niezależnie od przetwarzania węzłów. Wszystko to stwarza duże problemy, jeśli chodzi o reprezentacje grafów w pamięci komputera. Istnieje wiele reprezentacji o różniących się własnościach. Przykładowe zastosowania grafów: analiza sieci elektrycznych, ale też sieci komputerowych, zagadnienia segmentacji programów i wieloprzetwarzania, zagadnienia planowania w badaniach operacyjnych, identyfikacja struktur molekularnych w chemii organicznej Rys. 42. Przykładowy graf

2 72 Podstawowe pojęcia: 1. Graf, w którym wszystkie krawędzie są krawędziami skierowanymi, nazywamy grafem skierowanym, albo zorientowanym, w przeciwnym przypadku grafem nieskierowanym. 2. Ścieżką w grafie nazywać będziemy ciąg możliwych do przejścia, wierzchołków, np. (2, 3, 4). 3. Cyklem będzie ścieżka, zaczynająca się i kończąca tym samym wierzchołkiem, np. (2, 3, 4, 2). 4. Graf nie zawierający żadnych cykli nazywać będziemy grafem acyklicznym, w przeciwnym przypadku grafem cyklicznym. 5. Kolejną, ważną z punktu widzenia wielu algorytmów grafowych, jest spójność grafu. Oto definicje: Graf nieskierowany nazywać będziemy spójnym, jeśli między dwoma dowolnymi węzłami istnieje przynajmniej jedna, łącząca je ścieżka. W przeciwnym przypadku graf nieskierowany nazywać będziemy niespójnym. Graf skierowany nazywać będziemy spójnym, jeśli po odrzuceniu skierowania, między dwoma dowolnymi węzłami istnieje przynajmniej jedna, łącząca je ścieżka.

3 73 Graf skierowany nazywać będziemy silnie spójnym, jeśli między dwoma dowolnymi węzłami istnieje przynajmniej jedna. łącząca je ścieżka. Przykładowy graf skierowany z rys. 42, po odrzuceniu węzła z etykietą 6, jest grafem spójnym, natomiast nie jest grafem silnie spójnym brak, na przykład, ścieżki od węzła 5 do Graf, w którym każdej krawędzi przypisano pewną wartość (wagę), nazywać będziemy grafem ważonym. Waga może reprezentować, na przykład, koszt przejścia między dwoma węzłami. 7. Grafem płaskim nazywać będziemy narysowany na płaszczyźnie graf, w którym między dwoma dowolnymi wierzchołkami narysować można przynajmniej jedną krawędź. Przykładowy graf z rys. 42 jest takim grafem płaskim. Grafy metody reprezentacji w pamięci Poniżej zostaną przedstawione trzy, najczęściej spotykane, najważniejsze reprezentacje grafów. Macierz sąsiedztwa Macierz sąsiedztwa (adjacency matrix) jest reprezentacją tablicową, statyczną. Jej zaletą jest szybki, bezpośredni dostęp do krawędzi (a więc możliwość łatwego ich przetwarzania), wielką wadą natomiast, wynikający ze statyczności - brak możliwości łatwego przetwarzania (dodawania lub usuwania) węzłów.

4 Rys. 43. Reprezentacja przykładowego grafu, którego model przedstawiono na rys. 42, w postaci bitowej macierzy sąsiedztwa Oznaczmy przez n ilość węzłów grafu, oraz przez m ilość jego krawędzi. Bitowa macierz sąsiedztwa będzie macierzą kwadratową o rozmiarach n x n zawierającą jedynki na skrzyżowaniu odpowiednich wierszy i kolumn (dla reprezentowania krawędzi) i zera w pozostałych miejscach. Ponieważ zajętość pamięci w tej reprezentacji zależy tylko od ilości węzłów (jest proporcjonalna do n 2 ), reprezentacja dobrze nadaje się do przechowywania informacji o grafach gęstych, dla których (n/m) << 1. W reprezentacji grafu nieskierowanego w postaci macierzy sąsiedztwa jedynki występują symetrycznie względem głównej przekątnej, dlatego też zwykle przechowuje się tylko informacje zawarte nad, lub pod główną przekątną, co pozwala zmniejszyć zajętość pamięci prawie o połowę, kosztem niewielkiego wydłużenia czasu dostępu. Lista krawędzi Lista krawędzi, jak sama nazwa wskazuje, przechowuje informacje tylko o krawędziach, podobnie zresztą jak macierz

5 75 sąsiedztwa. Jest to jednak struktura dynamiczna, jej rozmiary są wyznaczone przez rzeczywistą ilość krawędzi Rys. 44. Reprezentacja przykładowego grafu, przedstawionego na rys. 42, w postaci listy krawędzi. Każdy z elementów listy zawiera etykiety krawędzi: węzła wyjściowego (górny wiersz), oraz docelowego (dolny wiersz),. Oto jak wyglądają zalety i wady tej reprezentacji, pokazane w sposób skondensowany: zajętość pamięci zależy tylko od ilości krawędzi i jest proporcjonalna do m, reprezentacja nadaje się więc wybitnie do przechowywania informacji o grafach rzadkich, dla których (n/m) >>1, dodawanie, lub usuwanie węzłów jest możliwe, pociąga za sobą jedynie konieczność modyfikacji listy krawędzi (usunięcie elementów listy krawędzi odpowiadających krawędziom wychodzącym i dochodzącym do usuwanego węzła), istnieje możliwość reprezentacji krawędzi zapętlonych i równoległych (każdej krawędzi odpowiada bowiem odrębny element listy krawędzi). Podobnie - dodając do elementów listy krawędzi pole, przechowujące wagę krawędzi, można reprezentować grafy ważone, zajętość pamięci dla grafów nieskierowanych wzrasta natomiast dwukrotnie w stosunku do grafów skierowanych, trzeba bowiem w liście krawędzi reprezentować możliwość poruszania się w obu kierunkach miedzy węzłami grafu.

6 76 Lista incydencji Najbardziej uniwersalną, o najlepszych własnościach, wydaje się być reprezentacja, którą nazwiemy listą incydencji. Jest to struktura w pełni dynamiczna, z możliwością przechowywania (i przetwarzania) w jednej strukturze wszystkich informacji, dotyczących zarówno krawędzi, jak i węzłów. Za taką uniwersalność płacimy jednak względnie dużym stopniem skomplikowania struktury, z czym jednak nie musi wiązać się, jak zobaczymy, skomplikowanie algorytmów. W strukturze, przechowującej pełną informację o grafie, występują dwa rodzaje rekordów. Zdefiniujmy najpierw postać rekordów, przechowujących informacje dotyczące węzłów grafu: struct VERT { int klucz; int old; ELEM * eref; VERT * nextv; }; Zawierają one, oprócz etykiety węzła o nazwie klucz, wskazanie eref do początku listy rekordów, opisujących krawędzie wychodzące z danego węzła (rekordy odpowiadające krawędziom są typu ELEM), oraz wskazanie nextv do następnego węzła w liście węzłów. Znaczenie pola old zostanie wyjaśnione później. Rekordy drugiego rodzaju przechowują informacje dotyczące krawędzi. Są one typu:

7 77 struct ELEM { VERT * vref; ELEM * nexte; }; gdzie: vref jest wskazaniem węzła, do którego wiedzie dana krawędź, nexte jest wskazaniem kolejnego rekordu w liście krawędzi wychodzących z tego samego węzła. Poniższy rysunek przedstawia początkowa część struktury przykładowego grafu z rys graf ptr k old do węzła 3 do węzła 5 2 old Rys. 45 Reprezentacja części przykładowego grafu w postaci listy incydencji Oto cechy tej reprezentacji: zajętość pamięci zależy w równym stopniu od ilości węzłów grafu, jak i od ilości jego krawędzi, i jest proporcjonalna do sumy ( n + m ), taka reprezentacja nadaje się więc do przechowywania dowolnych grafów, o ile rozmiary grafu nie są zbyt duże, wtedy bowiem zaczyna odgrywać rolę czas dostępu sekwencyjnego,

8 78 dodawanie, lub usuwanie zarówno węzłów, jak i krawędzi, jest możliwe i łatwe, zajętość pamięci dla grafów nieskierowanych wzrasta i jest proporcjonalna do ( n + 2 * m ), dwukrotnie bowiem wzrasta ilość rekordów reprezentujących krawędzie, najważniejszą jednak zaletą tej reprezentacji jest jej listowy charakter (w istocie jest to lista list), co daje szansę stosowania prostych algorytmów obsługi, i to zarówno rekurencyjnych, jak też iteracyjnych. Algorytm szukania w głąb dla grafu Algorytm szukania w głąb jest podstawowym algorytmem grafowym. Jego konstrukcja oparta jest o schemat ogólny tak zwanych algorytmów z powrotami, zwanych niekiedy wyszukiwaniem wyczerpującym. Schemat ten zostanie bardziej szczegółowo omówiony w dalszej części wykładu. Poza tym, algorytm szukania w głąb jest kolejnym przykładem rekurencyjnego algorytmu typu dziel i zwyciężaj. Jego zasada została już omówiona przy okazji algorytmu sortowania tablic QuickSort. Poniżej przedstawiono pełną postać algorytmu szukania w głąb dla grafu w formie rekurencyjnej funkcji, zapisanej w notacji C/C++ i wykorzystującej podane wcześniej definicje struktur. Przy okazji zauważmy, że cechą charakterystyczną tych algorytmów jest umieszczona wewnątrz ciała funkcji pętla iteracyjna, zawierająca rekurencyjne wywołanie.

9 79 Załóżmy, że podobnie jak w drzewie binarnym, chcemy wykonać pewną operację Q(ptr) na wszystkich węzłach zupełnie dowolnego grafu skierowanego. W tym celu należy dokonać wywołania SEARCH ( graf ); niżej zdefiniowanej rekurencyjnej funkcji void SEARCH( VERT * ptr) { if ( not old ) // 1 { ptr old =1; Q( ptr ); // 2 ELEM * k = ptr eref; // 3 while (k) // 4 { SEARCH( k vref ); // 5 k = k nexte; // 6 } } } Szczegółowa analiza działania tego algorytmu wykaże, że odwiedzenie wszystkich węzłów grafu zawsze powiedzie się, jeśli będzie to graf silnie spójny, w przeciwnym przypadku, może się nie powieść. W jaki sposób działa ten algorytm? Kolejne węzły są wybierane z listy krawędzi danego węzła (linia 5). Jeśli wybrany węzeł nie był jeszcze odwiedzony (linia 1), zaznaczamy jego odwiedzenie wpisując jedynkę w jego pole old i wykonując na nim operację Q (linia 2), a następnie zabieramy się do przeglądania jego listy krawędzi (linie 3 i 4), nie kończąc przeglądania listy krawędzi węzła poprzedniego (sic!).

10 80 W ten sposób poruszamy się w głąb grafu. Po zakończeniu przeglądania jednak każdej listy krawędzi, wycofujemy się rekurencyjnie, powracając do przeglądania listy incydencji węzła poprzedniego. Zauważmy, że kolejność występowania węzłów w liście węzłów nie ma żadnego znaczenia. Dalej powiązanie węzłów w listę wydaje się zbyteczne (nie korzystaliśmy przecież ze wskaźnika nextv). Ale to tylko pozór. Jest ono konieczne, ponieważ w trakcie przetwarzania grafu może, po kolejnej operacji, okazać się, że do któregoś z węzłów nie dochodzi żadna krawędź, ani żadna z niego nie wychodzić (węzeł o etykiecie 6 w naszym przykładowym grafie), albo też po prostu graf przestanie być grafem silnie spójnym (nawet jeśli przedtem był). Sytuacje takie powodują omijanie niektórych węzłów w trakcie rekurencyjnego wywoływania algorytmu. Dzięki utrzymywaniu wszystkich węzłów grafu w liście węzłów możemy w niżej podany sposób VERT * k = graf; while ( k ) { SEARCH( k ); k = k nextv; } zapobiec omijaniu niektórych węzłów. Nie należy jednak, przed każdym cyklem przeglądania grafu, zapominać o wyzerowaniu pola old. Algorytm szukania w głąb dla grafu, mimo swoich skromnych rozmiarów (tylko 6 linii poleceń!), posiada wielką siłę i możliwości. Na jego kanwie można zaproponować wiele algorytmów obsługujących grafy. Oto przykłady:

11 81 wyszukiwanie węzła o zadanych cechach, wyszukiwanie węzła o najmniejszej (największej) wartości klucza, wyszukiwanie najkrótszej ścieżki do węzła o zadanych cechach, wyszukiwanie wszystkich ścieżek do węzła o zadanych cechach, badanie cykliczności grafu, badania spójności i silnej spójności grafu, badanie płaskości grafu, itd. Poza tym, lista incydencji umożliwia łatwe, dynamiczne dostawianie i usuwanie węzłów grafu. Wszystko to uzyskujemy dzięki stosowaniu algorytmów rekurencyjnych do rekurencyjnych struktur danych. Zadania do samodzielnego rozwiązania: 1. Wykaż, że metoda preorder dla drzewa binarnego jest szczególnym przypadkiem algorytmu szukania w głąb dla grafu, gdy ten ostatni degeneruje się do takiego drzewa. 2. Jaka będzie kolejność wykonywania wybranej operacji w poniższym grafie, po wywołaniu procedury szukania w głąb, począwszy od węzła o etykiecie 7? Rozważ wszelkie możliwe rozwiązania. 3. Dodaj minimalną ilość krawędzi do poniższego grafu tak, aby graf ten stał się grafem silnie spójnym.

12 82 graf Kodowanie mieszające Opisana poniżej metoda przechowywania i wyszukiwania elementów będzie miała praktyczny sens, jeśli zbiór potencjalnych kluczy identyfikujących te elementy jest zbiorem o bardzo dużej liczności. W takich sytuacjach bowiem omawiane dotychczas metody, łącznie z drzewem binarnych poszukiwań, nie zapewnią nam dostatecznie dużej efektywności algorytmów wyszukiwania. Dla przykładu, wspomniane drzewo binarnych poszukiwań, stanie się drzewem silnie nie wyważonym i efektywność wyszukiwania w takim drzewie zbliży się do efektywności wyszukiwania liniowego w liście liniowej. Wyobraźmy sobie, że w pewnym systemie używa się haseł o długości 10 liter wykorzystując alfabet języka polskiego. Wszystkich możliwych haseł (być może potencjalnych kluczy użytkowników tego systemu) będzie 33 10, to jest około 1.5 * haseł. Jeżeli liczba użytkowników nie jest zbyt duża, opłacalnym będzie zastosowanie systemu, który najpierw dokona wstępnej selekcji tych użytkowników, szufladkując każdego z nich do odrębnych przegródek.

13 83 Zadanie szufladkowania może być wykonane za pomocą metody, zwanej kodowaniem mieszającym, lub transformacją kluczową. W literaturze można też spotkać terminy mieszanie liniowe, lub haszowanie dla określenia opisywanej teraz metody, lub jej odmian. Ponieważ jest bardzo wiele różnych zastosowań tej metody, jak również wiele jej odmian, najpierw opiszemy problem możliwie ogólnie a następnie omówimy jedną z jej implementacji, opartej o struktury listowe. Niech U będzie pewnym uniwersum, tj. dowolnym, skończonym zbiorem (na przykład zbiorem haseł) o dużej liczności. Przez A i U oznaczmy dowolny i-ty podzbiór (tzw. katalog) zbioru U, natomiast przez m << U oznaczmy liczbę tych katalogów. Wszystkie katalogi są zbiorami rozłącznymi. Nie muszą one zawierać elementów uniwersum U. Natomiast dowolny element x U, jeśli się pojawi, musi być zakwalifikowany w sposób jednoznaczny do jednego i tylko jednego katalogu. Przez h(x) oznaczmy funkcję o szczególnych własnościach (tak zwaną funkcję transformującą lub funkcję haszującą), której zadaniem będzie przydzielanie w sposób jednoznaczny dowolnemu elementowi x U określonego katalogu A i. Będzie to więc funkcja h: U { 1, 2, 3,..., m } z uniwersum U w zbiór liczb naturalnych, będących numerami katalogów.

14 84 Funkcja haszująca powinna spełniać dwa podstawowe warunki: - przyjmować wartości ze zbioru { 1, 2, 3,..., m } w sposób możliwie równomierny, - koszt liczenia tej funkcji musi być stały, to jest niezależny od x U i możliwie najniższy. Pierwszy z tych warunków sprowadza się do żądania, aby dla każdego x U prawdopodobieństwo otrzymania określonej wartości i { 1, 2, 3,..., m } było mniej więcej stałe, to jest niezależne od samej wartości i. Cała trudność w efektywnym zastosowaniu kodowania mieszającego polega na znalezieniu odpowiedniej do danego problemu, a jednocześnie spełniającej oba postawione warunki, funkcji haszującej. Poniższy rysunek przedstawia ideę implementacji metody kodowania mieszającego z wykorzystaniem list liniowych. 1 2 H Null dobrze całość Null Null Null kot Null Null m Null Rys. 46. Kodowanie mieszające wykorzystujące listy liniowe Tablica H, indeksowana numerami katalogów, przechowuje wskaźniki do list liniowych z elementami uniwersum U.

15 85 Wstawienie nowego elementu do tej struktury sprowadza się do obliczenia, za pomocą funkcji haszującej, wartości indeksu i { 1, 2, 3,..., m }, a następnie umieszczenia tego elementu w liście wskazywanej przez element tablicy H[i]. Podobnie przebiega wyszukanie elementu o kluczu równym zadanej wartości x. Najpierw oblicza się przy pomocy funkcji haszującej wartość i a następnie przegląda listę wskazywaną przez H[i] w celu ostatecznego wyszukania elementu. W celu przyspieszenia wyszukiwania warto jest poszczególne listy utrzymywać w stanie uporządkowania. Algorytmy z powrotami Algorytm szukania w głąb dla grafu jest typowym przykładem szerszej klasy algorytmów, zwanych algorytmami z powrotami lub wyszukiwaniem wyczerpującym. Są to algorytmy rekurencyjne, które w swoim ciele zawierają, zamiast warunkowych wywołań rekurencyjnych, pętlę iteracyjną, z której wnętrza następują dopiero wywołania rekurencyjne. Pojedyncze wywołanie algorytmu rekurencyjnego może więc spowodować ciąg kolejnych wywołań rekurencyjnych (wszystkie wywołania z tego samego poziomu) nadzorowanych przez pętlę iteracyjną. Pętla ta musi być tak skonstruowana, aby dla każdego dopuszczalnego zestawu danych zapewnić spełnienie w pewnym momencie warunku stopu, przerywając ten ciąg wywołań. Algorytmy z powrotami wykorzystywane są nie tylko do rozwiązywania problemów, dających się łatwo przedstawić w postaci grafu, ale w szeregu innych dziedzinach wiążących się ściśle z informatyką, takich jak: teoria automatów,

16 86 projektowanie i analiza sieciowych systemów operacyjnych, przetwarzanie równoległe, wykorzystanie logiki w programowaniu, problemy kodowania, czy wreszcie gry komputerowe. Klasa algorytmów z powrotami opisana została już dawno opisana w literaturze, gdzie została zilustrowana szeregiem klasycznych problemów, takich jak: szukanie wyjścia z labiryntu, problem ośmiu hetmanów, droga skoczka szachowego, problem komiwojażera, problem doboru, problem plecakowy. Klasę algorytmów z powrotami omówimy na przykładzie problemu szukania wyjścia z labiryntu Rys. 47 Labirynt zawierający 25 ponumerowanych pól z widocznymi przegrodami, uniemożliwiającymi przejście między niektórymi polami W labiryncie, przedstawionym na rys. 47 można przechodzić między sąsiednimi polami po liniach prostych. Zadanie polega na szukaniu drogi między dwoma dowolnymi polami labiryntu. Tak postawiony problem trzeba jednak uszczegółowić, można bowiem szukać odpowiedzi na następujące pytania: - czy taka droga w ogóle istnieje? - jeśli tak, to czy takich różnych dróg jest więcej? - jeśli tak, to która z nich jest najkrótsza?

17 87 Mówiąc ogólnie metoda powrotów polega na próbach rozszerzenia pewnego rozwiązania częściowego. W każdym kroku, jeśli rozszerzenie aktualnego rozwiązania częściowego nie jest możliwe, powraca się do krótszego rozwiązania częściowego i ponownie próbuje się je rozszerzyć. Tak więc można szukać drogi miedzy dwoma dowolnymi polami labiryntu kierując się następującymi zasadami: 1. z danego pola mogę zawsze wybrać dopuszczalne, nie badaną jeszcze pole sąsiednie, 2. jeśli będąc w określonym polu stwierdzę, że nie istnieje dopuszczalne, nie badana jeszcze pole sąsiednie, zmuszony jestem cofnąć się na pole, z którego wykonałem poprzedni ruch i próbować z tego pola realizować punkt 1. Znane są dwie, różne reprezentacje pozwalające zaimplementować przedstawioną wyżej ideę algorytmu z powrotami: 1. implementacja oparta na zbiorach, 2. implementacja w postaci drzewa. Implementacja algorytmu z powrotami oparta na zbiorach Niech A i będzie zbiorem kandydatów związanych z punktem i (w naszym przypadku z polem labiryntu o numerze i). Zbiór ograniczeń, związanych z punktem i oznaczmy przez O i. Wtedy S i = A i - O i jest zbiorem dopuszczalnych kandydatów, związanych z punktem i.

18 88 Dla przykładowego pola o numerze 13 labiryntu, przestawionego na rys. 47 będzie: A 13 = { 8, 12, 14, 18} O 13 = { 8 } S 13 = { 12, 14, 18} Na ogół zbiory A i można generować automatycznie. Tak też jest i w naszym przykładowym labiryncie są to dwu-, trzylub czteroelementowe zbiory o wartościach różniących się o 1, lub o 5 od wartości i. Natomiast zbiory O i są albo z góry zadane i na ogół nie zmieniają się w trakcie realizacji algorytmu, albo (w przypadku bardziej ogólnym) są generowane dla punktu i (a często i dla najbliższego jego otoczenia), na bieżąco w trakcie realizacji algorytmu. Tak się dzieje, na przykład, w większości zręcznościowych gier komputerowych. Rozwiązaniem częściowym jest częściowy wektor rozwiązań (a 1, a 2,..., a k ), zawierający nie powtarzające się numery punktów i reprezentujący częściową, dopuszczalną drogę z punktu wyjściowego a 1 do punktu a k. Przykładem rozwiązania częściowego dla rozważanego labiryntu może być wektor ( 1, 2, 7, 12, 13, 14, 19, 20 ). Próba rozszerzenia rozwiązania częściowego polegać będzie na wyborze ze zbioru S k kolejnego kandydata, rozszerzając rozwiązanie częściowe do (a 1, a 2,..., a k, a k+1 ) a następnie sprawdzenie, czy w ten sposób osiągamy rozwiązanie końcowe ( w naszym przykładzie dochodzimy do pola docelowego labiryntu ). Jeśli nie kontynuujemy rozszerzanie rozwiązania częściowego wybierając kolejnego kandydata ze zbioru S k+1. Dla zaznaczenia, że przejście z punktu a k, do a k+1 miało już miejsce i w przyszłości nie powinno już być badane, usuwamy ze zbioru S k kandydata S k+1.

19 89 Takie poruszanie się w głąb labiryntu musimy przerwać, jeśli napotkamy pusty zbiór S k. Wtedy algorytm usuwa z rozwiązania częściowego kandydata a k, wybierając kolejnego kandydata ze zbioru S k-1. Gdyby i ten zbiór okazał się pusty, trzeba usunąć z rozwiązania częściowego punkt a k-1, próbując rozszerzyć to rozwiązanie punktem ze zbioru S k-2. Poniżej przedstawiono w pseudokodzie ogólną postać algorytmu z powrotami. Przystosowanie algorytmu, zapisanego w pseudokodzie do rozwiązywania pewnych konkretnych problemów polegać będzie na uszczegółowieniu sformułowań zapisanych w języku naturalnym i ich zapisie na poziomie języka programowania. Przedtem należy wybrać oczywiście odpowiednią reprezentację danych. void próbuj( ) { zapoczątkuj wybieranie kandydatów; do { wybierz następnego kandydata; if (dopuszczalny) { zapisz go; if (rozwiązanie niepełne) { próbuj( ); // próba wykonania następnego kroku if (nie ma następnego kandydata) usuń poprzedni zapis; } } } while ( rozwiązanie niepełne and jest następny kandydat); } Rys. 48 Ogólna postać algorytmu z powrotami zapisana w pseudokodzie

20 90 Ćwiczenia do samodzielnego wykonania: 1. W jaki sposób i dlaczego przy pomocy algorytmu z powrotami można stwierdzić, że między dwoma polami labiryntu nie istnieje żadna droga? 2. W jaki sposób należy zmodyfikować algorytm z powrotami, aby: a) znajdował on wszystkie drogi miedzy dwoma dowolnymi polami labiryntu, b) znajdował on najkrótszą drogę spośród wszystkich możliwych dróg labiryntu. 3. Zastąp w ogólnym algorytmie z powrotami wszystkie sformułowania w języku naturalnym przez odpowiednie polecenia w języku programowania tak, aby algorytm ten znajdował drogę między dwoma dowolnymi polami a i b labiryntu.

Reprezentacje grafów nieskierowanych Reprezentacje grafów skierowanych. Wykład 2. Reprezentacja komputerowa grafów

Reprezentacje grafów nieskierowanych Reprezentacje grafów skierowanych. Wykład 2. Reprezentacja komputerowa grafów Wykład 2. Reprezentacja komputerowa grafów 1 / 69 Macierz incydencji Niech graf G będzie grafem nieskierowanym bez pętli o n wierzchołkach (x 1, x 2,..., x n) i m krawędziach (e 1, e 2,..., e m). 2 / 69

Bardziej szczegółowo

Algorytmy grafowe. Wykład 1 Podstawy teorii grafów Reprezentacje grafów. Tomasz Tyksiński CDV

Algorytmy grafowe. Wykład 1 Podstawy teorii grafów Reprezentacje grafów. Tomasz Tyksiński CDV Algorytmy grafowe Wykład 1 Podstawy teorii grafów Reprezentacje grafów Tomasz Tyksiński CDV Rozkład materiału 1. Podstawowe pojęcia teorii grafów, reprezentacje komputerowe grafów 2. Przeszukiwanie grafów

Bardziej szczegółowo

Matematyczne Podstawy Informatyki

Matematyczne Podstawy Informatyki Matematyczne Podstawy Informatyki dr inż. Andrzej Grosser Instytut Informatyki Teoretycznej i Stosowanej Politechnika Częstochowska Rok akademicki 2013/2014 Informacje podstawowe 1. Konsultacje: pokój

Bardziej szczegółowo

Struktury danych i złożoność obliczeniowa Wykład 5. Prof. dr hab. inż. Jan Magott

Struktury danych i złożoność obliczeniowa Wykład 5. Prof. dr hab. inż. Jan Magott Struktury danych i złożoność obliczeniowa Wykład. Prof. dr hab. inż. Jan Magott Algorytmy grafowe: podstawowe pojęcia, reprezentacja grafów, metody przeszukiwania, minimalne drzewa rozpinające, problemy

Bardziej szczegółowo

Grafem nazywamy strukturę G = (V, E): V zbiór węzłów lub wierzchołków, Grafy dzielimy na grafy skierowane i nieskierowane:

Grafem nazywamy strukturę G = (V, E): V zbiór węzłów lub wierzchołków, Grafy dzielimy na grafy skierowane i nieskierowane: Wykład 4 grafy Grafem nazywamy strukturę G = (V, E): V zbiór węzłów lub wierzchołków, E zbiór krawędzi, Grafy dzielimy na grafy skierowane i nieskierowane: Formalnie, w grafach skierowanych E jest podzbiorem

Bardziej szczegółowo

1. Algorytmy przeszukiwania. Przeszukiwanie wszerz i w głąb.

1. Algorytmy przeszukiwania. Przeszukiwanie wszerz i w głąb. 1. Algorytmy przeszukiwania. Przeszukiwanie wszerz i w głąb. Algorytmy przeszukiwania w głąb i wszerz są najczęściej stosowanymi algorytmami przeszukiwania. Wykorzystuje się je do zbadania istnienia połączenie

Bardziej szczegółowo

a) 7 b) 19 c) 21 d) 34

a) 7 b) 19 c) 21 d) 34 Zadanie 1. Pytania testowe dotyczące podstawowych własności grafów. Zadanie 2. Przy każdym z zadań może się pojawić polecenie krótkiej charakterystyki algorytmu. Zadanie 3. W zadanym grafie sprawdzenie

Bardziej szczegółowo

AiSD zadanie trzecie

AiSD zadanie trzecie AiSD zadanie trzecie Gliwiński Jarosław Marek Kruczyński Konrad Marek Grupa dziekańska I5 5 czerwca 2008 1 Wstęp Celem postawionym przez zadanie trzecie było tzw. sortowanie topologiczne. Jest to typ sortowania

Bardziej szczegółowo

Ogólne wiadomości o grafach

Ogólne wiadomości o grafach Ogólne wiadomości o grafach Algorytmy i struktury danych Wykład 5. Rok akademicki: / Pojęcie grafu Graf zbiór wierzchołków połączonych za pomocą krawędzi. Podstawowe rodzaje grafów: grafy nieskierowane,

Bardziej szczegółowo

Wykład 10 Grafy, algorytmy grafowe

Wykład 10 Grafy, algorytmy grafowe . Typy złożoności obliczeniowej Wykład Grafy, algorytmy grafowe Typ złożoności oznaczenie n Jedna operacja trwa µs 5 logarytmiczna lgn. s. s.7 s liniowa n. s.5 s. s Logarytmicznoliniowa nlgn. s.8 s.4 s

Bardziej szczegółowo

Matematyka dyskretna

Matematyka dyskretna Matematyka dyskretna Wykład 13: Teoria Grafów Gniewomir Sarbicki Literatura R.J. Wilson Wprowadzenie do teorii grafów Definicja: Grafem (skończonym, nieskierowanym) G nazywamy parę zbiorów (V (G), E(G)),

Bardziej szczegółowo

Przykłady grafów. Graf prosty, to graf bez pętli i bez krawędzi wielokrotnych.

Przykłady grafów. Graf prosty, to graf bez pętli i bez krawędzi wielokrotnych. Grafy Graf Graf (ang. graph) to zbiór wierzchołków (ang. vertices), które mogą być połączone krawędziami (ang. edges) w taki sposób, że każda krawędź kończy się i zaczyna w którymś z wierzchołków. Graf

Bardziej szczegółowo

Zofia Kruczkiewicz, Algorytmu i struktury danych, Wykład 14, 1

Zofia Kruczkiewicz, Algorytmu i struktury danych, Wykład 14, 1 Wykład Algorytmy grafowe metoda zachłanna. Właściwości algorytmu zachłannego:. W przeciwieństwie do metody programowania dynamicznego nie występuje etap dzielenia na mniejsze realizacje z wykorzystaniem

Bardziej szczegółowo

G. Wybrane elementy teorii grafów

G. Wybrane elementy teorii grafów Dorota Miszczyńska, Marek Miszczyński KBO UŁ Wybrane elementy teorii grafów 1 G. Wybrane elementy teorii grafów Grafy są stosowane współcześnie w różnych działach nauki i techniki. Za pomocą grafów znakomicie

Bardziej szczegółowo

Lista liniowa dwukierunkowa

Lista liniowa dwukierunkowa 53 Lista liniowa dwukierunkowa Jest to lista złożona z elementów, z których każdy posiada, oprócz wskaźnika na element następny, również wskaźnik na element poprzedni. Zdefiniujmy element listy dwukierunkowej

Bardziej szczegółowo

. Podstawy Programowania 2. Grafy i ich reprezentacje. Arkadiusz Chrobot. 9 czerwca 2016

. Podstawy Programowania 2. Grafy i ich reprezentacje. Arkadiusz Chrobot. 9 czerwca 2016 Podstawy Programowania 2 Grafy i ich reprezentacje Arkadiusz Chrobot Zakład Informatyki 9 czerwca 2016 1 42 Plan 1 Wstęp 2 Teoria grafów 3 Grafy jako struktury danych 4 Zastosowania grafów 2 42 Wstęp Wstęp

Bardziej szczegółowo

Algorytmy i złożoności Wykład 5. Haszowanie (hashowanie, mieszanie)

Algorytmy i złożoności Wykład 5. Haszowanie (hashowanie, mieszanie) Algorytmy i złożoności Wykład 5. Haszowanie (hashowanie, mieszanie) Wprowadzenie Haszowanie jest to pewna technika rozwiązywania ogólnego problemu słownika. Przez problem słownika rozumiemy tutaj takie

Bardziej szczegółowo

Teoria grafów dla małolatów. Andrzej Przemysław Urbański Instytut Informatyki Politechnika Poznańska

Teoria grafów dla małolatów. Andrzej Przemysław Urbański Instytut Informatyki Politechnika Poznańska Teoria grafów dla małolatów Andrzej Przemysław Urbański Instytut Informatyki Politechnika Poznańska Wstęp Matematyka to wiele różnych dyscyplin Bowiem świat jest bardzo skomplikowany wymaga rozważenia

Bardziej szczegółowo

Sortowanie topologiczne skierowanych grafów acyklicznych

Sortowanie topologiczne skierowanych grafów acyklicznych Sortowanie topologiczne skierowanych grafów acyklicznych Metody boolowskie w informatyce Robert Sulkowski http://robert.brainusers.net 23 stycznia 2010 1 Definicja 1 (Cykl skierowany). Niech C = (V, A)

Bardziej szczegółowo

Porównanie algorytmów wyszukiwania najkrótszych ścieżek międz. grafu. Daniel Golubiewski. 22 listopada Instytut Informatyki

Porównanie algorytmów wyszukiwania najkrótszych ścieżek międz. grafu. Daniel Golubiewski. 22 listopada Instytut Informatyki Porównanie algorytmów wyszukiwania najkrótszych ścieżek między wierzchołkami grafu. Instytut Informatyki 22 listopada 2015 Algorytm DFS w głąb Algorytm przejścia/przeszukiwania w głąb (ang. Depth First

Bardziej szczegółowo

MATEMATYKA DYSKRETNA - MATERIAŁY DO WYKŁADU GRAFY

MATEMATYKA DYSKRETNA - MATERIAŁY DO WYKŁADU GRAFY ERIAŁY DO WYKŁADU GRAFY Graf nieskierowany Grafem nieskierowanym nazywamy parę G = (V, E), gdzie V jest pewnym zbiorem skończonym (zwanym zbiorem wierzchołków grafu G), natomiast E jest zbiorem nieuporządkowanych

Bardziej szczegółowo

Matematyczne Podstawy Informatyki

Matematyczne Podstawy Informatyki Matematyczne Podstawy Informatyki dr inż. Andrzej Grosser Instytut Informatyki Teoretycznej i Stosowanej Politechnika Częstochowska Rok akademicki 03/0 Przeszukiwanie w głąb i wszerz I Przeszukiwanie metodą

Bardziej szczegółowo

Algorytmy grafowe. Wykład 2 Przeszukiwanie grafów. Tomasz Tyksiński CDV

Algorytmy grafowe. Wykład 2 Przeszukiwanie grafów. Tomasz Tyksiński CDV Algorytmy grafowe Wykład 2 Przeszukiwanie grafów Tomasz Tyksiński CDV Rozkład materiału 1. Podstawowe pojęcia teorii grafów, reprezentacje komputerowe grafów 2. Przeszukiwanie grafów 3. Spójność grafu,

Bardziej szczegółowo

Wykład z Technologii Informacyjnych. Piotr Mika

Wykład z Technologii Informacyjnych. Piotr Mika Wykład z Technologii Informacyjnych Piotr Mika Uniwersalna forma graficznego zapisu algorytmów Schemat blokowy zbiór bloków, powiązanych ze sobą liniami zorientowanymi. Jest to rodzaj grafu, którego węzły

Bardziej szczegółowo

WYŻSZA SZKOŁA INFORMATYKI STOSOWANEJ I ZARZĄDZANIA

WYŻSZA SZKOŁA INFORMATYKI STOSOWANEJ I ZARZĄDZANIA DROGI i CYKLE w grafach Dla grafu (nieskierowanego) G = ( V, E ) drogą z wierzchołka v 0 V do v t V nazywamy ciąg (naprzemienny) wierzchołków i krawędzi grafu: ( v 0, e, v, e,..., v t, e t, v t ), spełniający

Bardziej szczegółowo

EGZAMIN - Wersja A. ALGORYTMY I STRUKTURY DANYCH Lisek89 opracowanie kartki od Pani dr E. Koszelew

EGZAMIN - Wersja A. ALGORYTMY I STRUKTURY DANYCH Lisek89 opracowanie kartki od Pani dr E. Koszelew 1. ( pkt) Dany jest algorytm, który dla dowolnej liczby naturalnej n, powinien wyznaczyd sumę kolejnych liczb naturalnych mniejszych od n. Wynik algorytmu jest zapisany w zmiennej suma. Algorytm i=1; suma=0;

Bardziej szczegółowo

Znajdowanie wyjścia z labiryntu

Znajdowanie wyjścia z labiryntu Znajdowanie wyjścia z labiryntu Zadanie to wraz z problemem pakowania najcenniejszego plecaka należy do problemów optymalizacji, które dotyczą znajdowania najlepszego rozwiązania wśród wielu możliwych

Bardziej szczegółowo

Algorytmiczna teoria grafów

Algorytmiczna teoria grafów Przedmiot fakultatywny 20h wykładu + 20h ćwiczeń 21 lutego 2014 Zasady zaliczenia 1 ćwiczenia (ocena): kolokwium, zadania programistyczne (implementacje algorytmów), praca na ćwiczeniach. 2 Wykład (egzamin)

Bardziej szczegółowo

Wstęp do programowania

Wstęp do programowania Wieczorowe Studia Licencjackie Wrocław, 9.01.2007 Wstęp do programowania Wykład nr 13 Listy usuwanie elementów Poniżej prezentujemy funkcję, która usuwa element o podanej wartości pola wiek z nieuporządkowanej

Bardziej szczegółowo

znajdowały się różne instrukcje) to tak naprawdę definicja funkcji main.

znajdowały się różne instrukcje) to tak naprawdę definicja funkcji main. Część XVI C++ Funkcje Jeśli nasz program rozrósł się już do kilkudziesięciu linijek, warto pomyśleć o jego podziale na mniejsze części. Poznajmy więc funkcje. Szybko się przekonamy, że funkcja to bardzo

Bardziej szczegółowo

Złożoność obliczeniowa zadania, zestaw 2

Złożoność obliczeniowa zadania, zestaw 2 Złożoność obliczeniowa zadania, zestaw 2 Określanie złożoności obliczeniowej algorytmów, obliczanie pesymistycznej i oczekiwanej złożoności obliczeniowej 1. Dana jest tablica jednowymiarowa A o rozmiarze

Bardziej szczegółowo

Digraf. 13 maja 2017

Digraf. 13 maja 2017 Digraf 13 maja 2017 Graf skierowany, digraf, digraf prosty Definicja 1 Digraf prosty G to (V, E), gdzie V jest zbiorem wierzchołków, E jest rodziną zorientowanych krawędzi, między różnymi wierzchołkami,

Bardziej szczegółowo

Zapisywanie algorytmów w języku programowania

Zapisywanie algorytmów w języku programowania Temat C5 Zapisywanie algorytmów w języku programowania Cele edukacyjne Zrozumienie, na czym polega programowanie. Poznanie sposobu zapisu algorytmu w postaci programu komputerowego. Zrozumienie, na czym

Bardziej szczegółowo

1. Nagłówek funkcji: int funkcja(void); wskazuje na to, że ta funkcja. 2. Schemat blokowy przedstawia algorytm obliczania

1. Nagłówek funkcji: int funkcja(void); wskazuje na to, że ta funkcja. 2. Schemat blokowy przedstawia algorytm obliczania 1. Nagłówek funkcji: int funkcja(void); wskazuje na to, że ta funkcja nie ma parametru i zwraca wartość na zewnątrz. nie ma parametru i nie zwraca wartości na zewnątrz. ma parametr o nazwie void i zwraca

Bardziej szczegółowo

Drzewa poszukiwań binarnych

Drzewa poszukiwań binarnych 1 Cel ćwiczenia Algorytmy i struktury danych Instytut Sterowania i Systemów Informatycznych Wydział Elektrotechniki, Informatyki i Telekomunikacji Uniwersytet ielonogórski Drzewa poszukiwań binarnych Ćwiczenie

Bardziej szczegółowo

Graf. Definicja marca / 1

Graf. Definicja marca / 1 Graf 25 marca 2018 Graf Definicja 1 Graf ogólny to para G = (V, E), gdzie V jest zbiorem wierzchołków (węzłów, punktów grafu), E jest rodziną krawędzi, które mogą być wielokrotne, dokładniej jednoelementowych

Bardziej szczegółowo

Matematyka dyskretna. Andrzej Łachwa, UJ, /14

Matematyka dyskretna. Andrzej Łachwa, UJ, /14 Matematyka dyskretna Andrzej Łachwa, UJ, 2016 andrzej.lachwa@uj.edu.pl 13/14 Grafy podstawowe definicje Graf to para G=(V, E), gdzie V to niepusty i skończony zbiór, którego elementy nazywamy wierzchołkami

Bardziej szczegółowo

TEORIA GRAFÓW I SIECI

TEORIA GRAFÓW I SIECI TEORIA GRAFÓW I SIECI Temat nr : Grafy Berge a dr hab. inż. Zbigniew TARAPATA, prof. WAT e-mail: zbigniew.tarapata@wat.edu.pl http://tarapata.edu.pl tel.: 6-83-95-0, p.5/00 Zakład Badań Operacyjnych i

Bardziej szczegółowo

Poprawność semantyczna

Poprawność semantyczna Poprawność składniowa Poprawność semantyczna Poprawność algorytmu Wypisywanie zdań z języka poprawnych składniowo Poprawne wartościowanie zdań języka, np. w języku programowania skutki wystąpienia wyróżnionych

Bardziej szczegółowo

Zaawansowane algorytmy i struktury danych

Zaawansowane algorytmy i struktury danych Zaawansowane algorytmy i struktury danych u dr Barbary Marszał-Paszek Opracowanie pytań teoretycznych z egzaminów. Strona 1 z 12 Pytania teoretyczne z egzaminu pisemnego z 25 czerwca 2014 (studia dzienne)

Bardziej szczegółowo

Algorytmy i str ruktury danych. Metody algorytmiczne. Bartman Jacek

Algorytmy i str ruktury danych. Metody algorytmiczne. Bartman Jacek Algorytmy i str ruktury danych Metody algorytmiczne Bartman Jacek jbartman@univ.rzeszow.pl Metody algorytmiczne - wprowadzenia Znamy strukturę algorytmów Trudność tkwi natomiast w podaniu metod służących

Bardziej szczegółowo

Podstawy Informatyki. Metody dostępu do danych

Podstawy Informatyki. Metody dostępu do danych Podstawy Informatyki c.d. alina.momot@polsl.pl http://zti.polsl.pl/amomot/pi Plan wykładu 1 Bazy danych Struktury danych Średni czas odszukania rekordu Drzewa binarne w pamięci dyskowej 2 Sformułowanie

Bardziej szczegółowo

Instrukcje dla zawodników

Instrukcje dla zawodników Instrukcje dla zawodników Nie otwieraj arkusza z zadaniami dopóki nie zostaniesz o to poproszony. Instrukcje poniżej zostaną ci odczytane i wyjaśnione. 1. Arkusz składa się z 3 zadań. 2. Każde zadanie

Bardziej szczegółowo

Drzewa spinające MST dla grafów ważonych Maksymalne drzewo spinające Drzewo Steinera. Wykład 6. Drzewa cz. II

Drzewa spinające MST dla grafów ważonych Maksymalne drzewo spinające Drzewo Steinera. Wykład 6. Drzewa cz. II Wykład 6. Drzewa cz. II 1 / 65 drzewa spinające Drzewa spinające Zliczanie drzew spinających Drzewo T nazywamy drzewem rozpinającym (spinającym) (lub dendrytem) spójnego grafu G, jeżeli jest podgrafem

Bardziej szczegółowo

Matematyka dyskretna - 7.Drzewa

Matematyka dyskretna - 7.Drzewa Matematyka dyskretna - 7.Drzewa W tym rozdziale zajmiemy się drzewami: specjalnym przypadkiem grafów. Są one szczególnie przydatne do przechowywania informacji, umożliwiającego szybki dostęp do nich. Definicja

Bardziej szczegółowo

Rozwiązywanie problemów metodą przeszukiwania

Rozwiązywanie problemów metodą przeszukiwania Rozwiązywanie problemów metodą przeszukiwania Dariusz Banasiak Katedra Informatyki Technicznej W4/K9 Politechnika Wrocławska Reprezentacja problemu w przestrzeni stanów Jedną z ważniejszych metod sztucznej

Bardziej szczegółowo

ANALIZA ALGORYTMÓW. Analiza algorytmów polega między innymi na odpowiedzi na pytania:

ANALIZA ALGORYTMÓW. Analiza algorytmów polega między innymi na odpowiedzi na pytania: ANALIZA ALGORYTMÓW Analiza algorytmów polega między innymi na odpowiedzi na pytania: 1) Czy problem może być rozwiązany na komputerze w dostępnym czasie i pamięci? 2) Który ze znanych algorytmów należy

Bardziej szczegółowo

Algorytmy i struktury danych. Wykład 4 Tablice nieporządkowane i uporządkowane

Algorytmy i struktury danych. Wykład 4 Tablice nieporządkowane i uporządkowane Algorytmy i struktury danych Wykład 4 Tablice nieporządkowane i uporządkowane Tablice uporządkowane Szukanie binarne Szukanie interpolacyjne Tablice uporządkowane Szukanie binarne O(log N) Szukanie interpolacyjne

Bardziej szczegółowo

Spacery losowe generowanie realizacji procesu losowego

Spacery losowe generowanie realizacji procesu losowego Spacery losowe generowanie realizacji procesu losowego Michał Krzemiński Streszczenie Omówimy metodę generowania trajektorii spacerów losowych (błądzenia losowego), tj. szczególnych procesów Markowa z

Bardziej szczegółowo

Haszowanie (adresowanie rozpraszające, mieszające)

Haszowanie (adresowanie rozpraszające, mieszające) Haszowanie (adresowanie rozpraszające, mieszające) Tadeusz Pankowski H. Garcia-Molina, J.D. Ullman, J. Widom, Implementacja systemów baz danych, WNT, Warszawa, Haszowanie W adresowaniu haszującym wyróżniamy

Bardziej szczegółowo

Przykładowe rozwiązania

Przykładowe rozwiązania Przykładowe rozwiązania Poniższy dokument zawiera przykładowe rozwiązania zadań z I etapu I edycji konkursu (2014 r.). Rozwiązania w formie takiej jak przedstawiona niżej uzyskałyby pełną liczbę punktów

Bardziej szczegółowo

Algorytmy i złożoności. Wykład 3. Listy jednokierunkowe

Algorytmy i złożoności. Wykład 3. Listy jednokierunkowe Algorytmy i złożoności Wykład 3. Listy jednokierunkowe Wstęp. Lista jednokierunkowa jest strukturą pozwalającą na pamiętanie danych w postaci uporzadkowanej, a także na bardzo szybkie wstawianie i usuwanie

Bardziej szczegółowo

Marek Miszczyński KBO UŁ. Wybrane elementy teorii grafów 1

Marek Miszczyński KBO UŁ. Wybrane elementy teorii grafów 1 Marek Miszczyński KBO UŁ. Wybrane elementy teorii grafów 1 G. Wybrane elementy teorii grafów W matematyce teorię grafów klasyfikuje się jako gałąź topologii. Jest ona jednak ściśle związana z algebrą i

Bardziej szczegółowo

Teoria obliczeń i złożoność obliczeniowa

Teoria obliczeń i złożoność obliczeniowa Teoria obliczeń i złożoność obliczeniowa Kontakt: dr hab. inż. Adam Kasperski, prof. PWr. pokój 509 B4 adam.kasperski@pwr.wroc.pl materiały + informacje na stronie www. Zaliczenie: Egzamin Literatura Problemy

Bardziej szczegółowo

Uniwersytet Zielonogórski Instytut Sterowania i Systemów Informatycznych. Algorytmy i struktury danych Laboratorium 7. 2 Drzewa poszukiwań binarnych

Uniwersytet Zielonogórski Instytut Sterowania i Systemów Informatycznych. Algorytmy i struktury danych Laboratorium 7. 2 Drzewa poszukiwań binarnych Uniwersytet Zielonogórski Instytut Sterowania i Systemów Informatycznych Algorytmy i struktury danych Laboratorium Drzewa poszukiwań binarnych 1 Cel ćwiczenia Ćwiczenie ma na celu zapoznanie studentów

Bardziej szczegółowo

TEORIA GRAFÓW I SIECI

TEORIA GRAFÓW I SIECI TEORIA GRAFÓW I SIECI Temat nr 1: Definicja grafu. Rodzaje i części grafów dr hab. inż. Zbigniew TARAPATA, prof. WAT e-mail: zbigniew.tarapata@wat.edu.pl http://tarapata.edu.pl tel.: 261-83-95-04, p.225/100

Bardziej szczegółowo

Wstęp do sieci neuronowych, wykład 12 Łańcuchy Markowa

Wstęp do sieci neuronowych, wykład 12 Łańcuchy Markowa Wstęp do sieci neuronowych, wykład 12 Łańcuchy Markowa M. Czoków, J. Piersa 2012-01-10 1 Łańcucha Markowa 2 Istnienie Szukanie stanu stacjonarnego 3 1 Łańcucha Markowa 2 Istnienie Szukanie stanu stacjonarnego

Bardziej szczegółowo

Struktury danych i złożoność obliczeniowa Wykład 7. Prof. dr hab. inż. Jan Magott

Struktury danych i złożoność obliczeniowa Wykład 7. Prof. dr hab. inż. Jan Magott Struktury danych i złożoność obliczeniowa Wykład 7 Prof. dr hab. inż. Jan Magott Problemy NP-zupełne Transformacją wielomianową problemu π 2 do problemu π 1 (π 2 π 1 ) jest funkcja f: D π2 D π1 spełniająca

Bardziej szczegółowo

Dynamiczny przydział pamięci w języku C. Dynamiczne struktury danych. dr inż. Jarosław Forenc. Metoda 1 (wektor N M-elementowy)

Dynamiczny przydział pamięci w języku C. Dynamiczne struktury danych. dr inż. Jarosław Forenc. Metoda 1 (wektor N M-elementowy) Rok akademicki 2012/2013, Wykład nr 2 2/25 Plan wykładu nr 2 Informatyka 2 Politechnika Białostocka - Wydział Elektryczny Elektrotechnika, semestr III, studia niestacjonarne I stopnia Rok akademicki 2012/2013

Bardziej szczegółowo

Programowanie dynamiczne cz. 2

Programowanie dynamiczne cz. 2 Programowanie dynamiczne cz. 2 Wykład 7 16 kwietnia 2019 (Wykład 7) Programowanie dynamiczne cz. 2 16 kwietnia 2019 1 / 19 Outline 1 Mnożenie ciągu macierzy Konstruowanie optymalnego rozwiązania 2 Podstawy

Bardziej szczegółowo

Grafy dla każdego. dr Krzysztof Bryś. Wydział Matematyki i Nauk Informacyjnych Politechnika Warszawska.

Grafy dla każdego. dr Krzysztof Bryś. Wydział Matematyki i Nauk Informacyjnych Politechnika Warszawska. Grafy dla każdego dr Krzysztof Bryś brys@mini.pw.edu.pl Wydział Matematyki i Nauk Informacyjnych Politechnika Warszawska www.mini.pw.edu.pl Warszawa, 28 marca 2015 Graf składa się z elementów pewnego zbioru

Bardziej szczegółowo

Egzamin, AISDI, I termin, 18 czerwca 2015 r.

Egzamin, AISDI, I termin, 18 czerwca 2015 r. Egzamin, AISDI, I termin, 18 czerwca 2015 r. 1 W czasie niezależnym do danych wejściowych działają algorytmy A. sortowanie bąbelkowego i Shella B. sortowanie szybkiego i przez prosty wybór C. przez podział

Bardziej szczegółowo

Wybrane podstawowe rodzaje algorytmów

Wybrane podstawowe rodzaje algorytmów Wybrane podstawowe rodzaje algorytmów Tomasz Głowacki tglowacki@cs.put.poznan.pl Zajęcia finansowane z projektu "Rozwój i doskonalenie kształcenia na Politechnice Poznańskiej w zakresie technologii informatycznych

Bardziej szczegółowo

PRÓBNY EGZAMIN MATURALNY Z INFORMATYKI

PRÓBNY EGZAMIN MATURALNY Z INFORMATYKI PRÓBNY EGZAMIN MATURALNY Z INFORMATYKI POZIOM ROZSZERZONY ARKUSZ I STYCZEŃ 2011 Instrukcja dla zdającego 1. Sprawdź, czy arkusz egzaminacyjny zawiera 9 stron (zadania 1 3). Ewentualny brak zgłoś przewodniczącemu

Bardziej szczegółowo

< K (2) = ( Adams, John ), P (2) = adres bloku 2 > < K (1) = ( Aaron, Ed ), P (1) = adres bloku 1 >

< K (2) = ( Adams, John ), P (2) = adres bloku 2 > < K (1) = ( Aaron, Ed ), P (1) = adres bloku 1 > Typy indeksów Indeks jest zakładany na atrybucie relacji atrybucie indeksowym (ang. indexing field). Indeks zawiera wartości atrybutu indeksowego wraz ze wskaźnikami do wszystkich bloków dyskowych zawierających

Bardziej szczegółowo

Algorytmy i struktury danych

Algorytmy i struktury danych POLITECHNIKA KRAKOWSKA - WIEiK KATEDRA AUTOMATYKI i TECHNIK INFORMACYJNYCH Algorytmy i struktury danych www.pk.edu.pl/~zk/aisd_hp.html Wykładowca: dr inż. Zbigniew Kokosiński zk@pk.edu.pl Wykład 5: Algorytmy

Bardziej szczegółowo

Programowanie dynamiczne i algorytmy zachłanne

Programowanie dynamiczne i algorytmy zachłanne Programowanie dynamiczne i algorytmy zachłanne Tomasz Głowacki tglowacki@cs.put.poznan.pl Zajęcia finansowane z projektu "Rozwój i doskonalenie kształcenia na Politechnice Poznańskiej w zakresie technologii

Bardziej szczegółowo

Złożoność obliczeniowa klasycznych problemów grafowych

Złożoność obliczeniowa klasycznych problemów grafowych Złożoność obliczeniowa klasycznych problemów grafowych Oznaczenia: G graf, V liczba wierzchołków, E liczba krawędzi 1. Spójność grafu Graf jest spójny jeżeli istnieje ścieżka łącząca każdą parę jego wierzchołków.

Bardziej szczegółowo

Heurystyczne metody przeszukiwania

Heurystyczne metody przeszukiwania Heurystyczne metody przeszukiwania Dariusz Banasiak Katedra Informatyki Technicznej W4/K9 Politechnika Wrocławska Pojęcie heurystyki Metody heurystyczne są jednym z ważniejszych narzędzi sztucznej inteligencji.

Bardziej szczegółowo

Algorytmy i struktury danych. Wykład 6 Tablice rozproszone cz. 2

Algorytmy i struktury danych. Wykład 6 Tablice rozproszone cz. 2 Algorytmy i struktury danych Wykład 6 Tablice rozproszone cz. 2 Na poprzednim wykładzie Wiele problemów wymaga dynamicznych zbiorów danych, na których można wykonywać operacje: wstawiania (Insert) szukania

Bardziej szczegółowo

Programowanie i techniki algorytmiczne

Programowanie i techniki algorytmiczne Temat 2. Programowanie i techniki algorytmiczne Realizacja podstawy programowej 1) wyjaśnia pojęcie algorytmu, podaje odpowiednie przykłady algorytmów rozwiązywania różnych 2) formułuje ścisły opis prostej

Bardziej szczegółowo

Matematyczne Podstawy Informatyki

Matematyczne Podstawy Informatyki Matematyczne Podstawy Informatyki dr inż. Andrzej Grosser Instytut Informatyki Teoretycznej i Stosowanej Politechnika Częstochowska Rok akademicki 2013/2014 Twierdzenie 2.1 Niech G będzie grafem prostym

Bardziej szczegółowo

E: Rekonstrukcja ewolucji. Algorytmy filogenetyczne

E: Rekonstrukcja ewolucji. Algorytmy filogenetyczne E: Rekonstrukcja ewolucji. Algorytmy filogenetyczne Przypominajka: 152 drzewo filogenetyczne to drzewo, którego liśćmi są istniejące gatunki, a węzły wewnętrzne mają stopień większy niż jeden i reprezentują

Bardziej szczegółowo

1 Automaty niedeterministyczne

1 Automaty niedeterministyczne Szymon Toruńczyk 1 Automaty niedeterministyczne Automat niedeterministyczny A jest wyznaczony przez następujące składniki: Alfabet skończony A Zbiór stanów Q Zbiór stanów początkowych Q I Zbiór stanów

Bardziej szczegółowo

ZAGADNIENIE TRANSPORTOWE

ZAGADNIENIE TRANSPORTOWE ZAGADNIENIE TRANSPORTOWE ZT jest specyficznym problemem z zakresu zastosowań programowania liniowego. ZT wykorzystuje się najczęściej do: optymalnego planowania transportu towarów, przy minimalizacji kosztów,

Bardziej szczegółowo

Drzewa. Jeżeli graf G jest lasem, który ma n wierzchołków i k składowych, to G ma n k krawędzi. Własności drzew

Drzewa. Jeżeli graf G jest lasem, który ma n wierzchołków i k składowych, to G ma n k krawędzi. Własności drzew Drzewa Las - graf, który nie zawiera cykli Drzewo - las spójny Jeżeli graf G jest lasem, który ma n wierzchołków i k składowych, to G ma n k krawędzi. Własności drzew Niech T graf o n wierzchołkach będący

Bardziej szczegółowo

Algorytm poprawny jednoznaczny szczegółowy uniwersalny skończoność efektywność (sprawność) zmiennych liniowy warunkowy iteracyjny

Algorytm poprawny jednoznaczny szczegółowy uniwersalny skończoność efektywność (sprawność) zmiennych liniowy warunkowy iteracyjny Algorytm to przepis; zestawienie kolejnych kroków prowadzących do wykonania określonego zadania; to uporządkowany sposób postępowania przy rozwiązywaniu zadania, problemu, z uwzględnieniem opisu danych

Bardziej szczegółowo

Grafy (3): drzewa. Wykłady z matematyki dyskretnej dla informatyków i teleinformatyków. UTP Bydgoszcz

Grafy (3): drzewa. Wykłady z matematyki dyskretnej dla informatyków i teleinformatyków. UTP Bydgoszcz Grafy (3): drzewa Wykłady z matematyki dyskretnej dla informatyków i teleinformatyków UTP Bydgoszcz 13 (Wykłady z matematyki dyskretnej) Grafy (3): drzewa 13 1 / 107 Drzewo Definicja. Drzewo to graf acykliczny

Bardziej szczegółowo

Wstęp do programowania. Drzewa. Piotr Chrząstowski-Wachtel

Wstęp do programowania. Drzewa. Piotr Chrząstowski-Wachtel Wstęp do programowania Drzewa Piotr Chrząstowski-Wachtel Drzewa Drzewa definiują matematycy, jako spójne nieskierowane grafy bez cykli. Równoważne określenia: Spójne grafy o n wierzchołkach i n-1 krawędziach

Bardziej szczegółowo

Algorytmy Równoległe i Rozproszone Część V - Model PRAM II

Algorytmy Równoległe i Rozproszone Część V - Model PRAM II Algorytmy Równoległe i Rozproszone Część V - Model PRAM II Łukasz Kuszner pokój 209, WETI http://www.sphere.pl/ kuszner/ kuszner@sphere.pl Oficjalna strona wykładu http://www.sphere.pl/ kuszner/arir/ 2005/06

Bardziej szczegółowo

Zadanie 1. Suma silni (11 pkt)

Zadanie 1. Suma silni (11 pkt) 2 Egzamin maturalny z informatyki Zadanie 1. Suma silni (11 pkt) Pojęcie silni dla liczb naturalnych większych od zera definiuje się następująco: 1 dla n = 1 n! = ( n 1! ) n dla n> 1 Rozpatrzmy funkcję

Bardziej szczegółowo

Rozdział 4 KLASY, OBIEKTY, METODY

Rozdział 4 KLASY, OBIEKTY, METODY Rozdział 4 KLASY, OBIEKTY, METODY Java jest językiem w pełni zorientowanym obiektowo. Wszystkie elementy opisujące dane, za wyjątkiem zmiennych prostych są obiektami. Sam program też jest obiektem pewnej

Bardziej szczegółowo

Matematyka dyskretna. Andrzej Łachwa, UJ, /15

Matematyka dyskretna. Andrzej Łachwa, UJ, /15 Matematyka dyskretna Andrzej Łachwa, UJ, 2013 andrzej.lachwa@uj.edu.pl 14/15 Grafy podstawowe definicje Graf to para G=(V, E), gdzie V to niepusty i skończony zbiór, którego elementy nazywamy wierzchołkami

Bardziej szczegółowo

Analiza konstrukcji zawierających wskaźniki. Piotr Błaszyński

Analiza konstrukcji zawierających wskaźniki. Piotr Błaszyński Analiza konstrukcji zawierających wskaźniki Piotr Błaszyński Wskaźniki podejście naiwne: while(ptr!=null){ a[i] = *ptr; i++; ptr++; } po zmianie: N=length(ptr); alias_ptr = ptr; for(j=0 ; j

Bardziej szczegółowo

Algorytmy i Struktury Danych, 9. ćwiczenia

Algorytmy i Struktury Danych, 9. ćwiczenia Algorytmy i Struktury Danych, 9. ćwiczenia 206-2-09 Plan zajęć usuwanie z B-drzew join i split na 2-3-4 drzewach drzepce adresowanie otwarte w haszowaniu z analizą 2 B-drzewa definicja każdy węzeł ma następujące

Bardziej szczegółowo

Segmentacja obrazów cyfrowych z zastosowaniem teorii grafów - wstęp. autor: Łukasz Chlebda

Segmentacja obrazów cyfrowych z zastosowaniem teorii grafów - wstęp. autor: Łukasz Chlebda Segmentacja obrazów cyfrowych Segmentacja obrazów cyfrowych z zastosowaniem teorii grafów - wstęp autor: Łukasz Chlebda 1 Segmentacja obrazów cyfrowych - temat pracy Temat pracy: Aplikacja do segmentacji

Bardziej szczegółowo

Podstawy programowania 2. Temat: Drzewa binarne. Przygotował: mgr inż. Tomasz Michno

Podstawy programowania 2. Temat: Drzewa binarne. Przygotował: mgr inż. Tomasz Michno Instrukcja laboratoryjna 5 Podstawy programowania 2 Temat: Drzewa binarne Przygotował: mgr inż. Tomasz Michno 1 Wstęp teoretyczny Drzewa są jedną z częściej wykorzystywanych struktur danych. Reprezentują

Bardziej szczegółowo

Algorytmy z powracaniem

Algorytmy z powracaniem Algorytmy z powracaniem Materiały Grafem nazywamy zbiór G = (V, E), gdzie: V jest zbiorem wierzchołków (ang. vertex) E jest zbiorem krawędzi (E można też określić jako podzbiór zbioru nieuporządkowanych

Bardziej szczegółowo

Algorytmy i struktury danych. Drzewa: BST, kopce. Letnie Warsztaty Matematyczno-Informatyczne

Algorytmy i struktury danych. Drzewa: BST, kopce. Letnie Warsztaty Matematyczno-Informatyczne Algorytmy i struktury danych Drzewa: BST, kopce Letnie Warsztaty Matematyczno-Informatyczne Drzewa: BST, kopce Definicja drzewa Drzewo (ang. tree) to nieskierowany, acykliczny, spójny graf. Drzewo może

Bardziej szczegółowo

Klasa 2 INFORMATYKA. dla szkół ponadgimnazjalnych zakres rozszerzony. Założone osiągnięcia ucznia wymagania edukacyjne na. poszczególne oceny

Klasa 2 INFORMATYKA. dla szkół ponadgimnazjalnych zakres rozszerzony. Założone osiągnięcia ucznia wymagania edukacyjne na. poszczególne oceny Klasa 2 INFORMATYKA dla szkół ponadgimnazjalnych zakres rozszerzony Założone osiągnięcia ucznia wymagania edukacyjne na poszczególne oceny Algorytmy 2 3 4 5 6 Wie, co to jest algorytm. Wymienia przykłady

Bardziej szczegółowo

Wstęp do sieci neuronowych, wykład 11 Łańcuchy Markova

Wstęp do sieci neuronowych, wykład 11 Łańcuchy Markova Wstęp do sieci neuronowych, wykład 11 Łańcuchy Markova M. Czoków, J. Piersa 2010-12-21 1 Definicja Własności Losowanie z rozkładu dyskretnego 2 3 Łańcuch Markova Definicja Własności Losowanie z rozkładu

Bardziej szczegółowo

Literatura. 1) Pojęcia: złożoność czasowa, rząd funkcji. Aby wyznaczyć pesymistyczną złożoność czasową algorytmu należy:

Literatura. 1) Pojęcia: złożoność czasowa, rząd funkcji. Aby wyznaczyć pesymistyczną złożoność czasową algorytmu należy: Temat: Powtórzenie wiadomości z PODSTAW INFORMATYKI I: Pojęcia: złożoność czasowa algorytmu, rząd funkcji kosztu. Algorytmy. Metody programistyczne. Struktury danych. Literatura. A. V. Aho, J.E. Hopcroft,

Bardziej szczegółowo

Techniki wyszukiwania danych haszowanie

Techniki wyszukiwania danych haszowanie Algorytmy i struktury danych Instytut Sterowania i Systemów Informatycznych Wydział Elektrotechniki, Informatyki i Telekomunikacji Uniwersytet Zielonogórski Techniki wyszukiwania danych haszowanie 1 Cel

Bardziej szczegółowo

Metody Programowania

Metody Programowania POLITECHNIKA KRAKOWSKA - WIEiK KATEDRA AUTOMATYKI i TECHNIK INFORMACYJNYCH Metody Programowania www.pk.edu.pl/~zk/mp_hp.html Wykładowca: dr inż. Zbigniew Kokosiński zk@pk.edu.pl Wykład 8: Wyszukiwanie

Bardziej szczegółowo

2012-01-16 PLAN WYKŁADU BAZY DANYCH INDEKSY - DEFINICJE. Indeksy jednopoziomowe Indeksy wielopoziomowe Indeksy z użyciem B-drzew i B + -drzew

2012-01-16 PLAN WYKŁADU BAZY DANYCH INDEKSY - DEFINICJE. Indeksy jednopoziomowe Indeksy wielopoziomowe Indeksy z użyciem B-drzew i B + -drzew 0-0-6 PLAN WYKŁADU Indeksy jednopoziomowe Indeksy wielopoziomowe Indeksy z użyciem B-drzew i B + -drzew BAZY DANYCH Wykład 9 dr inż. Agnieszka Bołtuć INDEKSY - DEFINICJE Indeksy to pomocnicze struktury

Bardziej szczegółowo

Kolorowanie wierzchołków Kolorowanie krawędzi Kolorowanie regionów i map. Wykład 8. Kolorowanie

Kolorowanie wierzchołków Kolorowanie krawędzi Kolorowanie regionów i map. Wykład 8. Kolorowanie Wykład 8. Kolorowanie 1 / 62 Kolorowanie wierzchołków - definicja Zbiory niezależne Niech G będzie grafem bez pętli. Definicja Mówimy, że G jest grafem k kolorowalnym, jeśli każdemu wierzchołkowi możemy

Bardziej szczegółowo

Porządek symetryczny: right(x)

Porządek symetryczny: right(x) Porządek symetryczny: x lef t(x) right(x) Własność drzewa BST: W drzewach BST mamy porządek symetryczny. Dla każdego węzła x spełniony jest warunek: jeżeli węzeł y leży w lewym poddrzewie x, to key(y)

Bardziej szczegółowo

Podstawy Programowania C++

Podstawy Programowania C++ Wykład 3 - podstawowe konstrukcje Instytut Automatyki i Robotyki Warszawa, 2014 Wstęp Plan wykładu Struktura programu, instrukcja przypisania, podstawowe typy danych, zapis i odczyt danych, wyrażenia:

Bardziej szczegółowo

Macierze. Rozdział Działania na macierzach

Macierze. Rozdział Działania na macierzach Rozdział 5 Macierze Funkcję, która każdej parze liczb naturalnych (i, j) (i 1,..., n; j 1,..., m) przyporządkowuje dokładnie jedną liczbę a ij F, gdzie F R lub F C, nazywamy macierzą (rzeczywistą, gdy

Bardziej szczegółowo