Badanie problemu kliki z j zykiem Python
|
|
- Helena Sowińska
- 6 lat temu
- Przeglądów:
Transkrypt
1 Uniwersytet Jagiello«ski w Krakowie Wydziaª Fizyki, Astronomii i Informatyki Stosowanej Dariusz Zdybski Nr albumu: Badanie problemu kliki z j zykiem Python Praca magisterska na kierunku Informatyka Praca wykonana pod kierunkiem dra hab. Andrzeja Kapanowskiego Instytut Fizyki Kraków :
2 O±wiadczenie autora pracy wiadom odpowiedzialno±ci prawnej o±wiadczam,»e niniejsza praca dyplomowa zostaªa napisana przeze mnie samodzielnie i nie zawiera tre±ci uzyskanych w sposób niezgodny z obowi zuj cymi przepisami. O±wiadczam równie»,»e przedstawiona praca nie byªa wcze±niej przedmiotem procedur zwi zanych z uzyskaniem tytuªu zawodowego w wy»szej uczelni. Kraków, dnia Podpis autora pracy O±wiadczenie kieruj cego prac Potwierdzam,»e niniejsza praca zostaªa przygotowana pod moim kierunkiem i kwalikuje si do przedstawienia jej w post powaniu o nadanie tytuªu zawodowego. Kraków, dnia Podpis kieruj cego prac 2:
3 Skªadam serdeczne podzi kowania dla promotora tej pracy Pana dra hab. Andrzeja Kapanowskiego za wszelk pomoc, cierpliwo±, zaanga»owanie, po±wi cony czas, oraz istotne uwagi merytoryczne, bez których niniejsza praca nie mogªaby powsta. 3:
4 Streszczenie W pracy przedstawiono implementacj w j zyku Python wybranych algorytmów dla problemu kliki. Powstaªo szereg narz dzi pomocniczych potrzebnych do wydajnego dziaªania algorytmów wyszukuj cych kliki. Zaimplementowano generatory zbioru pot gowego, wszystkich klik, wszystkich klik z k wierzchoªkami, wszystkich trójk tów w grae. S dost pne dwa sposoby wyznaczania wspóªczynnika klastrowania sieci. Ulepszono cztery algorytmy wyznaczania maksymalnego zbioru niezale»nego (mo»na ustala wierzchoªek startowy). Zaimplementowano algorytmy wyznaczania kliki maksymalnej lub najwi kszej: prosty algorytm sprawdzaj cy wszystkie kliki, algorytm rosn cej kliki, algorytm zbiorów niezale»nych, algorytm Boppany i Halldorssona. Zaimplementowano cztery wersje algorytmu Brona-Kerboscha do znajdowania klik maksymalnych: wersj klasyczn, dwa warianty z punktem podzia- ªu (punkt przypadkowy, punkt o najwi kszym stopniu), oraz wersj z uporz dkowaniem degeneracji. Wszystkie algorytmy posiadaj testy jednostkowe, a dla wybranych algorytmów sprawdzono ich praktyczn zªo»ono± obliczeniow. Sªowa kluczowe: grafy, problem kliki, klika maksymalna, klika najwi ksza, zbiór niezale»ny, zbiór pot gowy 4:
5 English title: Study of the clique problem with Python Abstract Python implementation of selected graph algorithms for the clique problem is presented. A few tools are created that are used in fast clique nding algorithms. Generators for a power set, all cliques, all cliques with k nodes, and all triangles are implemented. Two methods for nding a clustering coef- cient are available. Four algorithms for nding a maximal independent set are improved (the starting node can be set). Several algorithms for nding maximal or maximum cliques are implemented: a simple algorithm checking all cliques, the algorithm with a growing clique, the independent sets algorithm, and the Boppana and Halldorsson algorithm. Four versions of the Bron-Kerbosh algorithm for nding maximal cliques are implemented: the classic version, two variants involving a pivot vertex (a random pivot, a maximum degree pivot), and the version with the degeneracy ordering. All algorithms have own unit tests and for some algorithms the real computational complexity was checked. Keywords: graphs, clique problem, maximal clique, maximum clique, independent set, power set 5:
6 Spis tre±ci Spis tabel Spis rysunków Listings Wst p Cele pracy Organizacja pracy Teoria grafów Grafy skierowane i nieskierowane Kliki Zbiory niezale»ne Grafy planarne Grafy doskonaªe Implementacja grafów Grafowe struktury danych Przykªadowe obliczenia Algorytmy Wyznaczanie zbioru pot gowego Wyznaczanie wszystkich klik Wyznaczanie wszystkich klik z k wierzchoªkami Wyznaczanie wszystkich trójk tów w grae Wyznaczanie trójk tów w grae planarnym Wyznaczanie liczby trójk tów z macierzy s siedztwa Wyznaczanie najwi kszej kliki w grae Wyznaczanie maksymalnej kliki w grae Wyznaczanie maksymalnej kliki przez zbiór niezale»ny Algorytm Boppany i Halldorssona Wyznaczanie wspóªczynnika klastrowania Klasyczny algorytm Brona-Kerboscha Algorytm Brona-Kerboscha z przypadkowym punktem podziaªu Algorytm Brona-Kerboscha z punktem podziaªu o najwi kszym stopniu Algorytm Brona-Kerboscha z uporz dkowaniem degeneracji Algorytm Tsukiyamy Podsumowanie A. Testy algorytmów A.1. Testy dla zbioru pot gowego A.2. Testy dla klik z k wierzchoªkami A.3. Testy dla kliki maksymalnej A.4. Testy dla sieci przypadkowych :
7 7: A.5. Testy algorytmu Brona-Kerboscha Bibliograa
8 Spis tabel A.1 Kliki maksymalne dla grafów przypadkowych z n = A.2 Porównanie ró»nych wersji algorytmu Brona-Kerboscha :
9 Spis rysunków A.1 Wykres wydajno±ci wyznaczania zbioru pot gowego A.2 Wykres wydajno±ci wyznaczania klik z trzema wierzchoªkami A.3 Wykres wydajno±ci wyznaczania klik z czterema wierzchoªkami A.4 Wykres wydajno±ci wyznaczania kliki maksymalnej (graf peªny) A.5 Wykres wydajno±ci wyznaczania kliki maksymalnej (graf cykliczny).. 34 A.6 Zale»no± wspóªczynnika klastrowania od prawdopodobie«stwa p A.7 Zale»no± rozmiaru najwi kszej kliki od prawdopodobie«stwa p :
10 Listings 4.1 Moduª powersets Funkcja testuj ca klik Generator wszystkich klik w grae Generator wszystkich klik z k wierzchoªkami Generator wszystkich trójk tów Moduª triangles Wyznaczanie najwi kszej kliki w grae Moduª maximalclique Moduª isetclique Moduª isetramsey Wyznaczanie wspóªczynnika klastrowania Wyznaczanie wspóªczynnika klastrowania z macierzy s siedztwa Moduª bronkerbosch Moduª bronkerboschrp Moduª bronkerboschdp Moduª bronkerboschdeg :
11 1. Wst p Tematem niniejszej pracy jest problem kliki [1]. Jest to w istocie rodzina problemów zwi zanych z wyszukiwaniem w danym grae podgrafu b d cego grafem peªnym. Do tej rodziny problemów nale» mi dzy innymi: Znajdowanie najwi kszej kliki, czyli kliki o najwi kszej liczbie wierzchoªków. Znajdowanie kliki o najwi kszej wadze w grae wa»onym Tutaj ka»dy wierzchoªek grafu (rzadziej kraw d¹) ma przyporz dkowan wag. Wypisywanie wszystkich klik maksymalnych, czyli klik nie zawieraj cych si w wi kszej klice. Wypisywanie jednej lub wszystkich klik o rozmiarze k. Problem kliki znajduje swoje zastosowanie w badaniach sieci spoªeczno±ciowych, w bioinformatyce, czy w chemii obliczeniowej. W samej teorii grafów rozmiar najwi kszej kliki jest dolnym ograniczeniem na liczb chromatyczn grafu. Problem kliki jest klasycznym problemem NP-zupeªnym, czyli prawie nie ma szans na znalezienie dla niego algorytmu o zªo»ono±ci wielomianowej. W ogólnym przypadku znane s ró»ne algorytmy o zªo»ono±ci wykªadniczej, natomiast dla pewnych szczególnych rodzin grafów znaleziono algorytmy wielomianowe Cele pracy Celem pracy jest implementacja ró»nych algorytmów zwi zanych z problemem kliki, a tak»e sprawdzenie ich wydajno±ci dla ró»nego rodzaju grafów. Do zapisu algorytmów zostaª u»yty j zyk Python [2]. Zalet u»ycia tego j zyka jest bogata biblioteka standardowa, mnogo± dost pnych dodatkowych moduªów, czytelna i zwi zªa skªadnia. Kod programu w j zyku Python ma form bardzo zbli»on do pseudokodu. Cecha ta pozwala skupi si na algorytmie oraz sposobie jego dziaªania, zamiast na rozszyfrowywaniu skªadni oraz mechanizmów u»ytego j zyka programowania Organizacja pracy Tre± pracy jest zorganizowana w nast puj cy sposób. Rozdziaª 1 zawiera krótkie wprowadzenie i cele pracy. Rozdziaª 2 wprowadza podstawowe poj cia z teorii grafów, z których korzystano w dalszej cz ±ci pracy. Rozdziaª 3 opisuje implementacj w j zyku Python najwa»niejszych struktur grafowych. Najwi kszy w pracy rozdziaª 4 po±wi cony jest algorytmom grafowym zwi - zanym z problemem kliki. Zaprezentowano równie» du»y zestaw pomocni- 7 11:
12 12: czych funkcji do wyznaczania ró»nych zestawów obiektów (zbiory pot gowe, kliki). Rozdziaª 5 zawiera podsumowanie pracy. W dodatku A zebrano wyniki testów zaimplementowanych algorytmów.
13 2. Teoria grafów Teoria grafów to dziaª matematyki oraz informatyki zajmuj cy si badaniem wªa±ciwo±ci grafów [3], [4], [5]. Informatyka w du»ej mierze zajmuje si tworzeniem algorytmów pozwalaj cych okre±li ró»ne wªa±ciwo±ci badanego grafu. Algorytmy te sªu» do rozwi zywania wielu praktycznych zada«, cz sto w bardzo szerokim zakresie dziedzin, takich jak m.in.: ekonomia, socjologia, bankowo±, czy problemów zwi zanych z optymalizacj. Ju» w 1736 Leonhard Euler badaª zagadnienia zwi zane z grafami, byªo to zagadnienie mostów królewieckich Grafy skierowane i nieskierowane Grafem prostym (ang. simple graph) nazywamy uporz dkowan par wierzchoªków G = (V, E), w skªad której wchodzi zbiór wierzchoªków V, oraz zbiór kraw dzi E wyznaczaj cych poª czenia pomi dzy wierzchoªkami. Multigrafy mog zawiera p tle przy wierzchoªkach i kraw dzie równolegªe (kraw dzie ª cz ce te same dwa wierzchoªki). Graf skierowany (ang. directed graph) jest to rodzaj grafu, którego zbiór kraw dzi zawiera kraw dzie skierowane. Jest dobrze okre±lony wierzchoªek pocz tkowy i wierzchoªek ko«cowy. Kraw dzie skierowane w grae mog sªu-»y do ukazania kierunku poruszania si pomi dzy wierzchoªkami, kierunku przepªywu danych, itp. Graf nieskierowany (ang. undirected graph) jest to graf, którego zbiór kraw dzi zawiera kraw dzie nieskierowane. Mówimy,»e dwa wierzchoªki nale» - ce do kraw dzi s s siednie. Istnieje mo»liwo± przechodzenia przez kraw d¹ w obu kierunkach. Stopie«wierzchoªka w grae nieskierowanym jest to liczba kraw dzi spotykaj cych si w danym wierzchoªku. P tla wªasna przy wierzchoªku liczy si podwójnie. W grae skierowanym mo»na wyró»ni stopie«wychodz cy i stopie«przychodz cy Kliki Dla grafu nieskierowanego G = (V, E) okre±lamy klik jako podzbiór zbioru wierzchoªków V, który indukuje podgraf b d cy grafem peªnym. Klika maksymalna (ang. maximal clique) nie jest podzbiorem wi kszej kliki. Klika najwi ksza (ang. maximum clique) jest to klika o najwi kszej liczno±ci w grae. Rozmiar najwi kszej kliki w grae G (ang. clique number ) oznacza si przez ω(g) [6]. Termin klika pochodzi z artykuªu wykorzystuj cego grafy 9 13:
14 peªne w sieciach spoªeczno±ciowych do opisu klik ludzi, czyli grupy ludzi znaj cych siebie nawzajem [7]. Problem znalezienia najwi kszej kliki jest w ogólno±ci NP-zupeªny. Jednak dla pewnych rodzin grafów istniej rozwi zania wielomianowe. S to przykªadowo grafy dwudzielne, grafy regularne, grafy planarne [8]. Dla tych rodzin grafów istnieje ograniczenie na mo»liwy rozmiar najwi kszej kliki Zbiory niezale»ne Dla grafu nieskierowanego G = (V, E) okre±lamy zbiór niezale»ny (ang. independent set) jako podzbiór zbioru wierzchoªków V, w którym»adna para wierzchoªków nie jest poª czona kraw dzi [9]. Maksymalny zbiór niezale»ny (ang. maximal independent set ) nie jest podzbiorem innego zbioru niezale»nego. Najwi kszy zbiór niezale»ny (ang. maximum independent set ) jest zbiorem niezale»nym o najwi kszej liczno±ci w grae. Zbiór niezale»ny jest przeciwie«stwem kliki. Wierzchoªki zbioru niezale»- nego w grae G tworz klik w dopeªnieniu grafu (ang. complement graph), czyli w grae Ḡ. St d problem znalezienia najwi kszego zbioru niezale»nego jest równowa»ny problemowi znalezienia najwi kszej kliki. Warto zauwa»y,»e problem kliki i problem zbioru niezale»nego maj inne wªa±ciwo±ci, kiedy zaw zimy si do pewnych rodzin grafów. Przykªadowo dla grafów planarnych problem kliki mo»e by rozwi zany w czasie wielomianowym [10], podczas gdy problem zbioru niezale»nego pozostaje NP-trudny Grafy planarne Graf planarny (ang. planar graph) jest to graf, który mo»e by narysowany na pªaszczy¹nie tak,»e jego kraw dzie nie b d si przecina [11]. Twierdzenie Kuratowskiego (1930) mówi,»e grafy planarne nie mog zwiera podgrafu homeomorcznego z grafem peªnym K 5, ani z grafem dwudzielnym peªnym K 3,3. St d mo»na wywnioskowa,»e najwi ksze mo»liwe kliki w grafach planarnych b d odpowiadaªy grafowi peªnemu K Grafy doskonaªe Graf doskonaªy (ang. perfect graph) jest to graf w którym liczba chromatyczna ka»dego podgrafu indukowanego jest równa rozmiarowi najwi kszej kliki tego podgrafu [12]. Dla grafów doskonaªych problem kliki ma rozwi zanie dziaªaj ce w czasie wielomianowym. Przykªadowe klasy grafów doskona- ªych: grafy dwudzielne (ang. bipartite graphs), grafy kraw dziowe uzyskane z grafów dwudzielnych, grafy przedziaªowe (ang. interval graphs) [13], grafy ci ciwowe (and. chordal graphs). 14:
15 3. Implementacja grafów Kod w j zyku Python w naszej pracy powstaª przy wykorzystaniu biblioteki grafowej rozwijanej w Instytucie Fizyki UJ [14]. Konieczne okazaªo si rozszerzenie interfejsu grafów o now metod complement(), która zwraca dopeªnienie danego grafu. Metod wykorzystano do wyznaczania maksymalnej kliki w grae. Drugie rozszerzenie interfejsu grafów to metoda subgraph(nodes), która zwraca podgraf indukowany. Dalej przedstawimy najwa»niejsze cechy biblioteki :
16 3.1. Grafowe struktury danych Poni»ej poka»emy jak zaimplementowano wybrane obiekty grafowe w rozwijanej bibliotece grafowej. Wierzchoªek: Obiekt hashowalny. Kraw d¹: Instancja klasy Edge. Graf: Instancja klasy Graph. Multigraf: Instancja klasy MultiGraph. Algorytm: Klasa z typowymi metodami init do inicjalizacji danych i run do wªa±ciwej pracy. Wyniki dziaªania algorytmu s zapisane w odpowiednich atrybutach klasy. Drzewo rozpinaj ce: Instancja klasy Graph lub sªownik parent z (node, node) lub (node, None) dla korzenia. Klika: Zbiór wierzchoªków clique lub sªownik z (node, bool). Zbiór niezale»ny: Zbiór wierzchoªków independent_set lub sªownik z (node, bool). Pokrycie wierzchoªkowe: Zbiór wierzchoªków node_cover lub sªownik z (node, bool). Pokrycie kraw dziowe: Zbiór kraw dzi edge_cover, ale edge.source < edge.target. Skojarzenie: Zbiór kraw dzi lub sªownik mate z (node, node) lub (node, None). Inna mo»liwo± to sªownik mate z (node, edge) (kraw d¹ do drugiego wierzchoªka z pary) lub (node, None). Kolorowanie wierzchoªków: Sªownik color z (node, int) lub (node, None) przy braku koloru. Kolory s numerowane od 0 w gór. Kolorowanie kraw dzi: Sªownik color z (edge, int) lub (edge, None) przy braku koloru, ale edge.source < edge.target. Kolory s numerowane od 0 w gór. Dla multigrafów kraw dzie musz by unikalne, tzn. przy kraw dziach równolegªych musz by ró»nice w atrybucie edge.weight :
17 3.2. Przykªadowe obliczenia Przykªadowa sesja interaktywna. >>> from edges import Edge >>> from gr ap hs import Graph >>> from f a c t o r y import GraphFactory >>> graph_factory = GraphFactory ( Graph ) >>> G = graph_factory. make_random ( 1 0, False, 0. 5 ) # Wyznaczanie k l i k i maksymalnej. >>> from maximalclique import MaximalClique >>> a l g o r i t h m = MaximalClique (G) >>> a l g o r i t m. run ( ) >>> a l g o r i t m. c l i q u e # k l i k a maksymalna # Algorytm Boppany i Halldorssona. >>> from i s e t r a m s e y import MaximalCliqueRamsey >>> a l g o r i t h m = MaximalCliqueRamsey ( s e l f.g) >>> a l g o r i t h m. run ( ) >>> a l g o r i t m. c l i q u e # k l i k a maksymalna # Algorytm Brona Kerboscha. >>> from bronkerbosch import ClassicBronKerbosch >>> a l g o r i t h m = ClassicBronKerbosch (G) >>> a l g o r i t m. run ( ) >>> a l g o r i t m. c l i q u e s # l i s t a k l i k maksymalnych 17:
18 4. Algorytmy W pewnych algorytmach zwi zanych z klikami zachodzi potrzeba generowania zbioru pot gowego dla danego zbioru wierzchoªków grafu. Dlatego w ramach pracy stworzono funkcje realizuj ce to zadanie Wyznaczanie zbioru pot gowego Zbiór pot gowy 2 X (ang. power set) jest to zbiór wszystkich podzbiorów danego zbioru X [15]. Je»eli X jest zbiorem n-elementowym, to zbiór pot gowy ma 2 n elementów, st d oznaczenie symboliczne 2 X. Przy tworzeniu zbioru pot gowego wygodnie jest operowa zbiorem w postaci listy Pythona. W zastosowaniach zwykle nie potrzebujemy od razu caªego zbioru pot gowego, tylko chcemy przetwarza po kolei wszystkie podzbiory. Optymalnym rozwi zaniem jest iterator po podzbiorach iter_power_set(). Warto zwróci uwag na jego struktur rekurencyjn, która prawie odtwarza matematyczn denicj zbioru pot gowego. Przykªady innych implementacji w j zyku Python mo»na znale¹ w serwisie Rosetta Code [16]. Istotnie ró»nym podej±ciem jest wykorzystanie reprezentacji binarnej ró»nych podzbiorów danego zbioru. #! / usr / bin / python Listing 4.1. Moduª powersets. import s y s def iter_power_set (L ) : """ Generuje w s z y s t k i e p o d z b i o r y danego z b i o r u. """ # Glebokosc r e k u r e n c j i rowna s i e l e n (L ). r e c u r s i o n l i m i t = s y s. g e t r e c u r s i o n l i m i t ( ) s y s. s e t r e c u r s i o n l i m i t (max( l e n (L) 2, r e c u r s i o n l i m i t ) ) i f l e n (L) == 0 : yield [ ] else : item = [ L [ 0 ] ] for s u b s e t in iter_power_set (L [ 1 : ] ) : yield s u b s e t yield s u b s e t + item 4.2. Wyznaczanie wszystkich klik Sprawdzenie, czy dany zbiór k wierzchoªków tworzy klik jest proste, mo»- na to zrobi w czasie O(k 2 ). Zadanie to realizuje funkcja is_clique() :
19 from edges import Edge Listing 4.2. Funkcja testuj ca klik. def i s _ c l i q u e ( graph, nodes ) : """ Sprawdzenie czy z b i o r wierzcholkow tworzy k l i k e. """ i f l e n ( nodes ) == 0 : # z b i o r pusty to nie k l i k a return F a l s e for node1 in nodes : for node2 in nodes : i f node1 < node2 : i f not graph. has_edge ( Edge ( node1, node2 ) ) : return F a l s e return True Najprostszy algorytm siªowy wyznaczania wszystkich klik polega na testowaniu wszystkich elementów zbioru pot gowego zbudowanego na bazie zbioru wszystkich wierzchoªków grafu. W naszej implementacji generator wszystkich klik korzysta z generatora zbioru pot gowego. Zªo»ono± czasow szacujemy na O(2 n n 2 ). Listing 4.3. Generator wszystkich klik w grae. def i t e r _ a l l _ c l i q u e s ( graph ) : """ Generator w s z y s t k i c h k l i k w g r a f i e. """ for nodes in iter_power_set ( l i s t ( graph. i t e r n o d e s ( ) ) ) : i f i s _ c l i q u e ( graph, nodes ) : yield s e t ( nodes ) 4.3. Wyznaczanie wszystkich klik z k wierzchoªkami W pewnych sytuacjach potrzebna jest znajomo± wszystkich klik zawieraj cych dokªadnie k wierzchoªków. W naszej implementacji korzystamy z generatora kombinacji k-elementowych z biblioteki standardowej Pythona. Zªo-»ono± czasowa wynosi O(n) dla k = 1, O(m) dla k = 2, oraz O(n k k 2 ) dla k > 2. import Listing 4.4. Generator wszystkich klik z k wierzchoªkami. i t e r t o o l s def i t e r _ k _ c l i q u e s ( graph, k ) : """ Generator k l i k z k wierzcholkami. """ i f k == 1 : for node in graph. i t e r n o d e s ( ) : yield s e t ( [ node ] ) e l i f k == 2 : for edge in graph. i t e r e d g e s ( ) : yield s e t ( [ edge. source, edge. t a r g e t ] ) else : for nodes in i t e r t o o l s. combinations ( graph. i t e r n o d e s ( ), k ) : i f i s _ c l i q u e ( graph, nodes ) : yield s e t ( nodes ) 15 19:
20 4.4. Wyznaczanie wszystkich trójk tów w grae Przydatnym narz dziem mo»e by generator trójk tów, czyli klik z trzema wierzchoªkami, zawieraj cych dany wierzchoªek. W naszej implementacji korzystamy z generatora kombinacji 2-elementowych z biblioteki standardowej Pythona. Zªo»ono± czasowa jest szacowana na O( 2 ). Warto zauwa»y,»e dla ka»dego grafu grafu planarnego mo»na otrzyma graf topologiczny, czyli reprezentacj grafu z wyznaczon kolejno±ci s siadów ka»dego wierzchoªka. Korzystaj c z grafu topologicznego mo»na wyznaczy wszystkie trójk ty zawieraj ce dany wierzchoªek w czasie O( ). import i t e r t o o l s Listing 4.5. Generator wszystkich trójk tów. def i t e r _ t r i a n g l e s ( graph, node ) : """ Generator t r o j k a t o w z a w i e r a j a c y c h node. """ for nodes in i t e r t o o l s. combinations ( ( edge. t a r g e t for edge in graph. i t e r o u t e d g e s ( node ) ), 2 ) : t r i a n g l e = s e t ( nodes ) t r i a n g l e. add ( node ) i f i s _ c l i q u e ( graph, t r i a n g l e ) : yield t r i a n g l e 4.5. Wyznaczanie trójk tów w grae planarnym W grae planarnym wszystkie trójk ty mo»na znale¹ w czasie liniowym [18], [19]. Wykorzystuje si algorytm DFS Wyznaczanie liczby trójk tów z macierzy s siedztwa Jednym jest sposobów zapisu struktury grafu jest kwadratowa macierz s siedztwa A = [a ij ], gdzie indeksy i, j numeruj wierzchoªki, a ij zawiera liczb kraw dzi ª cz cych wierzchoªki i-ty z j-tym [4]. Podana denicja stosuje si do grafów prostych i multigrafów, skierowanych i nieskierowanych. Wybrane informacje zawarte w macierzy s siedztwa [4]: Je»eli macierz A jest symetryczna, to graf jest nieskierowany. Je»eli a ii = 0 dla ka»dego i, to graf nie ma p tli wªasnych. Je»eli macierz A zawiera tylko liczby 0 i 1, to w grae nie wyst puj kraw dzie równolegªe. Dla grafu prostego nieskierowanego, stopie«i-tego wierzchoªka jest równy sumie warto±ci elementów i-tego wiersza lub i-tej kolumny. Dla grafu prostego skierowanego, stopie«wyj±ciowy i-tego wierzchoªka jest równy sumie warto±ci elementów i-tego wiersza. Dla grafu prostego skierowanego, stopie«wej±ciowy i-tego wierzchoªka jest równy sumie warto±ci elementów i-tej kolumny :
21 Je»eli B = [b ij ] = A 2 dla grafu prostego nieskierowanego, to (1) b ii równa si stopniowi i-tego wierzchoªka, (2) b ij (i ró»ne od j) równa si liczbie ±cie»ek o dªugo±ci 2 od i do j. Je»eli B = [b ij ] = A 2 dla grafu prostego skierowanego, to (1) b ii równa si liczbie par kraw dzi antyrównolegªych incydentnych z i-tym wierzchoªkiem, (2) b ij (i ró»ne od j) równa si liczbie ±cie»ek skierowanych o dªugo±ci 2 od i do j. Je»eli C = [c ij ] = A 3 dla grafu prostego, to c ii równa si liczbie cykli skierowanych o dªugo±ci 3 (trójk ty), przechodz cych przez i-ty wierzchoªek. W grae nieskierowanym interesuj nas cykle nieskierowane, czyli liczba trójk tów w c ii b dzie podwojona. Trzeba pami ta,»e ka»dy trójk t przechodzi przez trzy wierzchoªki, czyli jest wzi ty pod uwag w trzech ró»nych elementach c ii. Wªasno±ci macierzy C = A 3 wykorzystamy do stworzenia przydatnego algorytmu. Dane wej±ciowe: Graf prosty skierowany lub nieskierowany. Problem: Wyznaczenie liczby trójk tów zawieraj cych dowolny wierzchoªek grafu i liczby wszystkich trójk tów w grae. Opis algorytmu: Algorytm rozpoczyna si od stworzenia macierzy A, poniewa» reprezentacja grafu jest ukryta za interfejsem. Je»eli mamy na wej±ciu graf wa»ony podany w reprezentacji macierzy s siedztwa, to i tak musimy zbudowa macierz zero-jedynkow. Nast pnie w potrójnej p tli po wierzchoªkach wykonywane s dziaªania odpowiadaj ce mno»eniu macierzy. Zªo»ono± : Zªo»ono± czasowa algorytmu jest O(V 3 ), ze wzgl du na potrójna p tl po wierzchoªkach grafu. Zªo»ono± pami ciowa grafu jest szacowana na O(V 2 ), ze wzgl du na tworzenie macierzy A. W naszej implementacji sªownikowej macierzy A przechowujemy tylko niezerowe elementy, co daje zªo»ono± pami ciow O(E). Uwagi: Algorytm zostaª wykorzystany przy tworzeniu jednej z wersji funkcji obliczaj cej wspóªczynnik klastrowania. #! / usr / bin / python Listing 4.6. Moduª triangles. class T r i a n g l e M a t r i x : """ Finding t r i a n g l e s in O(V 3) time. """ def init ( s e l f, graph ) : """The a l g o r i t h m i n i t i a l i z a t i o n. """ # Graf moze byc skierowany l u b nieskierowany. s e l f. graph = graph # Przygotowanie macierzy s a s i e d z t w a 0 1. # Przechowujemy t y l k o j e d y n k i w slowniku a. s e l f. a = d i c t ( ) 17 21:
22 for s o u r c e in s e l f. graph. i t e r n o d e s ( ) : s e l f. a [ s o u r c e ] = d i c t ( ) for edge in s e l f. graph. i t e r e d g e s ( ) : # O(E) time s e l f. a [ edge. s o u r c e ] [ edge. t a r g e t ] = 1 i f not s e l f. graph. i s _ d i r e c t e d ( ) : s e l f. a [ edge. t a r g e t ] [ edge. s o u r c e ] = 1 # Elementy diagonalne macierzy A 3. # s e l f. t r i a n g l e [ node ] zawiera l i c z b e t r o j k a t o w przy node. s e l f. t r i a n g l e = d i c t ( ( node, 0) for node in s e l f. graph. i t e r n o d e s ( ) ) def run ( s e l f, s o u r c e=none ) : """ E x e c u t a b l e pseudocode. """ for node in s e l f. graph. i t e r n o d e s ( ) : # O(V 3) time for s o u r c e in s e l f. graph. i t e r n o d e s ( ) : for t a r g e t in s e l f. graph. i t e r n o d e s ( ) : s e l f. t r i a n g l e [ node ] += ( s e l f. a [ node ]. g e t ( source, 0) s e l f. a [ s o u r c e ]. g e t ( t a r g e t, 0) s e l f. a [ t a r g e t ]. g e t ( node, 0 ) ) # W g r a f i e nieskierowanym c y k l e sa l i c z o n e podwojnie, # w o b i e s t r o n y. i f not s e l f. graph. i s _ d i r e c t e d ( ) : for node in s e l f. graph. i t e r n o d e s ( ) : # O(V) time s e l f. t r i a n g l e [ node ] /= 2 def f i n d _ a l l _ t r i a n g l e s ( s e l f ) : """ Return the number o f a l l t r i a n g l e s. """ r e s u l t = sum( s e l f. t r i a n g l e [ node ] for node in s e l f. graph. i t e r n o d e s ( ) ) return r e s u l t / Wyznaczanie najwi kszej kliki w grae Najprostszy algorytm siªowy polega na sprawdzeniu wszystkich mo»liwych klik i zapisaniu najwi kszej z nich. Zªo»ono± czasow szacujemy na O(2 n n 2 ). Listing 4.7. Wyznaczanie najwi kszej kliki w grae. def find_maximum_clique ( graph ) : """ Wyznaczanie k l i k i o n a j w i e k s z e j l i c z n o s c i w g r a f i e. """ return max( i t e r _ a l l _ c l i q u e s ( graph ), key=l e n ) 4.8. Wyznaczanie maksymalnej kliki w grae Dane wej±ciowe: Graf prosty nieskierowany G, wierzchoªek grafu v. Problem: Wyznaczenie maksymalnej kliki zawieraj cej wierzchoªek v. Opis algorytmu: Algorytm rozpoczynamy od kliki zawieraj cej tylko podany wierzchoªek v. Nast pnie do bie» cej kliki sukcesywnie doª czamy wierz :
23 choªki (jeden na raz), które s poª czone z ka»dym wierzchoªkiem nale» cym do bie» cej kliki. Inne wierzchoªki grafu odrzucamy [1]. Zªo»ono± : Zªo»ono± czasowa algorytmu jest liniowa O(V + E), poniewa» algorytm przebiega listy s siedztwa ka»dego wierzchoªka grafu. Zªo»ono± pami ciowa jest klasy O(V ), poniewa» zapami tujemy jedynie wierzchoªki nale» ce do kliki. Uwagi: Wyznaczona klika mo»e by bardzo maªa, np. dwuelementowa. Rozwi zanie mo»e nie by najwi ksz klik z wierzchoªkiem v. #! / usr / bin / python Listing 4.8. Moduª maximalclique. class MaximalClique : """ Finding a maximal c l i q u e in O(V+E) time. """ def init ( s e l f, graph ) : """The a l g o r i t h m i n i t i a l i z a t i o n. """ i f graph. i s _ d i r e c t e d ( ) : raise ValueError ( " the graph i s d i r e c t e d " ) s e l f. graph = graph s e l f. c l i q u e = s e t ( ) s e l f. s o u r c e = None s e l f. c a r d i n a l i t y = 0 def run ( s e l f, s o u r c e=none ) : """ E x e c u t a b l e pseudocode. """ i f s o u r c e i s None : # g e t f i r s t random node s o u r c e = s e l f. graph. i t e r n o d e s ( ). next ( ) s e l f. s o u r c e = s o u r c e s e l f. c l i q u e. add ( s e l f. s o u r c e ) for node in s e l f. graph. i t e r n o d e s ( ) : i f node in s e l f. c l i q u e : continue c o u n t er = 0 for t a r g e t in s e l f. graph. i t e r a d j a c e n t ( node ) : i f t a r g e t in s e l f. c l i q u e : c o u n ter += 1 i f c o u n ter == l e n ( s e l f. c l i q u e ) : s e l f. c l i q u e. add ( node ) s e l f. c a r d i n a l i t y = l e n ( s e l f. c l i q u e ) 19 23:
24 4.9. Wyznaczanie maksymalnej kliki przez zbiór niezale»ny Dane wej±ciowe: Graf prosty nieskierowany G, wierzchoªek grafu v. Problem: Wyznaczenie maksymalnej kliki zawieraj cej wierzchoªek v przez znalezienie najwi kszego zbioru niezale»nego w dopeªnieniu grafu. Opis algorytmu: Algorytm rozpoczynamy od wyznaczenia grafu Ḡ, czyli dopeªnienia grafu G. Nast pnie w grae Ḡ wyznaczamy najwi kszy zbiór niezale»ny zawieraj cy wierzchoªek v. Zªo»ono± : Zªo»ono± czasowa etapu wyznaczania dopeªnienia grafu zajmuje czas O(V 2 ). Czas wyznaczania najwi kszego zbioru niezale»nego zale»y od u»ytego algorytmu, a w najprostszym przypadku jest liniowy O(V + E). Uwagi: W algorytmie mo»na wykorzysta ró»ne algorytmy wyznaczania najwi kszego zbioru niezale»nego. Dost pne s cztery moduªy: isetus (ang. unordered sequential independent set ), isetrs (ang. random sequential independent set), isetsf (ang. smallest rst independent set ), isetll (ang. largest last independent set). Rozwi zanie mo»e nie by najwi ksz klik z wierzchoªkiem v. #! / usr / bin / python Listing 4.9. Moduª isetclique. from i s e t u s import UnorderedSequentialIndependentSet #as IndependentSet from i s e t r s import RandomSequentialIndependentSet #as IndependentSet from i s e t s f import S m a l l e s t F i r s t I n d e p e n d e n t S e t #as IndependentSet from i s e t l l import L a r g e s t L a s t I n d e p e n d e n t S e t #as IndependentSet c l a s s MaximalCliqueFromIndependentSet : """ Finding a maximal c l i q u e using the complement o f a graph. """ def init ( s e l f, graph ) : """The a l g o r i t h m i n i t i a l i z a t i o n. """ i f graph. i s _ d i r e c t e d ( ) : raise ValueError ( " the graph i s d i r e c t e d " ) s e l f. graph = graph s e l f. c l i q u e = s e t ( ) s e l f. s o u r c e = None s e l f. c a r d i n a l i t y = 0 def run ( s e l f, s o u r c e=none, ind_set_method= ' UnorderedSequentialIndependentSet ' ) : """ E x e c u t a b l e pseudocode. """ i f s o u r c e i s None : # g e t f i r s t random node s o u r c e = s e l f. graph. i t e r n o d e s ( ). next ( ) s e l f. s o u r c e = s o u r c e new_graph = s e l f. graph. complement ( ) i f ind_set_method == ' UnorderedSequentialIndependentSet ' : 20 24:
25 a l g o r i t h m = UnorderedSequentialIndependentSet ( new_graph ) e l i f ind_set_method == ' RandomSequentialIndependentSet ' : a l g o r i t h m = RandomSequentialIndependentSet ( new_graph ) e l i f ind_set_method == ' S m a l l e s t F i r s t I n d e p e n d e n t S e t ' : a l g o r i t h m = S m a l l e s t F i r s t I n d e p e n d e n t S e t ( new_graph ) e l i f ind_set_method == ' L a r g e s t L a s t I n d e p e n d e n t S e t ' : a l g o r i t h m = L a r g e s t L a s t I n d e p e n d e n t S e t ( new_graph ) a l g o r i t h m. run ( s o u r c e ) s e l f. c l i q u e = a l g o r i t h m. independent_set s e l f. c a r d i n a l i t y = l e n ( s e l f. c l i q u e ) Algorytm Boppany i Halldorssona W bibliotece NetworkX mo»na znale¹ implementacj algorytmu wyznaczania kliki maksymalnej [funkcja max_clique(g)] na bazie artykuªu Boppany i Haldorssóna [20]. Algorytm wyznacza najwi kszy zbiór niezale»ny w dopeªnieniu grafu, przy czym korzysta si z wyników teorii Ramseya. Udaªo si przeªo»y kod algorytmu do naszej biblioteki. Wymagaªo to rozszerzenia interfejsu grafów o metod subgraph(), która zwraca podgraf indukowany z danego grafu na bazie dostarczonej kolekcji wierzchoªków. Wst pne testy pokazaªy dªu»sze czasy wyznaczania kliki maksymalnej, ale cz sto byªa to klika wi ksza ni» te wyznaczone innymi metodami. Nie ma tu tylko mo»liwo±ci zagwarantowania,»e dany wierzchoªek b dzie nale»aª do wyznaczonej kliki. #! / usr / bin / python Listing Moduª isetramsey. class MaximalCliqueRamsey : """ Finding a maximal c l i q u e using Ramsey t h e o r y. """ # Bazuje na k o d z i e z NetworkX, wykorzystane f u n k c j e to : # max_clique (G), clique_removal (G), ramsey_r2(g). def init ( s e l f, graph ) : """The a l g o r i t h m i n i t i a l i z a t i o n. """ i f graph. i s _ d i r e c t e d ( ) : raise ValueError ( " the graph i s d i r e c t e d " ) s e l f. graph = graph s e l f. c l i q u e = s e t ( ) s e l f. s o u r c e = None s e l f. c a r d i n a l i t y = 0 def run ( s e l f, s o u r c e=none ) : """ E x e c u t a b l e pseudocode. """ i f s o u r c e i s None : # g e t f i r s t random node s o u r c e = s e l f. graph. i t e r n o d e s ( ). next ( ) s e l f. s o u r c e = s o u r c e new_graph = s e l f. graph. complement ( ) s e l f. c l i q u e, _ = s e l f. clique_removal ( new_graph ) s e l f. c a r d i n a l i t y = l e n ( s e l f. c l i q u e ) def clique_removal ( s e l f, graph ) : 21 25:
26 """ Repeatedly remove c l i q u e s from the graph. """ graph_copy = graph. copy ( ) c l i q u e _ i, i s e t _ i = s e l f. ramsey ( graph_copy ) c l i q u e s = [ c l i q u e _ i ] # maximal c l i q u e s found i s e t s = [ i s e t _ i ] while graph_copy. v ( ) > 0 : for node in c l i q u e _ i : graph_copy. del_node ( node ) c l i q u e _ i, i s e t _ i = s e l f. ramsey ( graph_copy ) i f c l i q u e _ i : c l i q u e s. append ( c l i q u e _ i ) i f i s e t _ i : i s e t s. append ( i s e t _ i ) max_iset = max( i s e t s, key=l e n ) return max_iset, c l i q u e s def ramsey ( s e l f, graph ) : """ Approximately computes t he Ramsey number R( 2 ; s, t ). """ i f graph. v ( ) == 0 : return s e t ( [ ] ), s e t ( [ ] ) p i v o t = graph. i t e r n o d e s ( ). next ( ) n e i g h b o r s = s e t ( graph. i t e r a d j a c e n t ( p i v o t ) ) nonneighbors = s e t ( node for node in graph. i t e r n o d e s ( ) i f node not in n e i g h b o r s and node!= p i v o t ) clique_1, i s e t _ 1 = s e l f. ramsey ( graph. subgraph ( n e i g h b o r s ) ) clique_2, i s e t _ 2 = s e l f. ramsey ( graph. subgraph ( nonneighbors ) ) clique_1. add ( p i v o t ) i s e t _ 2. add ( p i v o t ) return (max ( [ clique_1, clique_2 ], key=l e n ), max ( [ iset_1, i s e t _ 2 ], key=l e n ) ) Wyznaczanie wspóªczynnika klastrowania Wiele ukªadów ma naturaln interpretacj jako sieci zªo»one (ang. complex networks). Mog to by sieci znajomych na Facebooku, poª czenia mi dzy stronami WWW, oddziaªywania biaªek w ukªadach biologicznych. Istnieje wiele modeli sieci zªo»onych. Najprostsze modele to sieci przypadkowe (ang. random networks), w których lokalnie sie jest drzewiasta (bez p tli). Jednak prawdziwe sieci cz sto maj pewne podstruktury, których nie mo»na zignorowa, np. grupy przyjacióª znaj cych si wzajemnie. St d powstaªy modele sieci oparte na klikach/klastrach (ang. clustered networks), wykorzystywane do symulacji epidemii [21]. Ilo±ciowo klastrowanie w sieci opisuje wspóªczynnik klastrowania (ang. clustering coecient ), zdeniowany jako C = 3 N N 3, (4.1) gdzie N jest liczb wszystkich trójk tów w sieci, a N 3 liczb poª czonych trójek wierzchoªków (poª czona trójka to wierzchoªek poª czony bezpo±rednio z nieuporz dkowan par wierzchoªków). Je»eli C = 0, to sie lokalnie 22 26:
27 jest drzewiasta (nie ma cykli dªugo±ci 3). Przykªadowo dla grafu koªa mamy C (W 4 ) = C (K 4 ) = 1, a dla n > 4 dostajemy C (W n ) = 3(n 1) 3(n 1) + (n 1)(n 2)/2 = 6 n + 4. (4.2) Warto zauwa»y,»e dla grafów r-regularnych zachodzi N 3 = nr(r 1)/2. Listing przedstawia funkcj obliczaj c wspóªczynnik klastrowania. Wyznaczenie liczby wszystkich trójk tów zajmuje czas O(n 3 ), wyznaczenie liczby poª czonych trójek zajmuje czas O(n), dlatego ª czny czas szacujemy na O(n 3 ). Listing Wyznaczanie wspóªczynnika klastrowania. def c l u s t e r i n g _ c o e f f i c i e n t ( graph, f r a c t i o n _ f o r m a t=true ) : """ Wyznaczanie wspolczynnika k l a s t r o w a n i a. """ n_t = sum(1 for t r i a n g l e in i t e r _ k _ c l i q u e s ( graph, 3 ) ) n_3 = sum( graph. d e g r e e ( node ) ( graph. d e g r e e ( node ) 1) / 2 for node in graph. i t e r n o d e s ( ) ) i f f r a c t i o n _ f o r m a t : return F r a c t i o n (3 n_t, n_3) else : return f l o a t (3 n_t ) / f l o a t (n_3) Druga wersja wspóªczynnika klastowania wykorzystuje algorytm wyznaczania liczby trójk tów w grae oparty na wªasno±ciach macierzy s siedztwa. Listing Wyznaczanie wspóªczynnika klastrowania z macierzy s siedztwa. from t r i a n g l e s import T r i a n g l e M a t r i x def c l u s t e r i n g _ c o e f f i c i e n t ( graph, f r a c t i o n _ f o r m a t=true ) : """ Wyznaczanie wspolczynnika k l a s t r o w a n i a z macierzy s a s i e d z t w a. """ a l g o r i t h m = T r i a n g l e M a t r i x ( graph ) a l g o r i t h m. run ( ) n_t = a l g o r i t h m. f i n d _ a l l _ t r i a n g l e s ( ) n_3 = sum( graph. d e g r e e ( node ) ( graph. d e g r e e ( node ) 1) / 2 for node in graph. i t e r n o d e s ( ) ) i f f r a c t i o n _ f o r m a t : return F r a c t i o n (3 n_t, n_3) else : return f l o a t (3 n_t ) / f l o a t (n_3) Klasyczny algorytm Brona-Kerboscha Algorytm Brona-Kerboscha pozwala znale¹ wszystkie kliki maksymalne w grae nieskierowanym [17]. Algorytm zostaª opublikowany przez Brona i Kerboscha w roku 1973 [22]. Pó¹niej powstaªo wiele ulepsze«podstawowego algorytmu [23]. Algorytm rekurencyjny Brona-Kerboscha wykorzystuje trzy zbiory wierzchoªków: zbiór R wierzchoªków stanowi cych cz ±ciowe rozwi zanie (klik ), zbiór P kandydatów do rozwa»enia, zbiór X wierzchoªków pomini tych. Zbiór 23 27:
28 X zawiera wierzchoªki, które byªy wcze±niej w P, a przez to kliki maksymalne zawieraj ce te wierzchoªki byªy ju» raportowane. Tak wi c celem przechowywania zbioru X jest unikni cie ponownego raportowania klik. Dane wej±ciowe: Graf prosty nieskierowany. Problem: Wyznaczenie wszystkich klik maksymalnych w grae. Opis algorytmu: Przy pierwszym wywoªaniu algorytm jest uruchamiany z pustymi zbiorami R i X, a zbiór P zawiera wszystkie wierzchoªki grafu. W algorytmie na pocz tku sprawdza si, czy zbiory P i X s puste. Je»eli tak jest, to R jest klik maksymaln. W przeciwnym razie ze zbioru P wybierane s kolejne wierzchoªki v, a algorytm jest uruchamiany rekurencyjnie dla nowych argumentów R, P, X. Oznaczmy przez N(v) zbiór wszystkich s siadów wierzchoªka v. Wtedy R to zbiór R z dodanym wierzchoªkiem v, P = P N(v), X = X N(v). Po wyj±ciu z rekurencyjnego wywoªania algorytmu z argumentami R, P, X, wierzchoªek v jest usuwany z P (lepiej jest to zrobi przed wyznaczeniem zbioru P ), nast pnie dodawany do X, a p tla po wierzchoªkach jest kontynuowana. Zªo»ono± : Zªo»ono± czasowa algorytmu Brona-Kerboscha jest szacowana na O(3 n/3 ) [23] i nie jest liniowa w liczbie generowanych klik. #! / usr / bin / python Listing Moduª bronkerbosch. class ClassicBronKerbosch : """ Finding a l l maximal c l i q u e s using the Bron Kerbosch a l g o r i t h m. """ def init ( s e l f, graph ) : """The a l g o r i t h m i n i t i a l i z a t i o n. """ i f graph. i s _ d i r e c t e d ( ) : raise ValueError ( " the graph i s d i r e c t e d " ) s e l f. graph = graph s e l f. c l i q u e s = l i s t ( ) def run ( s e l f ) : """ E x e c u t a b l e pseudocode. """ R = s e t ( ) P = s e t ( s e l f. graph. i t e r n o d e s ( ) ) X = s e t ( ) s e l f. f i n d _ c l i q u e s (R, P, X) def f i n d _ c l i q u e s ( s e l f, R, P, X) : """The b a s i c form o f the Bron Kerbosch a l g o r i t h m. """ i f l e n (P) == 0 and l e n (X) == 0 : s e l f. c l i q u e s. append (R) e l i f l e n (P) == 0 : return else : for node in s e l f. graph. i t e r n o d e s ( ) : i f node in P : n e i g h b o r s = s e t ( s e l f. graph. i t e r a d j a c e n t ( node ) ) 24 28:
29 P. remove ( node ) # b e f o r e new_p and new_x new_r = R. union ( [ node ] ) new_p = P. i n t e r s e c t i o n ( n e i g h b o r s ) new_x = X. i n t e r s e c t i o n ( n e i g h b o r s ) s e l f. f i n d _ c l i q u e s (new_r, new_p, new_x) X. add ( node ) Algorytm Brona-Kerboscha z przypadkowym punktem podziaªu Algorytm Brona-Kerboscha doczekaª si kilku ulepsze«, które opieraªy si na obserwacjach zachowania tego algorytmu dla ró»nych grafów [24], [25], [26], [27]. Klasyczny algorytm jest niewydajny w sytuacji, kiedy graf zawiera du»o klik niemaksymalnych. Mo»na oszcz dzi czas i pozwoli algorytmowi szybciej przetwarza gaª zie drzewa poszukiwa«, kiedy wprowadzi si wierzchoªek podziaªu (ang. pivot vertex ) wybrany z P lub X. Chodzi o to,»e dla ka»dego wierzchoªka v, na danym poziomie rekurencji albo wierzchoªek v, albo inny wierzchoªek nie b d cy s siadem znajdzie si w raportowanej klice, ale nigdy oba naraz. Wybór wierzchoªka podziaªu ze zbioru P X zapobiega niekorzystnym sytuacjom, np. kiedy graf ma posta sumy grafu peªnego i grafu gwiazdy K 1,s K s [27]. Mo»liwe s ró»ne strategie wyboru wierzchoªka podziaªu. Najprostszy jest losowy wybór wierzchoªka ze zbioru P X. #! / usr / bin / python Listing Moduª bronkerboschrp. import random from edges import Edge c l a s s RandomPivotBronKerbosch : """Bron Kerbosch a l g o r i t h m with a random p i v o t. """ def init ( s e l f, graph ) : """The a l g o r i t h m i n i t i a l i z a t i o n. """ i f graph. i s _ d i r e c t e d ( ) : raise ValueError ( " the graph i s d i r e c t e d " ) s e l f. graph = graph s e l f. c l i q u e s = l i s t ( ) def run ( s e l f ) : """ E x e c u t a b l e pseudocode. """ R = s e t ( ) P = s e t ( s e l f. graph. i t e r n o d e s ( ) ) X = s e t ( ) s e l f. f i n d _ c l i q u e s (R, P, X) def f i n d _ p i v o t ( s e l f, P, X) : """ Find a random p i v o t. """ return random. c h o i c e ( l i s t (P. union (X) ) ) def f i n d _ c l i q u e s ( s e l f, R, P, X) : 25 29:
30 """The Bron Kerbosch a l g o r i t h m with p i v o t i n g. """ i f l e n (P) == 0 and l e n (X) == 0 : s e l f. c l i q u e s. append (R) e l i f l e n (P) == 0 : return else : p i v o t = s e l f. f i n d _ p i v o t (P, X) for node in s e l f. graph. i t e r n o d e s ( ) : i f ( ( node in P) and not s e l f. graph. has_edge ( Edge ( node, p i v o t ) ) ) : n e i g h b o r s = s e t ( s e l f. graph. i t e r a d j a c e n t ( node ) ) P. remove ( node ) new_r = R. union ( [ node ] ) new_p = P. i n t e r s e c t i o n ( n e i g h b o r s ) new_x = X. i n t e r s e c t i o n ( n e i g h b o r s ) s e l f. f i n d _ c l i q u e s (new_r, new_p, new_x) X. add ( node ) Algorytm Brona-Kerboscha z punktem podziaªu o najwi kszym stopniu Testy komputerowe pokazuj,»e du»e przyspieszenie dziaªania algorytmu Brona-Kerboscha mo»na osi gn wtedy, gdy za wierzchoªek podziaªu przyjmnie si wierzchoªek ze zbioru P X o najwi kszej liczbie s siadów w zbiorze P [27]. #! / usr / bin / python Listing Moduª bronkerboschdp. import random from edges import Edge c l a s s DegreePivotBronKerbosch : """Bron Kerbosch a l g o r i t h m with a p i v o t with l a r g e s t degree in P. """ def init ( s e l f, graph ) : """The a l g o r i t h m i n i t i a l i z a t i o n. """ i f graph. i s _ d i r e c t e d ( ) : raise ValueError ( " the graph i s d i r e c t e d " ) s e l f. graph = graph s e l f. c l i q u e s = l i s t ( ) def run ( s e l f ) : """ E x e c u t a b l e pseudocode. """ R = s e t ( ) P = s e t ( s e l f. graph. i t e r n o d e s ( ) ) X = s e t ( ) s e l f. f i n d _ c l i q u e s (R, P, X) def f i n d _ p i v o t ( s e l f, P, X) : """ Find a p i v o t with l a r g e s t degree in P. """ d egree_dict = d i c t ( ) nodes = P. union (X) for node in nodes : 26 30:
31 n e i g h b o r s = s e t ( s e l f. graph. i t e r a d j a c e n t ( node ) ) d egree_dict [ node ] = l e n (P. i n t e r s e c t i o n ( n e i g h b o r s ) ) return max( nodes, key=d egree_dict. getitem ) def f i n d _ c l i q u e s ( s e l f, R, P, X) : """The Bron Kerbosch a l g o r i t h m with p i v o t i n g. """ i f l e n (P) == 0 and l e n (X) == 0 : s e l f. c l i q u e s. append (R) e l i f l e n (P) == 0 : return else : p i v o t = s e l f. f i n d _ p i v o t (P, X) for node in s e l f. graph. i t e r n o d e s ( ) : i f ( ( node in P) and not s e l f. graph. has_edge ( Edge ( node, p i v o t ) ) ) : n e i g h b o r s = s e t ( s e l f. graph. i t e r a d j a c e n t ( node ) ) P. remove ( node ) new_r = R. union ( [ node ] ) new_p = P. i n t e r s e c t i o n ( n e i g h b o r s ) new_x = X. i n t e r s e c t i o n ( n e i g h b o r s ) s e l f. f i n d _ c l i q u e s (new_r, new_p, new_x) X. add ( node ) Algorytm Brona-Kerboscha z uporz dkowaniem degeneracji Innym sposobem poprawienia klasycznego algorytmu Brona-Kerboscha jest wybranie szczególnego uporz dkowania wierzchoªków grafu na najwy»- szym poziomie rekurencji [23]. Chodzi o minimalizacj rozmiaru zbioru P na kolejnych poziomach rekurencji. Dla grafu G deniuje si degeneracj d (ang. degeneracy), czyli najmniejsz liczb d tak,»e ka»dy podgraf grafu G ma wierzchoªek stopnia d lub mniejszego. Ka»dy graf ma uporz dkowanie degeneracji (ang. degeneracy ordering), czyli uporz dkowanie wierzchoªków w którym ka»dy wierzchoªek ma d lub mniej s siadów przychodz cych pó¹niej w tym uporz dkowaniu [28]. Przykªady: las ma degeneracj jeden, graf planarny degeneracj pi lub mniej, sie Apoloniusza degeneracj trzy. Graf r-regularny ma degeneracj r. Je»eli w p tli algorytmu Brona-Kerboscha zostanie wykorzystane uporz dkowanie degeneracji, to rozmiar zbioru P w ka»dym wywoªaniu b dzie co najwy»ej d. Istotne jest przy tym posiadanie szybkiego algorytmu wyznaczania uporz dkowania degeneracji, najlepiej w czasie liniowym. Czasem uporz dkowanie degeneracji stosuje si na pierwszym poziomie rekurencji, a gª biej jest wariant z wierzchoªkiem podziaªu. #! / usr / bin / python Listing Moduª bronkerboschdeg. c l a s s DegeneracyBronKerbosch : """Bron Kerbosch a l g o r i t h m with a degeneracy o r d e r i n g. """ def init ( s e l f, graph ) : 27 31:
32 """The a l g o r i t h m i n i t i a l i z a t i o n. """ i f graph. i s _ d i r e c t e d ( ) : raise ValueError ( " the graph i s d i r e c t e d " ) s e l f. graph = graph s e l f. c l i q u e s = l i s t ( ) s e l f. o r d e r = None def run ( s e l f ) : """ E x e c u t a b l e pseudocode. """ s e l f. find_degeneracy_ordering ( ) R = s e t ( ) P = s e t ( s e l f. graph. i t e r n o d e s ( ) ) X = s e t ( ) s e l f. f i n d _ c l i q u e s (R, P, X) def find_degeneracy_ordering ( s e l f ) : """ Find a degeneracy o r d e r i n g in O(V 2) time. """ d egree_dict = d i c t ( ( node, s e l f. graph. d e g r e e ( node ) ) for node in s e l f. graph. i t e r n o d e s ( ) ) # O(V) time s e l f. o r d e r = l i s t ( ) nodes = s e t ( s e l f. graph. i t e r n o d e s ( ) ) for s t e p in xrange ( s e l f. graph. v ( ) ) : s o u r c e = min ( nodes, key=d egree_dict. getitem ) nodes. remove ( s o u r c e ) s e l f. o r d e r. append ( s o u r c e ) for t a r g e t in s e l f. graph. i t e r a d j a c e n t ( s o u r c e ) : d egree_dict [ t a r g e t ] = 1 def f i n d _ c l i q u e s ( s e l f, R, P, X) : """The Bron Kerbosch a l g o r i t h m with a degeneracy o r d e r i n g. """ i f l e n (P) == 0 and l e n (X) == 0 : s e l f. c l i q u e s. append (R) e l i f l e n (P) == 0 : return else : for node in s e l f. o r d e r : i f node in P : n e i g h b o r s = s e t ( s e l f. graph. i t e r a d j a c e n t ( node ) ) P. remove ( node ) new_r = R. union ( [ node ] ) new_p = P. i n t e r s e c t i o n ( n e i g h b o r s ) new_x = X. i n t e r s e c t i o n ( n e i g h b o r s ) s e l f. f i n d _ c l i q u e s (new_r, new_p, new_x) X. add ( node ) Algorytm Tsukiyamy Maksymalne kliki grafu G odpowiadaj maksymalnym zbiorom niezale»- nym w dopeªnieniu grafu. Wykorzystuje to algorytm Tsukiyamy [29]. To podej±cie cechuje wra»liwo± na wyj±cie (ang. output sensitivity), czyli zale»no± czasu dziaªania od wyników pracy algorytmu (tu zale»no± czasu od liczby klik maksymalnych zawartych w grae) [27]. [To podej±cie jest w pakiecie igraph.] Podobne podej±cie zaprezentowano w pracy [30], gdzie korzystano 32:
33 z dziaªa«na macierzach n n. Rozwa»ano równie» kliki maksymalne dwudzielne, które s grafami peªnymi dwudzielnymi :
34 5. Podsumowanie W ramach pracy przygotowano implementacje wielu algorytmów wykorzystywanych do rozwi zywania problemu kliki, a tak»e stworzono szereg narz dzi pomocniczych. Wszystkie klasy i funkcje maj kod testuj cy na bazie moduªu unittest. Dla potrzeb testowania kodu stworzono generatory sieci kwadratowej, sieci trójk tnej, grafu drabina, wszystkie bez periodycznych warunków brzegowych. W pracy przygotowano dwie wersje funkcji obliczaj cych wspóªczynnik klastrowania sieci. Pierwsza wersja generuje odpowiednie kliki trzyelementowe, a druga wersja bazuje na wªasno±ciach macierzy s siedztwa. Drug wersj mo»na prawdopodobnie przyspieszy u»ywaj c specjalizowanych bibliotek numerycznych do mno»enia macierzy, np. z pakietu NumPy. W pracy rozszerzono interfejs grafów przez dodanie metody complement(), która zwraca dopeªnienie danego grafu. Metod wykorzystano do wyznaczania maksymalnej kliki w grae metod znajdowania najwi kszego zbioru niezale»nego w dopeªnieniu grafu. Przy okazji poprawiono algorytmy wyznaczania zbioru niezale»nego przez dodanie mo»liwo±ci wskazania pierwszego wierzchoªka, który ma nale»e do zbioru niezale»nego. Powstaªo te» kilka nowych wersji algorytmów zbiorów niezale»ych. Na bazie kodu z biblioteki NetworkX powstaªa implementacja algorytmu wyznaczania kliki maksymalnej, korzystaj ca z teorii Ramseya. Tutaj przydatne okazaªo si rozszerzenie interfejsu grafów o metod subgraph(nodes), która zwraca podgraf indukowany przez podany zestaw wierzchoªków. W pracy zaimplementowano i zbadano cztery wersje algorytmu Brona-Kerboscha, który znajduje wszystkie kliki maksymalne w grae nieskierowanym. Najbardziej uniwersalna okazaªa si wersja z punktem podziaªu o najwi kszym stopniu :
Teoria grafów i sieci 1 / 58
Teoria grafów i sieci 1 / 58 Literatura 1 B.Korte, J.Vygen, Combinatorial optimization 2 D.Jungnickel, Graphs, Networks and Algorithms 3 M.Sysªo, N.Deo Metody optymalizacji dyskretnej z przykªadami w Turbo
Teoria grafów i jej zastosowania. 1 / 126
Teoria grafów i jej zastosowania. 1 / 126 Mosty królewieckie W Królewcu, na rzece Pregole znajduj si dwie wyspy poª czone ze sob, a tak»e z brzegami za pomoc siedmiu mostów, tak jak pokazuje rysunek 2
Lab. 02: Algorytm Schrage
Lab. 02: Algorytm Schrage Andrzej Gnatowski 5 kwietnia 2015 1 Opis zadania Celem zadania laboratoryjnego jest zapoznanie si z jednym z przybli»onych algorytmów sªu» cych do szukania rozwi za«znanego z
c Marcin Sydow Spójno± Grafy i Zastosowania Grafy Eulerowskie 2: Drogi i Cykle Grafy Hamiltonowskie Podsumowanie
2: Drogi i Cykle Spis Zagadnie«drogi i cykle spójno± w tym sªaba i silna k-spójno± (wierzchoªkowa i kraw dziowa) dekompozycja grafu na bloki odlegªo±ci w grae i poj cia pochodne grafy Eulera i Hamiltona
Minimalne drzewa rozpinaj ce
y i y i drzewa Spis zagadnie«y i drzewa i lasy cykle fundamentalne i rozci cia fundamentalne wªasno±ci cykli i rozci minimalne drzewa algorytm algorytm Drzewo y i spójnego, nieskierowanego grafu prostego
c Marcin Sydow Przepªywy Grafy i Zastosowania Podsumowanie 12: Przepªywy w sieciach
12: w sieciach Spis zagadnie«sieci przepªywowe przepªywy w sieciach ±cie»ka powi kszaj ca tw. Forda-Fulkersona Znajdowanie maksymalnego przepªywu Zastosowania przepªywów Sieci przepªywowe Sie przepªywowa
Zad. 1 Zad. 2 Zad. 3 Zad. 4 Zad. 5 SUMA. W obu podpunktach zakªadamy,»e kolejno± ta«ców jest wa»na.
Zad. 1 Zad. 2 Zad. 3 Zad. 4 Zad. 5 SUMA Zadanko 1 (12p.) Na imprezie w Noc Kupaªy s 44 dziewczyny. Nosz one 11 ró»nych imion, a dla ka»dego imienia s dokªadnie 4 dziewczyny o tym imieniu przy czym ka»da
Kolorowanie grafów z j zykiem Python
Uniwersytet Jagiello«ski w Krakowie Wydziaª Fizyki, Astronomii i Informatyki Stosowanej Igor Samson Nr albumu: 1063308 Kolorowanie grafów z j zykiem Python Praca magisterska na kierunku Informatyka Praca
Zadania z kolokwiów ze Wst pu do Informatyki. Semestr II.
Zadania z kolokwiów ze Wst pu do Informatyki. Semestr II. Poni»sze zadania s wyborem zada«z kolokwiów ze Wst pu do Informatyki jakie przeprowadziªem w ci gu ostatnich lat. Marek Zawadowski Zadanie 1 Napisz
Badanie grafów ci ciwowych w j zyku Python
Uniwersytet Jagiello«ski w Krakowie Wydziaª Fizyki, Astronomii i Informatyki Stosowanej Maªgorzata Olak Nr albumu: 1087242 Badanie grafów ci ciwowych w j zyku Python Praca magisterska na kierunku Informatyka
c Marcin Sydow Wst p Grafy i Zastosowania Wierzchoªki 8: Kolorowanie Grafów Mapy Kraw dzie Zliczanie Podsumowanie
8: Kolorowanie Grafów Spis zagadnie«kolorowanie wierzchoªków Kolorowanie map Kolorowanie kraw dzi Wielomian chromatyczny Zastosowania Problem kolorowania grafów ma wiele odmian (np. kolorowanie wierzchoªków,
Algorytmy grafowe 2. Andrzej Jastrz bski. Akademia ETI. Politechnika Gda«ska Algorytmy grafowe 2
Algorytmy grafowe 2 Andrzej Jastrz bski Akademia ETI Minimalne drzewo spinaj ce Drzewem nazywamy spójny graf nie posiadaj cy cyklu. Liczba wierzchoªków drzewa jest o jeden wi ksza od liczby jego kraw dzi.
Grafy i Zastosowania. 1: Wprowadzenie i poj cia podstawowe. c Marcin Sydow. Wprowadzenie. Podstawowe poj cia. Operacje na grafach.
1: i podstawowe Spis Zagadnie«zastosowania grafów denicja grafu (i skierowanego), prostego, multigrafu s siedztwo i incydencja izomorzm grafów stopnie wierzchoªków (w tym wej±ciowy i wyj±ciowy), lemat
Badanie grafów szeregowo-równolegªych z j zykiem Python
Uniwersytet Jagiello«ski w Krakowie Wydziaª Fizyki, Astronomii i Informatyki Stosowanej Konrad Gaªuszka Nr albumu: 1077347 Badanie grafów szeregowo-równolegªych z j zykiem Python Praca magisterska na kierunku
10a: Wprowadzenie do grafów
10a: Wprowadzenie do grafów Spis zagadnie«zastosowania grafów denicja grafu (i skierowanego), prostego, multigrafu drogi i cykle, spójno± w tym sªaba i silna drzewo i las: denicja, charakteryzacje, wªasno±ci
Grafy. Andrzej Jastrz bski. Akademia ET I. Politechnika Gda«ska
Andrzej Jastrz bski Akademia ET I Graf Grafem nazywamy par G = (V, E), gdzie V to zbiór wierzchoªków, E zbiór kraw dzi taki,»e E {{u, v} : u, v V u v}. Wierzchoªki v, u V s s siaduj ce je±li s poª czone
Wektory w przestrzeni
Wektory w przestrzeni Informacje pomocnicze Denicja 1. Wektorem nazywamy uporz dkowan par punktów. Pierwszy z tych punktów nazywamy pocz tkiem wektora albo punktem zaczepienia wektora, a drugi - ko«cem
Wykªad 1. Wprowadzenie do teorii grafów
Wykªad 1. Wprowadzenie do teorii grafów 1 / 112 Literatura 1 W. Lipski; Kombinatoryka dla programistów. 2 T. Cormen, Ch. E. Leiserson, R. L. Rivest; Wprowadzenie do algorytmów. 3 K. A. Ross, Ch. R. B.
Skojarzenia w teorii grafów
Uniwersytet Jagiello«ski w Krakowie Wydziaª Fizyki, Astronomii i Informatyki Stosowanej Krzysztof Niedzielski Nr albumu: 1089346 Skojarzenia w teorii grafów Praca magisterska na kierunku Informatyka Praca
Podstawowepojęciateorii grafów
7 Podstawowepojęciateorii grafów Wiele sytuacji z»ycia codziennego mo»e by w wygodny sposób opisanych gracznie za pomoc rysunków skªadaj cych si ze zbioru punktów i linii ª cz cych pewne pary tych punktów.
c Marcin Sydow Planarno± Grafy i Zastosowania Tw. Eulera 7: Planarno± Inne powierzchnie Dualno± Podsumowanie
7: Spis zagadnie«twierdzenie Kuratowskiego Wªasno±ci planarno±ci Twierdzenie Eulera Grafy na innych powierzchniach Poj cie dualno±ci geometrycznej i abstrakcyjnej Graf Planarny Graf planarny to taki graf,
Relacj binarn okre±lon w zbiorze X nazywamy podzbiór ϱ X X.
Relacje 1 Relacj n-argumentow nazywamy podzbiór ϱ X 1 X 2... X n. Je±li ϱ X Y jest relacj dwuargumentow (binarn ), to zamiast (x, y) ϱ piszemy xϱy. Relacj binarn okre±lon w zbiorze X nazywamy podzbiór
Mosty królewieckie, chi«ski listonosz i... kojarzenie maª»e«stw
Mosty królewieckie, chi«ski listonosz i... kojarzenie maª»e«stw 3 kwietnia 2014 roku 1 / 106 Mosty królewieckie W Królewcu, na rzece Pregole znajduj si dwie wyspy poª czone ze sob, a tak»e z brzegami za
Problemy optymalizacyjne - zastosowania
Problemy optymalizacyjne - zastosowania www.qed.pl/ai/nai2003 PLAN WYKŁADU Zło ono obliczeniowa - przypomnienie Problemy NP-zupełne klika jest NP-trudna inne problemy NP-trudne Inne zadania optymalizacyjne
Wykªad 4. Funkcje wielu zmiennych.
Wykªad jest prowadzony w oparciu o podr cznik Analiza matematyczna 2. Denicje, twierdzenia, wzory M. Gewerta i Z. Skoczylasa. Wykªad 4. Funkcje wielu zmiennych. Zbiory na pªaszczy¹nie i w przestrzeni.
Metodydowodzenia twierdzeń
1 Metodydowodzenia twierdzeń Przez zdanie rozumiemy dowolne stwierdzenie, które jest albo prawdziwe, albo faªszywe (nie mo»e by ono jednocze±nie prawdziwe i faªszywe). Tradycyjnie b dziemy u»ywali maªych
Listy i operacje pytania
Listy i operacje pytania Iwona Polak iwona.polak@us.edu.pl Uniwersytet l ski Instytut Informatyki pa¹dziernika 07 Który atrybut NIE wyst puje jako atrybut elementów listy? klucz elementu (key) wska¹nik
i, lub, nie Cegieªki buduj ce wspóªczesne procesory. Piotr Fulma«ski 5 kwietnia 2017
i, lub, nie Cegieªki buduj ce wspóªczesne procesory. Piotr Fulma«ski Uniwersytet Šódzki, Wydziaª Matematyki i Informatyki UŠ piotr@fulmanski.pl http://fulmanski.pl/zajecia/prezentacje/festiwalnauki2017/festiwal_wmii_2017_
Wykªad 4. Droga i cykl Eulera i Hamiltona
Wykªad 4. Droga i cykl Eulera i Hamiltona 1 / 92 Grafy Eulera Droga i cykl Eulera Niech G b dzie grafem spójnym. Denicja Je»eli w grae G istnieje zamkni ta droga prosta zawieraj ca wszystkie kraw dzie
JAO - J zyki, Automaty i Obliczenia - Wykªad 1. JAO - J zyki, Automaty i Obliczenia - Wykªad 1
J zyki formalne i operacje na j zykach J zyki formalne s abstrakcyjnie zbiorami sªów nad alfabetem sko«czonym Σ. J zyk formalny L to opis pewnego problemu decyzyjnego: sªowa to kody instancji (wej±cia)
Grafy i Zastosowania. 11: Twierdzenia Minimaksowe. c Marcin Sydow. Wst p: Tw. Halla. Dualno± Zbiory niezale»ne. Skojarzenia c.d.
11: Twierdzenia Minimaksowe Spis zagadnie«wst p: Kojarzenie Maª»e«stw i i twierdzenia minimaksowe i pokrycia (Tw. Gallai) w grafach (tw. Berge'a) w grafach dwudzielnych (tw. Königa, ) Pokrycia macierzy
Drzewa Gomory-Hu Wprowadzenie. Drzewa Gomory-Hu. Jakub Š cki. 14 pa¹dziernika 2009
Wprowadzenie Drzewa Gomory-Hu Jakub Š cki 14 pa¹dziernika 2009 Wprowadzenie 1 Wprowadzenie Podstawowe poj cia i fakty 2 Istnienie drzew Gomory-Hu 3 Algorytm budowy drzew 4 Problemy otwarte Wprowadzenie
Arkusz maturalny. Šukasz Dawidowski. 25 kwietnia 2016r. Powtórki maturalne
Arkusz maturalny Šukasz Dawidowski Powtórki maturalne 25 kwietnia 2016r. Odwrotno±ci liczby rzeczywistej 1. 9 8 2. 0, (1) 3. 8 9 4. 0, (8) 3 4 4 4 1 jest liczba Odwrotno±ci liczby rzeczywistej 3 4 4 4
Implementacja wybranych algorytmów dla multigrafów w j zyku Python
Uniwersytet Jagiello«ski w Krakowie Wydziaª Fizyki, Astronomii i Informatyki Stosowanej Paweª Motyl Nr albumu: 1065812 Implementacja wybranych algorytmów dla multigrafów w j zyku Python Praca magisterska
Stereometria (geometria przestrzenna)
Stereometria (geometria przestrzenna) Wzajemne poªo»enie prostych w przestrzeni Stereometria jest dziaªem geometrii, którego przedmiotem bada«s bryªy przestrzenne oraz ich wªa±ciwo±ci. Na pocz tek omówimy
TEORIA GRAFÓW. Graf skierowany dla ka»dej kraw dzi (oznaczanej tutaj jako ªuk) para wierzchoªków incydentnych jest par uporz dkowan {u, v}.
Podstawowe denicje: TEORIA GRAFÓW Graf (nieskierowany) G = (V, E) struktura skªadaj ca si ze: zbioru wierzchoªków V = {,,..., v n } oraz zbioru kraw dzi E = {e 1, e 2,..., e m }. Z ka»d kraw dzi e skojarzona
Macierze. 1 Podstawowe denicje. 2 Rodzaje macierzy. Denicja
Macierze 1 Podstawowe denicje Macierz wymiaru m n, gdzie m, n N nazywamy tablic liczb rzeczywistych (lub zespolonych) postaci a 11 a 1j a 1n A = A m n = [a ij ] m n = a i1 a ij a in a m1 a mj a mn W macierzy
Algorytmy i Struktury Danych
Lista zada«. Nr 4. 9 kwietnia 2016 IIUWr. II rok informatyki. Algorytmy i Struktury Danych 1. (0pkt) Rozwi» wszystkie zadania dodatkowe. 2. (1pkt) Uªó» algorytm znajduj cy najta«sz drog przej±cia przez
Wykªad 7. Ekstrema lokalne funkcji dwóch zmiennych.
Wykªad jest prowadzony w oparciu o podr cznik Analiza matematyczna 2. Denicje, twierdzenia, wzory M. Gewerta i Z. Skoczylasa. Wykªad 7. Ekstrema lokalne funkcji dwóch zmiennych. Denicja Mówimy,»e funkcja
Bash i algorytmy. Elwira Wachowicz. 20 lutego
Bash i algorytmy Elwira Wachowicz elwira@ifd.uni.wroc.pl 20 lutego 2012 Elwira Wachowicz (elwira@ifd.uni.wroc.pl) Bash i algorytmy 20 lutego 2012 1 / 16 Inne przydatne polecenia Polecenie Dziaªanie Przykªad
1 Bª dy i arytmetyka zmiennopozycyjna
1 Bª dy i arytmetyka zmiennopozycyjna Liczby w pami ci komputera przedstawiamy w ukªadzie dwójkowym w postaci zmiennopozycyjnej Oznacza to,»e s one postaci ±m c, 01 m < 1, c min c c max, (1) gdzie m nazywamy
ANALIZA NUMERYCZNA. Grzegorz Szkibiel. Wiosna 2014/15
ANALIZA NUMERYCZNA Grzegorz Szkibiel Wiosna 2014/15 Spis tre±ci 1 Metoda Eulera 3 1.1 zagadnienia brzegowe....................... 3 1.2 Zastosowanie ró»niczki...................... 4 1.3 Output do pliku
Ukªady równa«liniowych
dr Krzysztof yjewski Mechatronika; S-I 0 in» 7 listopada 206 Ukªady równa«liniowych Informacje pomocnicze Denicja Ogólna posta ukªadu m równa«liniowych z n niewiadomymi x, x, x n, gdzie m, n N jest nast
c Marcin Sydow Grafy i Zastosowania BFS DFS 4: Przeszukiwanie Grafów (BFS, DFS i zastosowania) DFS nieskierowane DFS skierowane Podsumowanie
4: Przeszukiwanie Grafów (, i zastosowania) Spis zagadnie«przeszukiwanie grafów (rola, schemat ogólny, zastosowania) realizacje (kolejka, stos, rekurencja) przeszukiwanie wszerz zastosowania przeszukiwanie
Egzaminy i inne zadania. Semestr II.
Egzaminy i inne zadania. Semestr II. Poni»sze zadania s wyborem zada«ze Wst pu do Informatyki z egzaminów jakie przeprowadziªem w ci gu ostatnich lat. Ponadto doª czyªem szereg zada«, które pojawiaªy si
WST P DO TEORII INFORMACJI I KODOWANIA. Grzegorz Szkibiel. Wiosna 2013/14
WST P DO TEORII INFORMACJI I KODOWANIA Grzegorz Szkibiel Wiosna 2013/14 Spis tre±ci 1 Kodowanie i dekodowanie 4 1.1 Kodowanie a szyfrowanie..................... 4 1.2 Podstawowe poj cia........................
WST P DO TEORII INFORMACJI I KODOWANIA. Grzegorz Szkibiel. Wiosna 2013/14
WST P DO TEORII INFORMACJI I KODOWANIA Grzegorz Szkibiel Wiosna 203/4 Spis tre±ci Kodowanie i dekodowanie 4. Kodowanie a szyfrowanie..................... 4.2 Podstawowe poj cia........................
Janusz Adamowski METODY OBLICZENIOWE FIZYKI Zastosowanie eliptycznych równa«ró»niczkowych
Janusz Adamowski METODY OBLICZENIOWE FIZYKI 1 Rozdziaª 9 RÓWNANIA ELIPTYCZNE 9.1 Zastosowanie eliptycznych równa«ró»niczkowych cz stkowych 9.1.1 Problemy z warunkami brzegowymi W przestrzeni dwuwymiarowej
Algorytmy i struktury danych
Algorytmy i struktury danych Cz ± druga Prowadz cy: dr Andrzej Mróz, Wydziaª Matematyki i Informatyki, Uniwersytet Mikoªaja Kopernika 1 / 82 Rekurencja Procedura (funkcja) rekurencyjna wywoªuje sam siebie.
ARYTMETYKA MODULARNA. Grzegorz Szkibiel. Wiosna 2014/15
ARYTMETYKA MODULARNA Grzegorz Szkibiel Wiosna 2014/15 Spis tre±ci 1 Denicja kongruencji i jej podstawowe wªasno±ci 3 2 Systemy pozycyjne 8 3 Elementy odwrotne 12 4 Pewne zastosowania elementów odwrotnych
Grafy i Zastosowania. 9: Digrafy (grafy skierowane) c Marcin Sydow. Digrafy. Porz dki cz ±ciowe * Euler i Hamilton. Turnieje
9: (grafy skierowane) Spis zagadnie«cz ±ciowe Przykªady: gªosowanie wi kszo±ciowe, Digraf (graf skierowany) Digraf to równowa»ny termin z terminem graf skierowany (od ang. directed graph). W grafach skierowanych
POLITECHNIKA WROCŠAWSKA WYDZIAŠ ELEKTRONIKI PRACA DYPLOMOWA MAGISTERSKA
POLITECHNIKA WROCŠAWSKA WYDZIAŠ ELEKTRONIKI Kierunek: Specjalno± : Automatyka i Robotyka (AIR) Robotyka (ARR) PRACA DYPLOMOWA MAGISTERSKA Podatny manipulator planarny - budowa i sterowanie Vulnerable planar
Elementy geometrii w przestrzeni R 3
Elementy geometrii w przestrzeni R 3 Z.Šagodowski Politechnika Lubelska 29 maja 2016 Podstawowe denicje Wektorem nazywamy uporz dkowan par punktów (A,B) z których pierwszy nazywa si pocz tkiem a drugi
A = n. 2. Ka»dy podzbiór zbioru sko«czonego jest zbiorem sko«czonym. Dowody tych twierdze«(elementarne, lecz nieco nu» ce) pominiemy.
Logika i teoria mnogo±ci, konspekt wykªad 12 Teoria mocy, cz ± II Def. 12.1 Ka»demu zbiorowi X przyporz dkowujemy oznaczany symbolem X obiekt zwany liczb kardynaln (lub moc zbioru X) w taki sposób,»e ta
c Marcin Sydow Podstawy Grafy i Zastosowania Kod Prüfera 3: Drzewa Drzewa ukorzenione * Drzewa binarne Zastosowania Podsumowanie
Grafy i Grafy i 3: Spis zagadnie«grafy i drzewo i las: denicja, charakteryzacje, wªasno±ci kodowanie Prüfera i zliczanie drzew etykietowanych (tw. Cayleya) drzewa drzewa zliczanie drzew binarnych (tw.
ARYTMETYKA MODULARNA. Grzegorz Szkibiel. Wiosna 2014/15
ARYTMETYKA MODULARNA Grzegorz Szkibiel Wiosna 2014/15 Spis tre±ci 1 Denicja kongruencji i jej podstawowe wªasno±ci 3 2 Systemy pozycyjne 8 3 Elementy odwrotne 12 4 Pewne zastosowania elementów odwrotnych
Grafy i Zastosowania. 5: Drzewa Rozpinaj ce. c Marcin Sydow. Drzewa rozpinaj ce. Cykle i rozci cia fundamentalne. Zastosowania
Grafy i Grafy i 5: Rozpinaj ce Spis zagadnie«grafy i i lasy cykle fundamentalne i wªasno±ci cykli i rozci przestrzenie cykli i rozci * : zastosowanie w sieciach elektrycznych minimalne * algorytm Kruskala*
Metody numeryczne i statystyka dla in»ynierów
Kierunek: Automatyka i Robotyka, II rok Interpolacja PWSZ Gªogów, 2009 Interpolacja Okre±lenie zale»no±ci pomi dzy interesuj cymi nas wielko±ciami, Umo»liwia uproszczenie skomplikowanych funkcji (np. wykorzystywana
Podziaª pracy. Cz ± II. 1 Tablica sortuj ca. Rozwi zanie
Cz ± II Podziaª pracy 1 Tablica sortuj ca Kolejka priorytetowa to struktura danych udost pniaj ca operacje wstawienia warto±ci i pobrania warto±ci minimalnej. Z kolejki liczb caªkowitych, za po±rednictwem
Podstawowe algorytmy grafowe i ich zastosowania
Podstawowe algorytmy grafowe i ich zastosowania Autor projektu: dr Andrzej Mróz (UMK) Projekt pn. Wzmocnienie potencjaªu dydaktycznego UMK w Toruniu w dziedzinach matematyczno-przyrodniczych realizowany
Numeryczne zadanie wªasne
Rozdziaª 11 Numeryczne zadanie wªasne W tym rozdziale zajmiemy si symetrycznym zadaniem wªasnym, tzn. zadaniem znajdowania warto±ci i/lub wektorów wªasnych dla macierzy symetrycznej A = A T. W zadaniach
Dzi kuj za uwag! Spotkania z Pythonem. Cz ± 1 - podstawy - rozwi zania zada« Michaª Alichniewicz. Gda«sk 2014. Studenckie Koªo Automatyków SKALP
Spotkania z Pythonem Cz ± 1 - podstawy - rozwi zania zada«michaª Alichniewicz Studenckie Koªo Automatyków SKALP Gda«sk 2014 Dzi kuj za uwag! Na licencji Creative Commons Attribution-NonCommercial-ShareAlike
Najkrótsze drogi w grafach z wagami
Najkrótsze drogi w grafach z wagami Autor projektu: dr Andrzej Mróz (UMK) Projekt pn. Wzmocnienie potencjaªu dydaktycznego UMK w Toruniu w dziedzinach matematyczno-przyrodniczych realizowany w ramach Poddziaªania
Elementy teorii grafów, sposoby reprezentacji grafów w komputerze
Elementy teorii grafów, sposoby reprezentacji grafów w komputerze Autor projektu: dr Andrzej Mróz (UMK) Projekt pn. Wzmocnienie potencjaªu dydaktycznego UMK w Toruniu w dziedzinach matematyczno-przyrodniczych
Podstawowe algorytmy grafowe i ich zastosowania
Podstawowe algorytmy grafowe i ich zastosowania dr Andrzej Mróz (UMK w Toruniu) 2013 Projekt wspóªnansowany ze ±rodków Unii Europejskiej w ramach Europejskiego Funduszu Spoªecznego Projekt pn. Wzmocnienie
Listy Inne przykªady Rozwi zywanie problemów. Listy w Mathematice. Marcin Karcz. Wydziaª Matematyki, Fizyki i Informatyki.
Wydziaª Matematyki, Fizyki i Informatyki 10 marca 2008 Spis tre±ci Listy 1 Listy 2 3 Co to jest lista? Listy List w Mathematice jest wyra»enie oddzielone przecinkami i zamkni te w { klamrach }. Elementy
Model obiektu w JavaScript
16 marca 2009 E4X Paradygmat klasowy Klasa Deniuje wszystkie wªa±ciwo±ci charakterystyczne dla wybranego zbioru obiektów. Klasa jest poj ciem abstrakcyjnym odnosz cym si do zbioru, a nie do pojedynczego
Przykªady problemów optymalizacji kombinatorycznej
Przykªady problemów optymalizacji kombinatorycznej Problem Komiwoja»era (PK) Dane: n liczba miast, n Z +, c ji, i, j {1,..., n}, i j odlegªo± mi dzy miastem i a miastem j, c ji = c ij, c ji R +. Zadanie:
Ciaªa i wielomiany. 1 Denicja ciaªa. Ciaªa i wielomiany 1
Ciaªa i wielomiany 1 Ciaªa i wielomiany 1 Denicja ciaªa Niech F b dzie zbiorem, i niech + (dodawanie) oraz (mno»enie) b d dziaªaniami na zbiorze F. Denicja. Zbiór F wraz z dziaªaniami + i nazywamy ciaªem,
Praca Dyplomowa Magisterska
Internetowa Platform Edukacyjna w Technologii ZOPE Autor: Promotor: Dr in». Adam Doma«ski Politechnika l ska Wydziaª Automatyki, Elektroniki i Informatyki Kierunek Informatyka 22 wrze±nia 2009 Dlaczego
Badanie grafów Halina z językiem Python
Uniwersytet Jagielloński w Krakowie Wydział Fizyki, Astronomii i Informatyki Stosowanej Aleksander Krawczyk Nr albumu: 1054611 Badanie grafów Halina z językiem Python Praca magisterska na kierunku Informatyka
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,
Teoria grafów i sieci 1 / 188
Teoria grafów i sieci / Drzewa z wagami Drzewem z wagami nazywamy drzewo z korzeniem, w którym do ka»dego li±cia przyporz dkowana jest liczba nieujemna, nazywana wag tego li±cia. / Drzewa z wagami Drzewem
Algorytmy zwiazane z gramatykami bezkontekstowymi
Algorytmy zwiazane z gramatykami bezkontekstowymi Rozpoznawanie j zyków bezkontekstowych Problem rozpoznawania j zyka L polega na sprawdzaniu przynale»no±ci sªowa wej±ciowego x do L. Zakªadamy,»e j zyk
x y x y x y x + y x y
Algebra logiki 1 W zbiorze {0, 1} okre±lamy dziaªania dwuargumentowe,, +, oraz dziaªanie jednoargumentowe ( ). Dziaªanie x + y nazywamy dodawaniem modulo 2, a dziaªanie x y nazywamy kresk Sheera. x x 0
Wzorce projektowe kreacyjne
Wzorce projektowe kreacyjne Krzysztof Ciebiera 14 pa¹dziernika 2005 1 1 Wst p 1.1 Podstawy Opis Ogólny Podstawowe informacje Wzorce kreacyjne sªu» do uabstrakcyjniania procesu tworzenia obiektów. Znaczenie
Elementy teorii grafów, sposoby reprezentacji grafów w komputerze
Elementy teorii grafów, sposoby reprezentacji grafów w komputerze dr Andrzej Mróz (UMK w Toruniu) 2013 Projekt wspóªnansowany ze ±rodków Unii Europejskiej w ramach Europejskiego Funduszu Spoªecznego Projekt
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
ARYTMETYKA MODULARNA. Grzegorz Szkibiel. Wiosna 2014/15
ARYTMETYKA MODULARNA Grzegorz Szkibiel Wiosna 2014/15 Spis tre±ci 1 Denicja kongruencji i jej podstawowe wªasno±ci 3 2 Systemy pozycyjne 8 3 Elementy odwrotne 12 4 Pewne zastosowania elementów odwrotnych
ALGORYTMIKA Wprowadzenie do algorytmów
ALGORYTMIKA Wprowadzenie do algorytmów Popularne denicje algorytmu przepis opisuj cy krok po kroku rozwi zanie problemu lub osi gni cie jakiego± celu. (M. Sysªo, Algorytmy, ±ci±lejszej denicji w ksi»ce
Lekcja 8 - ANIMACJA. 1 Polecenia. 2 Typy animacji. 3 Pierwsza animacja - Mrugaj ca twarz
Lekcja 8 - ANIMACJA 1 Polecenia Za pomoc Baltiego mo»emy tworzy animacj, tzn. sprawia by obraz na ekranie wygl daª jakby si poruszaª. Do animowania przedmiotów i tworzenia animacji posªu» nam polecenia
Notatki z AiSD. Nr 2. 4 marca 2010 Algorytmy Zachªanne.
Notatki z AiSD. Nr 2. 4 marca 2010 Algorytmy Zachªanne. IIUWr. II rok informatyki. Przygotowaª: Krzysztof Lory± 1 Schemat ogólny. Typowe zadanie rozwi zywane metod zachªann ma charakter optymalizacyjny.
1 a + b 1 = 1 a + 1 b 1. (a + b 1)(a + b ab) = ab, (a + b)(a + b ab 1) = 0, (a + b)[a(1 b) + (b 1)] = 0,
XIII Warmi«sko-Mazurskie Zawody Matematyczne. Olsztyn 2015 Rozwi zania zada«dla szkóª ponadgimnazjalnych ZADANIE 1 Zakªadamy,»e a, b 0, 1 i a + b 1. Wykaza,»e z równo±ci wynika,»e a = -b 1 a + b 1 = 1
Funkcje, wielomiany. Informacje pomocnicze
Funkcje, wielomiany Informacje pomocnicze Przydatne wzory: (a + b) 2 = a 2 + 2ab + b 2 (a b) 2 = a 2 2ab + b 2 (a + b) 3 = a 3 + 3a 2 b + 3ab 2 + b 3 (a b) 3 = a 3 3a 2 b + 3ab 2 b 3 a 2 b 2 = (a + b)(a
Najkrótsze drogi w grafach z wagami
Najkrótsze drogi w grafach z wagami dr Andrzej Mróz (UMK w Toruniu) 013 Projekt wspóªnansowany ze ±rodków Unii Europejskiej w ramach Europejskiego Funduszu Spoªecznego Projekt pn. Wzmocnienie potencjaªu
Metody numeryczne i statystyka dla in»ynierów
Kierunek: Automatyka i Robotyka, II rok Wprowadzenie PWSZ Gªogów, 2009 Plan wykªadów Wprowadzenie, podanie zagadnie«, poj cie metody numerycznej i algorytmu numerycznego, obszar zainteresowa«i stosowalno±ci
Maszyny Turinga i problemy nierozstrzygalne. Maszyny Turinga i problemy nierozstrzygalne
Maszyny Turinga Maszyna Turinga jest automatem ta±mowym, skª da si z ta±my (tablicy symboli) potencjalnie niesko«czonej w prawo, zakªadamy,»e w prawie wszystkich (tzn. wszystkich poza sko«czon liczb )
Program szkoleniowy Efektywni50+ Moduł III Standardy wymiany danych
Program szkoleniowy Efektywni50+ Moduł III 1 Wprowadzenie do zagadnienia wymiany dokumentów. Lekcja rozpoczynająca moduł poświęcony standardom wymiany danych. Wprowadzenie do zagadnień wymiany danych w
Biedronka. Wej±cie. Wyj±cie. Przykªady. VI OIG Zawody dru»ynowe, Finaª. 19 V 2012 Dost pna pami : 64 MB.
Biedronka Pªot ma D cm dªugo±ci i zbudowany jest z desek zako«czonych trójk tami równoramiennymi, poª czonych ze sob w jedn caªo±. Dªugo± ramienia ka»dego z trójk tów stanowi P % dªugo±ci podstawy. Po
Macierze i Wyznaczniki
Macierze i Wyznaczniki Kilka wzorów i informacji pomocniczych: Denicja 1. Tablic nast puj cej postaci a 11 a 12... a 1n a 21 a 22... a 2n A =... a m1 a m2... a mn nazywamy macierz o m wierszach i n kolumnach,
Wybrane poj cia i twierdzenia z wykªadu z teorii liczb
Wybrane poj cia i twierdzenia z wykªadu z teorii liczb 1. Podzielno± Przedmiotem bada«teorii liczb s wªasno±ci liczb caªkowitych. Zbiór liczb caªkowitych oznacza b dziemy symbolem Z. Zbiór liczb naturalnych
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
1 Stos: Stack i Stack<T>
1 Stos: Stack i Stack Przykªady z»ycia: Stos talerzy (aby wyci gn co± ze ±rodka, musimy wyci gn te z góry) Meble ªadowane do naczepy ci»arówki Osoby wsiadaj ce do samolotu i wysiadaj ce z niego. Piramida
Twierdzenie Wainera. Marek Czarnecki. Warszawa, 3 lipca Wydziaª Filozoi i Socjologii Uniwersytet Warszawski
Twierdzenie Wainera Marek Czarnecki Wydziaª Filozoi i Socjologii Uniwersytet Warszawski Wydziaª Matematyki, Informatyki i Mechaniki Uniwersytet Warszawski Warszawa, 3 lipca 2009 Motywacje Dla dowolnej
12: Znajdowanie najkrótszych ±cie»ek w grafach
12: Znajdowanie najkrótszych ±cie»ek w grafach Spis zagadnie«problem najkrótszych ±cie»ek z jednym ¹ródªem Rozwi zanie sznurkowe kraw dzi Wariant 1: Wariant 2: nieujemne kraw dzie (Dijkstra) Wariant 3:
Zbiory i odwzorowania
Zbiory i odwzorowania 1 Sposoby okre±lania zbiorów 1) Zbiór wszystkich elementów postaci f(t), gdzie t przebiega zbiór T : {f(t); t T }. 2) Zbiór wszystkich elementów x zbioru X speªniaj cych warunek ϕ(x):
Materiaªy do Repetytorium z matematyki
Materiaªy do Repetytorium z matematyki 0/0 Dziaªania na liczbach wymiernych i niewymiernych wiczenie Obliczy + 4 + 4 5. ( + ) ( 4 + 4 5). ( : ) ( : 4) 4 5 6. 7. { [ 7 4 ( 0 7) ] ( } : 5) : 0 75 ( 8) (
Wnioskowanie Boolowskie i teoria zbiorów przybli»onych
Wnioskowanie Boolowskie i teoria zbiorów przybli»onych 4 Zbiory przybli»one Wprowadzenie do teorii zbiorów przybli»onych Zªo»ono± problemu szukania reduktów 5 Wnioskowanie Boolowskie w obliczaniu reduktów
Caªkowanie numeryczne - porównanie skuteczno±ci metody prostokatów, metody trapezów oraz metody Simpsona
Akademia Górniczo-Hutnicza im. Stanisªawa Staszica w Krakowie Wydziaª Fizyki i Informatyki Stosowanej Krzysztof Grz dziel kierunek studiów: informatyka stosowana Caªkowanie numeryczne - porównanie skuteczno±ci