Algorytmy i struktury danych
|
|
- Jan Jabłoński
- 6 lat temu
- Przeglądów:
Transkrypt
1 Algorytmy i struktury danych Wykład 11 - Grafy i podstawowe algorytmy grafowe (ciąg dalszy) Janusz Szwabiński Plan wykładu: Przeszukiwanie w głąb Studium przypadku - zagadnienie skoczka szachowego (ang. knight's tour problem) Algorytm przeszukiwania - wersja 1 Ogólny algorytm przeszukiwania w głąb Sortowanie topologiczne Składowe silnie spójne Najkrótsza ścieżka Algorytm Dijkstry Grafy w Pythonie - pakiet networkx Źródła: większość ilustracji i przykładów pochodzi z "Problem Solving with Algorithms and Data Structures using Python", Przeszukiwanie w głąb Studium przypadku - zagadnienie skoczka szachowego celem zagadki jest znalezienie sekwencji ruchów konika szachowego pozwalających odwiedzić wszystkie pola na szachownicy, każde tylko jeden raz na planszy o rozmiarach 3 3 można obejść osiem pól, ale na środkowe nie można już wskoczyć nie istnieje również rozwiązanie dla planszy 4 4 dla plansz kwadratowych o boku większym od 4 można znaleźć ścieżkę otwartą dla wielu istnieje również ścieżka zamknięta
2 zagadka to szczególny przypadek zagadnienia ścieżki Hamiltona ścieżka pozwalająca odwiedzić każdy z węzłów grafu nieskierowanego tylko raz pierwsza wzmianka o zagadce pojawiła się w 9 wieku - figura poetycka w sanskrycie górne ograniczenie na możliwe ruchy to mimo to zagadkę można rozwiązać w liniowym czasie Rozwiązanie przy pomocy grafów stwórz reprezentację wszystkich możliwych ruchów w formie grafu znajdź ścieżki o długości liczba wierszy liczba kolumn 1 wybierz tę, w której każdy wierzchołek jest odwiedzony tylko raz Budowanie grafu węzły - pola na szachownicy krawędzie - dopuszczalne ruchy konika szachowego In [1]: from asd import Graph, Vertex In [2]: def knightgraph(bdsize): ktgraph = Graph() for row in range(bdsize): for col in range(bdsize): nodeid = postonodeid(row,col,bdsize) newpositions = genlegalmoves(row,col,bdsize) for e in newpositions: nid = postonodeid(e[0],e[1],bdsize) ktgraph.addedge(nodeid,nid) return ktgraph def postonodeid(row, column, board_size): return (row * board_size) + column
3 skoczek porusza się "po literze L" In [3]: def genlegalmoves(x,y,bdsize): newmoves = [] moveoffsets = [(-1,-2),(-1,2),(-2,-1),(-2,1), ( 1,-2),( 1,2),( 2,-1),( 2,1)] for i in moveoffsets: newx = x + i[0] newy = y + i[1] if legalcoord(newx,bdsize) and \ legalcoord(newy,bdsize): newmoves.append((newx,newy)) return newmoves należy sprawdzić, czy ruch nie wyprowadza poza szachownicę In [4]: def legalcoord(x,bdsize): if x >= 0 and x < bdsize: return True else: return False Przykładowa sesja: In [5]: G = knightgraph(8) In [6]: len(g.getvertices()) Out[6]: 64 In [7]: edges = 0 for v in G: for w in v.getconnections(): edges = edges + 1 print(edges) węzły 336 krawędzi In [8]: 336/4096 Out[8]:
4 gdyby graf był zupełny, miałby 4096 krawędzi 8,2% zapełnienia macierzy sąsiedztwa Algorytm przeszukiwania - wersja 1 poznany wcześniej algorytm przeszukiwania wszerz budował drzewo przeszukiwania poziom za poziomem węzły na poziomie k + 1 były odwiedzane dopiero po zakończeniu przetwarzania wszystkich węzłów na poziomie k przeszukiwanie w głąb tworzy drzewo gałąź po gałęzi pierwsza wersja algorytmu będzie skrojona "na miarę" naszego zagadnienia - powtórne odwiedzenie węzła jest zabronione naszym celem jest stworzenie ścieżki, która w przypadku szachownicy 8 8 będzie miała długość 63 (czyli 64 wierzchołki) podobnie, jak w przypadku BFS, będziemy używali kolorów do oznaczania odwiedzonych węzłów: węzły nieodwiedzone są białe węzły odwiedzone - szare jeżeli dojdziemy do końca ścieżki, i będzie ona krótsza niż 63 ślepy zaułek musimy zapełnić możliwość powrotu (w programie poniżej to zwrócenie wartości False w wywołaniu rekurencyjnym) w BFS używaliśmy kolejki to oznaczania węzłów, które powinny być przetworzone przy rekurencyjnej implementacji DFS funkcja będzie używała niejawnie stosu systemowego nasza funkcja przyjmie 4 argumenty: n - aktualna głębokość w drzewie przeszukiwań path - lista wierzchołków odwiedzonych do tej pory u - wierzchołek, od którego startujemy limit - liczba krawędzi w ścieżce In [9]: def knighttour(n,path,u,limit): u.setcolor('gray') path.append(u) if n < limit: nbrlist = list(u.getconnections()) i = 0 done = False while i < len(nbrlist) and not done: if nbrlist[i].getcolor() == 'white': done = knighttour(n+1, path, nbrlist[i], limit) i = i + 1 if not done: # prepare to backtrack path.pop() u.setcolor('white') else: done = True return done Jak to działa? załóźmy, że funkcja getconnections zwraca węzły w porządku alfabetycznym dla grafu poniżej: n = 0
5 path = [] A = G.getVertex('A') limit = 5 wywołanie funkcji: knighttour(0,path,a,6) algorytm zaczyna od węzła A - oznacza go kolorem szarym i dodaje do ścieżki sąsiednie węzły to B i D ponieważ B jest przed D, DFS zaczyna od niego nasza funkcja wywołuje samą siebie z B jako punktem startowym algortym oznacza węzeł B szarym kolorem i dodaje go do ścieżki ścieżka zawiera [A,B] sprawdzani są jego sąsiedzi: C i D w kolejnym kroku przetwarzany jest C algorytm oznacza go szarym kolorem i dodaje do ścieżki nie ma on sąsiadów, a ścieżka jest krótsza niż limit: wywołanie funkcji dla C zwraca False kolor C zostaje zmieniony na biały węzeł zostaje ściągnięty ze ścieżki algorytm wraca do kolejnego sąsiada węzła B zwrócenie False przez funkcję wywołaną dla C oznacza w praktyce powrót do poprzedzającego go węzła B kolejnym sąsiadem B jest D funkcja wywołuje samą siebie dla D D oznaczony jest kolorem szarym i dodany do ścieżki aktualna zawartość ścieżki [A,B,D] D ma jednego sąsiada - E
6 funkcja wywołuje samą siebie dla E algorytm oznacza E kolorem szarym i dodaje go do ścieżki aktualna zawartość ścieżki [A,B,D,E] węzeł E ma dwóch sąsiadów: B i F węzeł B ma już kolor szary algorytm go pomija funkcja wywołuje samą siebie dla F algorytm oznacza F kolorem szarym i dodaje go do ścieżki aktualna zawartość ścieżki [A,B,D,E,F] F ma jednego sąsiada - C funkcja wywołuje samą siebie dla C algorytm oznacza C kolorem szarym i dodaje go do ścieżki aktualna zawartość ścieżki [A,B,D,E,F,C] warunek n < limit przestał być spełniony - algorytm kończy pracę Rozwiązanie zagadnienia skoczka In [10]: G = knightgraph(5) In [11]: path = [] s = G.getVertex(0) In [12]: s Out[12]: <asd.vertex at 0x7fdfc0107fd0> In [13]: knighttour(0,path,s,24) Out[13]: True
7 In [14]: print(path) [<asd.vertex object at 0x7fdfc0107fd0>, <asd.vertex object at 0x7fdfc0107d30>, <asd.vertex obje ct at 0x7fdfc0107c18>, <asd.vertex object at 0x7fdfc0117c50>, <asd.vertex object at 0x7fdfc0107 c88>, <asd.vertex object at 0x7fdfc01074a8>, <asd.vertex object at 0x7fdfc0107e10>, <asd.vertex object at 0x7fdfc0107ef0>, <asd.vertex object at 0x7fdfc0107f28>, <asd.vertex object at 0x7fdf c0107d68>, <asd.vertex object at 0x7fdfc0107b70>, <asd.vertex object at 0x7fdfc0117b00>, <asd.v ertex object at 0x7fdfc01179e8>, <asd.vertex object at 0x7fdfc0117b38>, <asd.vertex object at 0 x7fdfc0107da0>, <asd.vertex object at 0x7fdfc0107eb8>, <asd.vertex object at 0x7fdfc0107e48>, < asd.vertex object at 0x7fdfc0117ba8>, <asd.vertex object at 0x7fdfc0117ac8>, <asd.vertex object at 0x7fdfc0107cf8>, <asd.vertex object at 0x7fdfc01178d0>, <asd.vertex object at 0x7fdfc0117a9 0>, <asd.vertex object at 0x7fdfc0117be0>, <asd.vertex object at 0x7fdfc0107f60>, <asd.vertex o bject at 0x7fdfc0107cc0>] In [15]: for n in path: print(n.getid()) Analiza algorytmu In [16]: import time for i in range(5,7): G = knightgraph(i) s = G.getVertex(0) path = [] start = time.time() knighttour(0,path,s,i**2-1) end = time.time() - start print('board size: {0}x{0}. Execution time: {1} s.'.format(i,end)) Board size: 5x5. Execution time: s. Board size: 6x6. Execution time: s.
8 czas wykonania algorytmu gwałtownie rośnie analiza wykazałaby, że nasz algorytm jest klasy O(k n ), gdzie k to niewielka stała startując od korzenia, algorytm sprawdza wszystkie możliwe ruchy skoczka w zależności od położenia pola, ruchów może być od 2 do 8 drzewo przeszukiwania szybko rośnie w binarnym drzewie przeszukiwania o wysokości n liczba węzłów jest 2 n w naszym drzewie jest ich dużo więcej liczba potomków jest zmienna jeśli jednak k będzie średnim współczynnikiem rozgałęzienia, to liczba węzłów do odwiedzenia będzie równa k n Algorytm Warnsdorffa opublikowany w 1823 wybieraj jako następny ten węzeł, który ma najmniejszą możliwą liczbę dozwolonych ruchów In [17]: def orderbyavail(n): reslist = [] for v in n.getconnections(): if v.getcolor() == 'white': c = 0 for w in v.getconnections(): if w.getcolor() == 'white': c = c + 1 reslist.append((c,v)) reslist.sort(key=lambda x: x[0]) #sort the nodes by the number of connections return [y[1] for y in reslist]
9 In [18]: def knighttour2(n,path,u,limit): u.setcolor('gray') path.append(u) if n < limit: nbrlist = list(orderbyavail(u)) i = 0 done = False while i < len(nbrlist) and not done: if nbrlist[i].getcolor() == 'white': done = knighttour(n+1, path, nbrlist[i], limit) i = i + 1 if not done: # prepare to backtrack path.pop() u.setcolor('white') else: done = True return done In [20]: import time for i in range(5,7): G = knightgraph(i) s = G.getVertex(0) path = [] start = time.time() knighttour2(0,path,s,i**2-1) end = time.time() - start print('board size: {0}x{0}. Execution time: {1} s.'.format(i,end)) Board size: 5x5. Execution time: s. Board size: 6x6. Execution time: s. Dlaczego to działa?: wybierając węzły o największej możliwej liczbie dozwolonych ruchów, skoczek dość szybko znalazłby się na środku szachownicy dochodząc ze środka do brzegu, może mieć problemy, żeby się stamtąd wydostać wybierając węzły o najmniejszej możliwej liczbie ruchów, skoczek najpierw odwiedza wszystkie pola przy brzegach trudno dostępne pola zostają odwiedzone bez większych problemów heurystyka: metoda znajdowania rozwiązań, dla której nie ma gwarancji znalezienia rozwiązania optymalnego, a często nawet prawidłowego mimo to działa w większości przypadków Ogólny algorytm przeszukiwania w głąb w zagadnieniu skoczka byliśmy zainteresowani znalezieniem jednej konkretnej ścieżki bez rozgałęzień w ogólnym przypadku najczęściej budujemy możliwie największe drzewo przeszukiwań, ze wszystkimi koniecznymi rozgałęzieniami algorytm będzie wykorzystywał dwa dodatkowe (wprowadzone już na poprzednim wykładzie) atrybuty w klasie Vertex disc - czas (liczba kroków) potrzebnych do odwiedzenia węzła po raz pierwszy fin - czas potrzebny do zmiany jego koloru na czarny dodatkowo stworzymy nową klasę, DFSGraph, która będzie dziedziczyć z klasy Graph: nowy atrybut time przechowujący liczbę kroków metoda dfs - budowanie lasu drzew DFS iteracja po wszystkich węzłach, które są białe każdy z nich staje się korzeniem nowego drzewa w ten sposób algorytm może stworzyć drzewo dla grafu niespójnego metoda dfsvisit - odwiedzanie węzłów w gałęzi rekurencyjna metoda tworzenia drzewa DFS dla pojedynczego węzła In [21]: from asd import Graph
10 In [22]: class DFSGraph(Graph): def init (self): super(). init () self.time = 0 def dfs(self): for avertex in self: avertex.setcolor('white') avertex.setpred(-1) for avertex in self: if avertex.getcolor() == 'white': self.dfsvisit(avertex) def dfsvisit(self,startvertex): startvertex.setcolor('gray') self.time += 1 startvertex.setdiscovery(self.time) for nextvertex in startvertex.getconnections(): if nextvertex.getcolor() == 'white': nextvertex.setpred(startvertex) self.dfsvisit(nextvertex) startvertex.setcolor('black') self.time += 1 startvertex.setfinish(self.time) Jak to działa? rozważmy prosty graf przedstawiony na poniższych rysunkach przeszukiwanie rozpoczyna się w węźle A zmieniamy jego kolor na szary ustalamy czas pierwszych odwiedzin na 1 sprawdzamy sąsiadów: B i D postanawiamy odwiedzać je w porządku alfabetycznym odwiedzamy węzeł B zmieniamy jego kolor na szary ustalamy czas pierwszych odwiedzin na 2 sprawdzamy sąsiadów: C i D odwiedzamy węzeł C zmieniamy jego kolor na szary ustalamy czas pierwszych odwiedzin na 3 sprawdzamy sąsiadów węzeł C nie ma sąsiadów: zmieniamy jego kolor na czarny
11 ustalamy czas zakończenia przetwarzania na 4 wracamy do węzła B i odwiedzamy kolejnego sąsiada odwiedzamy węzeł D: zmieniamy jego kolor na szary ustalamy czas pierwszych odwiedzin na 5 sprawdzamy sąsiadów: E odwiedzamy węzeł E: zmieniamy jego kolor na szary ustalamy czas pierwszych odwiedzin na 6 sprawdzamy sąsiadów: B i F węzeł B jest już szary - ignorujemy go odwiedzamy węzeł F: zmieniamy jego kolor na szary ustalamy czas pierwszych odwiedzin na 7 sprawdzamy sąsiadów: C ponieważ C jest już czarny (zakończył jakąś gałąź), algorytm doszedł do końca kolejnej gałęzi zmieniamy kolor F na czarny ustalamu czas zakończenia na 8 wracamy do poprzednika - E E nie ma więcej białych sąsiadów: zmieniamy kolor na czarny ustalamy czas zakończenia na 9 wracamy do poprzednika - D D nie ma więcej białych sąsiadów:
12 zmieniamy kolor na czarny ustalamy czas zakończenia na 10 wracamy do poprzednika - B B nie ma więcej białych sąsiadów: zmieniamy kolor na czarny ustalamy czas zakończenia na 11 wracamy do poprzednika - A A nie ma więcej białych sąsiadów: zmieniamy kolor na czarny ustalamy czas zakończenia na 12 A nie ma poprzednika - koniec działania programu Wynikowe drzewo wyszukiwania każde dziecko ma późniejszy czas pierwszych odwiedziń i wcześniejszy zakończenia od swojego rodzica Analiza czasu wykonywania pętle w metodzie dfs to O(V), gdzie V to liczba węzłów dfvisit jest uruchamiane raz dla każdej krawędzi na liście sąsiedztwa: ponieważ funkcja odwiedza tylko węzły białe, wykonywana jest co najwyżej raz dla każdej krawędzi klasa O(E), gdzie E to liczba krawędzi sumaryczna złożoność: O(V + E)
13 Sortowanie topologiczne specjaliści potrafią przekształcić wiele zagadnień na problem z dziedziny grafów przykład - przepis kuchenny na naleśniki: zakładając, że dysponujemy tylko takim grafem, nasuwa się pytanie, od którego węzła i w jakiej kolejności wykonać wszystkie kroki sortowanie topologiczne skierowanego grafu acyklicznego: liniowe uporządkowanie wierzchołków, w którym jeśli istnieje krawędź skierowana prowadząca od wierzchołka x do y, to x znajdzie się przed wierzchołkiem y innymi słowy, każdy wierzchołek poprzedza wszystkie te wierzchołki, do których prowadzą wychodzące od niego krawędzie do wykonania sortowania topologicznego możemy zaadaptować przeszukiwanie w głąb: wywołujemy metodę dfs dla danego grafu G - celem jest wyznaczenie czasów odwiedzin i zakończenia przetwarzania węzłów węzły porządkujemy według malejących czasów wykonania uporządkowane węzły są posortowane topologicznie Składowe silnie spójne
14 Motywacja Składowa silnie spójna Maksymalny podgraf H grafu G, a jednocześnie jego spójna składowa, taka, że pomiędzy każdymi dwoma jej wierzchołkami istnieje ścieżka. Składowa spójna Spójny podgraf grafu G nie zawarty w większym podgrafie spójnym grafu G. Graf spójny Graf spełniający warunek, że dla każdej pary wierzchołków istnieje ścieżka, która je łączy. po zidentyfikowaniu składowych silnie spójnych możemy uprościć reprezentację grafu
15 Dygresja - transpozycja grafu transpozycja G T grafu G to graf powstały przez odrócenie kierunku wszystkich krawędzi w grafie G zauważmy, że transpozycja nie zmienia liczby składowych silnie spójnych Algorytm wyszukiwania składowych silnie spójnych uruchom metodę dfs dla grafu G w celu wyznaczenia czasów wyznacz G T uruchom dfs dla grafu G T : w głównej pętli metody odwiedzaj węzły według malejącego porządku czasów końcowych każde z drzew wyznaczonych przez dfs na grafie transponowanym to składowa silnie spójna Jak to działa? krok 1 - uruchamiamy metodę dfs na grafie wejściowym krok 2 - uruchamiamy metodę na grafie transponowanym, pamiętając o specjalnym porządku odwiedzania węzłów (czasy na poniższym rysunku to nowe czasy przetwarzania na grafie transponowanym)
16 krok 3 - identyfikujemy poszczególne drzewa
17 Najkrótsza ścieżka Motywacja każdy router połączony jest z innymi routerami każdemu połaczeniu między routerami przypisany jest koszt połączenia (związany z wolumenem danych przesyłanych przez łacze, porą dnia itp.) chcemy znaleźć ścieżkę z najmniejszym całkowitym kosztem połączenia problem podobny do przeszukiwania wszerz, jednak teraz bardziej liczy się waga niż liczba przeskoków Algorytm Dijkstry podobnie, jak w BFS, wykorzystamy atrybut dist w klasie Vertex do pomiaru długości jednak teraz nie będzie to liczba przeskoków, a całkowity koszt ścieżki algorytm przechodzi przez każdy węzeł w grafie kolejność przechodzenia sterowana jest przy pomocy kolejki prorytetowej (zbudowanej na kopcu) priorytetem będzie atrybut dist, podczas tworzenia węzła ustawiony na bardzo dużą wartość In [2]: from asd import PriorityQueue, Graph, Vertex def dijkstra(agraph,start): pq = PriorityQueue() start.setdistance(0) pq.buildheap([(v.getdistance(),v) for v in agraph]) while not pq.isempty(): currentvert = pq.delmin() for nextvert in currentvert.getconnections(): newdist = currentvert.getdistance() + currentvert.getweight(nextvert) if newdist < nextvert.getdistance(): nextvert.setdistance( newdist ) nextvert.setpred(currentvert) pq.decreasekey(nextvert,newdist) kolejka priorytetowa przechowuje krotki klucz-wartość klucz to klucz węzła, wartość to odległość do węzła decreasekey - zmienia odległośc do węzła, który jest jeszcze w kolejce Jak to działa? zacznijmy od wierzchołka u
18 ustawiamy jedo odległość na 0 sprawdzamy sąsiadów: x, v, w odległości wszystkich sąsiadów są początkowo ustawione na sys.maxint kosztem ich osiągnięcia jest zatem koszt ich bezpośredniego osiągnięcia aktualizujemy ich odległości, przypisując im koszt związany z krawędziami najmniejszy koszt ma węzeł x odwiedzamy węzeł x sąsiedzi to: u, v, w, y dla każdego węzła sprawdzamy, czy dojście do niego poprzez węzeł x będzie tańsze od jego aktualnego kosztu będzie to prawdą dla y, który ma odległość ustawioną na sys.maxint również droga do w będzie mniejsza, jeśli pójdziemy do niego poprzez x aktualizujemy koszt w zmieniamy jego poprzednika z u na x odwiedzamy węzeł v ten krok nie zmienia nic w grafie możemy przejść do węzła y odwiedzamy węzeł y okazuje się, że poprzez y można dotrzeć taniej do w i z zmieniamy koszty tych węzłów
19 ustawiamy ich poprzedników na y odwiedzamy węzeł w brak zmian w grafie odwiedzamy węzeł z brak zmian w grafie Ważne algorytm działa tylko w przypadku nieujemnych wag nie nadaje się do badania Internetu, ponieważ wymaga jego pełnego grafu każdy router musiałby przechowywać informacje o wszystkich innych routerach na świecie w przypadku Internetu używa się innych algorytmów, np. algorytmu wektora odległości ( Złożoność budowanie kolejki priorytetowej: O(V) (początkowo każdy węzeł jest w kolejce) pętla while wykonywana jest dla każdego węzła raz wewnątrz tej pętli delmin to O(logV) pętla jest rzędu O(VlogV)
20 pętla for wykonywana jest raz dla każdej krawędzi: decreasekey jest rzędu O(logV) pętla jest rzędu O(ElogV) całość jest rzędu O((V + E)logV) Grafy w Pythonie - pakiet networkx In [3]: %matplotlib inline import networkx as nx Tworzenie grafu In [4]: G = nx.graph() In [5]: G Out[5]: <networkx.classes.graph.graph at 0x7fcc64efc4e0> Węzły dodajemy pojedynczo: In [6]: G.add_node(1) lub całymi listami: In [7]: G.add_nodes_from([2,3,4,5,6,7,8,9]) In [8]: G.nodes() Out[8]: [1, 2, 3, 4, 5, 6, 7, 8, 9] Podobnie z krawędziami: In [9]: G.add_edge(1,2) e=(2,3) G.add_edge(*e) # unpack edge tuple* G.add_edges_from([(3,6),(3,9),(1,7),(2,6),(5,6),(1,8)]) In [10]: G.nodes() Out[10]: [1, 2, 3, 4, 5, 6, 7, 8, 9] In [11]: G.edges() Out[11]: [(1, 8), (1, 2), (1, 7), (2, 3), (2, 6), (3, 9), (3, 6), (5, 6)]
21 In [12]: G.neighbors(6) Out[12]: [2, 3, 5] Atrybuty węzłów krawędzi i grafu In [13]: G.add_node(10, time='5pm') G.node[10]['room'] = 714 G.nodes(data=True) Out[13]: [(1, {}), (2, {}), (3, {}), (4, {}), (5, {}), (6, {}), (7, {}), (8, {}), (9, {}), (10, {'room': 714, 'time': '5pm'})] In [14]: G.graph['day']='Monday' G.graph Out[14]: {'day': 'Monday'} In [15]: G[1][2]['weight'] = 4.7 G.edge[5][6]['weight'] = 4 In [16]: G.edges(data=True) Out[16]: [(1, 8, {}), (1, 2, {'weight': 4.7}), (1, 7, {}), (2, 3, {}), (2, 6, {}), (3, 9, {}), (3, 6, {}), (5, 6, {'weight': 4})] Grafy skierowane In [17]: DG=nx.DiGraph() DG.add_weighted_edges_from([(1,2,0.5), (3,1,0.75)]) In [18]: DG.out_degree(1,weight='weight') Out[18]: 0.5
22 In [19]: DG.degree(1,weight='weight') Out[19]: 1.25 In [20]: DG.successors(1) Out[20]: [2] In [21]: DG.neighbors(1) Out[21]: [2] Generatory grafów In [22]: er=nx.erdos_renyi_graph(20,0.15) ws=nx.watts_strogatz_graph(30,3,0.1) ba=nx.barabasi_albert_graph(20,5) red=nx.random_lobster(20,0.9,0.9) Wizualizacja In [23]: nx.draw(er)
23 In [24]: nx.draw_circular(er) In [25]: nx.draw(ws)
24 In [26]: nx.draw(ba) In [27]: nx.draw(red) Analiza grafów
25 In [28]: nx.draw(g,with_labels=true) In [29]: list(nx.connected_components(g)) Out[29]: [{1, 2, 3, 5, 6, 7, 8, 9}, {4}, {10}] In [30]: nx.clustering(g) Out[30]: {1: 0.0, 2: , 3: , 4: 0.0, 5: 0.0, 6: , 7: 0.0, 8: 0.0, 9: 0.0, 10: 0.0} In [31]: nx.degree(g) Out[31]: {1: 3, 2: 3, 3: 3, 4: 0, 5: 1, 6: 3, 7: 1, 8: 1, 9: 1, 10: 0} In [32]: sorted(nx.degree(g).values()) Out[32]: [0, 0, 1, 1, 1, 1, 3, 3, 3, 3] Przeszukiwanie wszerz In [33]: G = nx.barabasi_albert_graph(50,4)
26 In [34]: print(g.nodes()) [0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, 32, 33, 34, 35, 36, 37, 38, 39, 40, 41, 42, 43, 44, 45, 46, 47, 48, 49] In [35]: print(g.edges()) [(0, 4), (1, 17), (1, 18), (1, 4), (1, 5), (1, 24), (1, 8), (1, 41), (1, 26), (1, 12), (2, 34), (2, 4), (2, 5), (2, 6), (2, 7), (2, 9), (2, 44), (2, 14), (2, 48), (2, 46), (2, 23), (2, 25), (2, 30), (2, 31), (3, 32), (3, 17), (3, 18), (3, 4), (3, 5), (3, 6), (3, 49), (3, 24), (3, 20), (3, 47), (3, 15), (4, 5), (4, 6), (4, 7), (4, 8), (4, 11), (4, 12), (4, 46), (4, 15), (4, 48), (4, 49), (4, 25), (4, 28), (5, 32), (5, 6), (5, 7), (5, 8), (5, 9), (5, 10), (5, 11), (5, 12), (5, 13), (5, 19), (5, 20), (5, 21), (5, 23), (6, 33), (6, 35), (6, 7), (6, 9), (6, 10), (6, 45 ), (6, 16), (6, 49), (6, 18), (6, 19), (6, 22), (6, 26), (6, 29), (6, 30), (7, 8), (7, 42), (7, 14), (7, 15), (7, 16), (7, 22), (7, 28), (7, 37), (8, 34), (8, 43), (8, 9), (8, 10), (8, 11), (8, 12), (8, 13), (8, 48), (8, 17), (8, 20), (8, 21), (8, 36), (8, 26), (8, 28), (8, 42), (8, 3 9), (9, 32), (9, 10), (9, 11), (9, 44), (9, 40), (9, 19), (9, 21), (9, 22), (9, 27), (9, 31), ( 10, 34), (10, 28), (10, 29), (10, 30), (11, 34), (11, 35), (11, 38), (11, 41), (11, 13), (11, 1 4), (11, 21), (12, 32), (12, 38), (12, 23), (12, 13), (13, 47), (13, 14), (13, 15), (13, 16), ( 13, 17), (13, 23), (13, 27), (13, 31), (14, 48), (14, 40), (14, 46), (14, 16), (14, 18), (14, 2 2), (14, 25), (14, 29), (15, 27), (16, 20), (16, 39), (18, 36), (18, 33), (18, 39), (18, 44), ( 18, 47), (18, 43), (18, 19), (18, 46), (18, 24), (18, 26), (18, 30), (19, 36), (19, 39), (20, 3 5), (20, 38), (21, 27), (21, 41), (22, 37), (22, 40), (22, 42), (23, 24), (23, 25), (24, 37), ( 25, 47), (27, 45), (27, 41), (27, 31), (28, 42), (28, 40), (28, 35), (28, 36), (28, 43), (28, 2 9), (30, 33), (30, 37), (31, 33), (32, 38), (38, 45), (39, 49), (39, 43), (39, 44), (43, 45)] In [36]: bfs = nx.bfs_edges(g,9) In [37]: print(list(bfs)) [(9, 32), (9, 2), (9, 5), (9, 6), (9, 8), (9, 10), (9, 11), (9, 44), (9, 40), (9, 19), (9, 21), (9, 22), (9, 27), (9, 31), (32, 3), (32, 12), (32, 38), (2, 34), (2, 4), (2, 7), (2, 14), (2, 48), (2, 46), (2, 23), (2, 25), (2, 30), (5, 1), (5, 13), (5, 20), (6, 33), (6, 35), (6, 45), ( 6, 16), (6, 49), (6, 18), (6, 26), (6, 29), (8, 43), (8, 17), (8, 36), (8, 28), (8, 42), (8, 39 ), (11, 41), (22, 37), (27, 15), (3, 24), (3, 47), (4, 0)] In [38]: tree = nx.bfs_tree(g,9) test2
27 In [39]: nx.draw_spring(tree,with_labels=true) In [40]: from networkx.drawing.nx_agraph import graphviz_layout nx.draw(tree,pos=graphviz_layout(tree),with_labels=true,prog='dot') Przeszukiwanie w głąb In [41]: dfs = nx.dfs_edges(g,9)
28 In [42]: print(list(dfs)) [(9, 32), (32, 3), (3, 17), (17, 8), (8, 1), (1, 18), (18, 36), (36, 19), (19, 5), (5, 2), (2, 34), (34, 10), (10, 6), (6, 33), (33, 30), (30, 37), (37, 24), (24, 23), (23, 25), (25, 47), (4 7, 13), (13, 11), (11, 35), (35, 20), (20, 16), (16, 7), (7, 4), (4, 0), (4, 12), (12, 38), (38, 45), (45, 43), (43, 28), (28, 42), (42, 22), (22, 40), (40, 14), (14, 48), (14, 46), (14, 29), (43, 39), (39, 49), (39, 44), (45, 27), (27, 21), (21, 41), (27, 15), (27, 31), (6, 26)] In [43]: dtree = nx.dfs_tree(g,9) In [44]: nx.draw(dtree,pos=graphviz_layout(dtree),with_labels=true,prog='dot')
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ółowoStruktury 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ółowoGrafem 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ółowoOgó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ółowoAlgorytmy 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ółowoZofia 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ółowoWstęp do Programowania potok funkcyjny
Wstęp do Programowania potok funkcyjny Marcin Kubica 2010/2011 Outline 1 Podstawowe pojęcia Definition Graf = wierzchołki + krawędzie. Krawędzie muszą mieć różne końce. Między dwoma wierzchołkami może
Bardziej szczegółowoWykł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. Podstawy Programowania 2. Algorytmy dfs i bfs. Arkadiusz Chrobot. 2 czerwca 2019
Podstawy Programowania Algorytmy dfs i bfs Arkadiusz Chrobot Zakład Informatyki czerwca 09 / 70 Plan Wstęp Algorytm BFS Podsumowanie / 70 Wstęp Wstęp Istnieje wiele algorytmów związanych z grafami, które
Bardziej szczegółowoa) 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ółowoPoró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ółowoAlgorytm DFS Wprowadzenie teoretyczne. Algorytm DFS Wprowadzenie teoretyczne. Algorytm DFS Animacja. Algorytm DFS Animacja. Notatki. Notatki.
Podstawy Programowania Algorytmy dfs i bfs Arkadiusz Chrobot Zakład Informatyki czerwca 09 / 70 Plan Wstęp Podsumowanie / 70 Wstęp Istnieje wiele algorytmów związanych z grafami, które w skrócie nazywane
Bardziej szczegółowoAlgorytmiczna 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ółowoWstęp do programowania
Wstęp do programowania Stosy, kolejki, drzewa Paweł Daniluk Wydział Fizyki Jesień 2013 P. Daniluk(Wydział Fizyki) WP w. VII Jesień 2013 1 / 25 Listy Lista jest uporządkowanym zbiorem elementów. W Pythonie
Bardziej szczegółowoAlgorytmy i Struktury Danych.
Algorytmy i Struktury Danych. Grafy dr hab. Bożena Woźna-Szcześniak bwozna@gmail.com Jan Długosz University, Poland Wykład 9 Bożena Woźna-Szcześniak (AJD) Algorytmy i Struktury Danych. Wykład 9 1 / 20
Bardziej szczegółowoWstęp do Programowania potok funkcyjny
Wstęp do Programowania potok funkcyjny Marcin Kubica 2010/2011 Outline 1 BFS DFS Algorytm Dijkstry Algorytm Floyda-Warshalla Podstawowe pojęcia Definition Graf = wierzchołki + krawędzie. Krawędzie muszą
Bardziej szczegółowoMatematyczne 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ółowoWykład 7. Algorytmy grafowe
Wykład Algorytmy grafowe Algorytmy grafowe i podstawowe algorytmy przeszukiwania Problem Definicje i własności Reprezentacja Przeszukiwanie wszerz (Breadthirst Search) Przeszukiwanie w głąb (Depthirst
Bardziej szczegółowoProgramowanie obiektowe
Programowanie obiektowe Sieci powiązań Paweł Daniluk Wydział Fizyki Jesień 2015 P. Daniluk (Wydział Fizyki) PO w. IX Jesień 2015 1 / 21 Sieci powiązań Można (bardzo zgrubnie) wyróżnić dwa rodzaje powiązań
Bardziej szczegółowoWstę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ółowoAlgorytm Dijkstry znajdowania najkrótszej ścieżki w grafie
Algorytm Dijkstry znajdowania najkrótszej ścieżki w grafie Używane struktury danych: V - zbiór wierzchołków grafu, V = {1,2,3...,n} E - zbiór krawędzi grafu, E = {(i,j),...}, gdzie i, j Î V i istnieje
Bardziej szczegółowoZł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ółowoDigraf o V wierzchołkach posiada V 2 krawędzi, zatem liczba różnych digrafów o V wierzchołkach wynosi 2 VxV
Graf skierowany (digraf) zbiór wierzchołków i zbiór krawędzi skierowanych łączących (co najwyżej jeden raz) uporządkowane pary wierzchołków. Mówimy wtedy, że krawędź łączy pierwszy wierzchołek z drugim
Bardziej szczegółowoWykład 8. Drzewo rozpinające (minimum spanning tree)
Wykład 8 Drzewo rozpinające (minimum spanning tree) 1 Minimalne drzewo rozpinające - przegląd Definicja problemu Własności minimalnych drzew rozpinających Algorytm Kruskala Algorytm Prima Literatura Cormen,
Bardziej szczegółowoWykład 3. Złożoność i realizowalność algorytmów Elementarne struktury danych: stosy, kolejki, listy
Wykład 3 Złożoność i realizowalność algorytmów Elementarne struktury danych: stosy, kolejki, listy Dynamiczne struktury danych Lista jest to liniowo uporządkowany zbiór elementów, z których dowolny element
Bardziej szczegółowoProgramowanie obiektowe
Programowanie obiektowe Sieci powiązań Paweł Daniluk Wydział Fizyki Jesień 2014 P. Daniluk (Wydział Fizyki) PO w. IX Jesień 2014 1 / 24 Sieci powiązań Można (bardzo zgrubnie) wyróżnić dwa rodzaje powiązań
Bardziej szczegółowoAlgorytmy 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ółowoGrafy 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*
Bardziej szczegółowoAlgorytmy i Struktury Danych.
Algorytmy i Struktury Danych. Grafy Bożena Woźna-Szcześniak bwozna@gmail.com Jan Długosz University, Poland Wykład 8 Bożena Woźna-Szcześniak (AJD) Algorytmy i Struktury Danych. Wykład 8 1 / 39 Plan wykładu
Bardziej szczegółowoSortowanie 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ółowo1. 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ĆWICZENIE 1: Przeszukiwanie grafów cz. 1 strategie ślepe
Instytut Mechaniki i Inżynierii Obliczeniowej Wydział Mechaniczny Technologiczny, Politechnika Śląska www.imio.polsl.pl METODY HEURYSTYCZNE ĆWICZENIE 1: Przeszukiwanie grafów cz. 1 strategie ślepe opracował:
Bardziej szczegółowoDziałanie algorytmu oparte jest na minimalizacji funkcji celu jako suma funkcji kosztu ( ) oraz funkcji heurystycznej ( ).
Algorytm A* Opracowanie: Joanna Raczyńska 1.Wstęp Algorytm A* jest heurystycznym algorytmem służącym do znajdowania najkrótszej ścieżki w grafie. Jest to algorytm zupełny i optymalny, co oznacza, że zawsze
Bardziej szczegółowoAlgorytmy 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ółowoE: 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ółowoWysokość drzewa Głębokość węzła
Drzewa Drzewa Drzewo (ang. tree) zbiór węzłów powiązanych wskaźnikami, spójny i bez cykli. Drzewo posiada wyróżniony węzeł początkowy nazywany korzeniem (ang. root). Drzewo ukorzenione jest strukturą hierarchiczną.
Bardziej szczegółowoAlgorytmy równoległe. Rafał Walkowiak Politechnika Poznańska Studia inżynierskie Informatyka 2010
Algorytmy równoległe Rafał Walkowiak Politechnika Poznańska Studia inżynierskie Informatyka Znajdowanie maksimum w zbiorze n liczb węzły - maksimum liczb głębokość = 3 praca = 4++ = 7 (operacji) n - liczność
Bardziej szczegółowoAlgorytmy i struktury danych
Algorytmy i struktury danych Wykład 10 - Grafy i podstawowe algorytmy grafowe Janusz Szwabiński Plan wykładu: Zagadnienie mostów królewieckich Podstawowe pojęcia Zastosowania grafów Graf jako abstrakcyjny
Bardziej szczegółowoAlgorytmy i struktury danych. Co dziś? Tytułem przypomnienia metoda dziel i zwyciężaj. Wykład VIII Elementarne techniki algorytmiczne
Algorytmy i struktury danych Wykład VIII Elementarne techniki algorytmiczne Co dziś? Algorytmy zachłanne (greedyalgorithms) 2 Tytułem przypomnienia metoda dziel i zwyciężaj. Problem można podzielić na
Bardziej szczegółowoPodstawowe własności grafów. Wykład 3. Własności grafów
Wykład 3. Własności grafów 1 / 87 Suma grafów Niech będą dane grafy proste G 1 = (V 1, E 1) oraz G 2 = (V 2, E 2). 2 / 87 Suma grafów Niech będą dane grafy proste G 1 = (V 1, E 1) oraz G 2 = (V 2, E 2).
Bardziej szczegółowoprowadzący dr ADRIAN HORZYK /~horzyk e-mail: horzyk@agh tel.: 012-617 Konsultacje paw. D-13/325
PODSTAWY INFORMATYKI WYKŁAD 8. prowadzący dr ADRIAN HORZYK http://home home.agh.edu.pl/~ /~horzyk e-mail: horzyk@agh agh.edu.pl tel.: 012-617 617-4319 Konsultacje paw. D-13/325 DRZEWA Drzewa to rodzaj
Bardziej szczegółowo3. MINIMAX. Rysunek 1: Drzewo obrazujące przebieg gry.
3. MINIMAX. Bardzo wygodną strukturą danych pozwalającą reprezentować stan i przebieg gry (szczególnie gier dwuosobowych) jest drzewo. Węzły drzewa reprezentują stan gry po wykonaniu ruchu przez jednego
Bardziej szczegółowoDrzewo. Drzewo uporządkowane ma ponumerowanych (oznaczonych) następników. Drzewo uporządkowane składa się z węzłów, które zawierają następujące pola:
Drzewa Drzewa Drzewo (ang. tree) zbiór węzłów powiązanych wskaźnikami, spójny i bez cykli. Drzewo posiada wyróżniony węzeł początkowy nazywany korzeniem (ang. root). Drzewo ukorzenione jest strukturą hierarchiczną.
Bardziej szczegółowoAlgorytmy 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ółowoWykłady z Matematyki Dyskretnej
Wykłady z Matematyki Dyskretnej dla kierunku Informatyka dr Instytut Informatyki Politechnika Krakowska Wykłady na bazie materiałów: dra hab. Andrzeja Karafiata dr hab. Joanny Kołodziej, prof. PK Grafy
Bardziej szczegółowoPodstawowe pojęcia dotyczące drzew Podstawowe pojęcia dotyczące grafów Przykłady drzew i grafów
Podstawowe pojęcia dotyczące drzew Podstawowe pojęcia dotyczące grafów Przykłady drzew i grafów Drzewa: Drzewo (ang. tree) jest strukturą danych zbudowaną z elementów, które nazywamy węzłami (ang. node).
Bardziej szczegółowoRozwią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ółowoGraf. 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ółowoSłowem wstępu. Część rodziny języków XSL. Standard: W3C XSLT razem XPath 1.0 XSLT Trwają prace nad XSLT 3.0
Słowem wstępu Część rodziny języków XSL Standard: W3C XSLT 1.0-1999 razem XPath 1.0 XSLT 2.0-2007 Trwają prace nad XSLT 3.0 Problem Zakładane przez XML usunięcie danych dotyczących prezentacji pociąga
Bardziej szczegółowoAlgorytmy 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ółowoAlgorytmy i Struktury Danych
Algorytmy i Struktury Danych Kopce Bożena Woźna-Szcześniak bwozna@gmail.com Jan Długosz University, Poland Wykład 11 Bożena Woźna-Szcześniak (AJD) Algorytmy i Struktury Danych Wykład 11 1 / 69 Plan wykładu
Bardziej szczegółowoWstęp do programowania. Zastosowania stosów i kolejek. Piotr Chrząstowski-Wachtel
Wstęp do programowania Zastosowania stosów i kolejek Piotr Chrząstowski-Wachtel FIFO - LIFO Kolejki i stosy służą do przechowywania wartości zbiorów dynamicznych, czyli takich, które powstają przez dodawanie
Bardziej szczegółowoIndukowane Reguły Decyzyjne I. Wykład 3
Indukowane Reguły Decyzyjne I Wykład 3 IRD Wykład 3 Plan Powtórka Grafy Drzewa klasyfikacyjne Testy wstęp Klasyfikacja obiektów z wykorzystaniem drzewa Reguły decyzyjne generowane przez drzewo 2 Powtórzenie
Bardziej szczegółowoMinimalne drzewa rozpinające
KNM UŚ 26-28 listopada 2010 Ostrzeżenie Wprowadzenie Motywacja Definicje Niektóre pojęcia pojawiające się podczas tego referatu są naszymi autorskimi tłumaczeniami z języka angielskiego. Nie udało nam
Bardziej szczegółowoMATEMATYKA 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ółowoSZTUCZNA INTELIGENCJA
SZTUCZNA INTELIGENCJA WYKŁAD 12. PRZESZUKIWANIE Częstochowa 2014 Dr hab. inż. Grzegorz Dudek Wydział Elektryczny Politechnika Częstochowska ROZWIĄZYWANIE PROBLEMÓW JAKO PRZESZUKIWANIE Istotną rolę podczas
Bardziej szczegółowoAlgorytmy i Struktury Danych
Algorytmy i Struktury Danych Drzewa poszukiwań binarnych dr hab. Bożena Woźna-Szcześniak bwozna@gmail.com Jan Długosz University, Poland Wykład 12 Bożena Woźna-Szcześniak (AJD) Algorytmy i Struktury Danych
Bardziej szczegółowoDigraf. 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ółowoAlgorytmy 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ółowoStruktury danych: stos, kolejka, lista, drzewo
Struktury danych: stos, kolejka, lista, drzewo Wykład: dane w strukturze, funkcje i rodzaje struktur, LIFO, last in first out, kolejka FIFO, first in first out, push, pop, size, empty, głowa, ogon, implementacja
Bardziej szczegółowoSegmentacja 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ółowoDrzewa 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ółowoTEORETYCZNE PODSTAWY INFORMATYKI
1 TEORETYCZNE PODSTAWY INFORMATYKI WFAiS UJ, Informatyka Stosowana I rok studiów, I stopień Wykład 14c 2 Definicje indukcyjne Twierdzenia dowodzone przez indukcje Definicje indukcyjne Definicja drzewa
Bardziej szczegółowoTeoria grafów podstawy. Materiały pomocnicze do wykładu. wykładowca: dr Magdalena Kacprzak
Teoria grafów podstawy Materiały pomocnicze do wykładu wykładowca: dr Magdalena Kacprzak Grafy zorientowane i niezorientowane Przykład 1 Dwa pociągi i jeden most problem wzajemnego wykluczania się Dwa
Bardziej szczegółowoDynamiczny 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ółowoSztuczna Inteligencja i Systemy Doradcze
Sztuczna Inteligencja i Systemy Doradcze Przeszukiwanie przestrzeni stanów algorytmy ślepe Przeszukiwanie przestrzeni stanów algorytmy ślepe 1 Strategie slepe Strategie ślepe korzystają z informacji dostępnej
Bardziej szczegółowoAlgorytmy i Struktury Danych.
Algorytmy i Struktury Danych. Grafy dr hab. Bożena Woźna-Szcześniak bwozna@gmail.com Jan Długosz University, Poland Wykład 9 Bożena Woźna-Szcześniak (AJD) Algorytmy i Struktury Danych. Wykład 9 1 / 53
Bardziej szczegółowoDrzewa binarne. Drzewo binarne to dowolny obiekt powstały zgodnie z regułami: jest drzewem binarnym Jeśli T 0. jest drzewem binarnym Np.
Drzewa binarne Drzewo binarne to dowolny obiekt powstały zgodnie z regułami: jest drzewem binarnym Jeśli T 0 i T 1 są drzewami binarnymi to T 0 T 1 jest drzewem binarnym Np. ( ) ( ( )) Wielkość drzewa
Bardziej szczegółowoZASADY PROGRAMOWANIA KOMPUTERÓW ZAP zima 2014/2015. Drzewa BST c.d., równoważenie drzew, kopce.
POLITECHNIKA WARSZAWSKA Instytut Automatyki i Robotyki ZASADY PROGRAMOWANIA KOMPUTERÓW ZAP zima 204/205 Język programowania: Środowisko programistyczne: C/C++ Qt Wykład 2 : Drzewa BST c.d., równoważenie
Bardziej szczegółowoGrafy (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ółowoReprezentacje 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ółowoMatematyczne 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ółowo7. Teoria drzew - spinanie i przeszukiwanie
7. Teoria drzew - spinanie i przeszukiwanie Grzegorz Kosiorowski Uniwersytet Ekonomiczny w Krakowie zima 2016/2017 rzegorz Kosiorowski (Uniwersytet Ekonomiczny 7. wteoria Krakowie) drzew - spinanie i przeszukiwanie
Bardziej szczegółowoG. 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ółowoZadanie 1: Piętnastka
Informatyka, studia dzienne, inż. I st. semestr VI Sztuczna Inteligencja i Systemy Ekspertowe 2010/2011 Prowadzący: mgr Michał Pryczek piątek, 12:00 Data oddania: Ocena: Grzegorz Graczyk 150875 Marek Rogalski
Bardziej szczegółowoTEORIA 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ółowoProblem skoczka szachowego i inne cykle Hamiltona na szachownicy n x n
i inne cykle Hamiltona na szachownicy n x n Uniwersytet Warszawski 15 marca 2007 Agenda 1 2 naiwne Prosty algorytm liniowy 3 Problem znany był już od bardzo dawna, jako łamigłówka logiczna. Był też stosowany
Bardziej szczegółowoAlgorytmy Grafowe. dr hab. Bożena Woźna-Szcześniak, prof. UJD. Wykład 5 i 6. Uniwersytet Humanistyczno-Przyrodniczy im. Jana Długosza w Częstochowie
Algorytmy Grafowe dr hab. Bożena Woźna-Szcześniak, prof. UJD Uniwersytet Humanistyczno-Przyrodniczy im. Jana Długosza w Częstochowie b.wozna@ujd.edu.pl Wykład 5 i 6 B. Woźna-Szcześniak (UJD) Algorytmy
Bardziej szczegółowoDrzewa 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ółowoPrzypomnij sobie krótki wstęp do teorii grafów przedstawiony na początku semestru.
Spis treści 1 Drzewa 1.1 Drzewa binarne 1.1.1 Zadanie 1.1.2 Drzewo BST (Binary Search Tree) 1.1.2.1 Zadanie 1 1.1.2.2 Zadanie 2 1.1.2.3 Zadanie 3 1.1.2.4 Usuwanie węzła w drzewie BST 1.1.2.5 Zadanie 4
Bardziej szczegółowoZnajdowanie 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ółowoUniwersytet 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ółowoPorzą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ółowoMetoda podziału i ograniczeń
Seminarium: Algorytmy heurystyczne Metoda podziału i ograniczeń Mateusz Łyczek Wrocław, 16 marca 011 r. 1 Metoda podziału i ograniczeń Metoda podziału i ograniczeń służy do rozwiązywania problemów optymalizacyjnych.
Bardziej szczegółowoTemat: Struktury danych do reprezentacji grafów. Wybrane algorytmy grafowe.
Temat: Struktury danych do reprezentacji grafów. Wybrane algorytmy grafowe. Oznaczenia G = V, E - graf bez wag, gdzie V - zbiór wierzchołków, E- zbiór krawdzi V = n - liczba wierzchołków grafu G E = m
Bardziej szczegółowoMatematyczne 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ółowoAbstrakcyjne struktury danych - stos, lista, drzewo
Sprawozdanie Podstawy Informatyki Laboratoria Abstrakcyjne struktury danych - stos, lista, drzewo Maciej Tarkowski maciek@akom.pl grupa VII 1/8 1. Stos Stos (ang. Stack) jest podstawową liniową strukturą
Bardziej szczegółowoWstęp do programowania
Wstęp do programowania Algorytmy zachłanne, algoritme Dijkstry Paweł Daniluk Wydział Fizyki Jesień 2013 P. Daniluk(Wydział Fizyki) WP w. XI Jesień 2013 1 / 25 Algorytmy zachłanne Strategia polegająca na
Bardziej szczegółowoEgzaminy 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
Bardziej szczegółowo. 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ółowoAlgorytmy 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ółowoWYŻ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ółowoEGZAMIN - 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ółowoTEORIA GRAFÓW I SIECI
TEORIA GRAFÓW I SIECI Temat nr 3: Marszruty, łańcuchy, drogi w grafach 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ółowoAlgorytmy mrówkowe. H. Bednarz. Wydział Informatyki Zachodniopomorski Uniwersytet Technologiczny w Szczecinie Inteligentne systemy informatyczne
Algorytmy mrówkowe H. Bednarz Wydział Informatyki Zachodniopomorski Uniwersytet Technologiczny w Szczecinie Inteligentne systemy informatyczne 13 kwietnia 2015 1 2 3 4 Przestrzeń poszukiwań Ograniczenia
Bardziej szczegółowoMetody getter https://www.python-course.eu/python3_object_oriented_programming.php 0_class http://interactivepython.org/runestone/static/pythonds/index.html https://www.cs.auckland.ac.nz/compsci105s1c/lectures/
Bardziej szczegółowoMatematyka 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ółowoMarek 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ółowoPodejście zachłanne, a programowanie dynamiczne
Podejście zachłanne, a programowanie dynamiczne Algorytm zachłanny pobiera po kolei elementy danych, za każdym razem wybierając taki, który wydaje się najlepszy w zakresie spełniania pewnych kryteriów
Bardziej szczegółowo