Wstęp do Grafiki Komputerowej i Geometrii Obliczeniowej

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

Download "Wstęp do Grafiki Komputerowej i Geometrii Obliczeniowej"

Transkrypt

1 Wstęp do Grafiki Komputerowej i Geometrii Obliczeniowej zima 16/17 Jakub Maksymiuk

2 Plan 1 Line segment intersection Problem 1 - analiza Algorytm naiwny Algorytm lepszy - Bentley Ottmann - przegląd Algorytm lepszy - Bentley Ottmann - struktury danych

3 Line segment intersection Motywacja - GIS (Geographic Information System): Mamy dwie mapy: dróg i rzek. Szukamy: mostów. Mamy dwie mapy: granice miast i lasów. Szukamy: szukamy lasów w miastach.

4 Line segment intersection Uproszczenie 1: Mapy składają się z odcinków.

5 Line segment intersection Uproszczenie 1: Mapy składają się z odcinków. Problem 1: Dla danego zbioru odcinków S podać punkty przecięcia oraz pary odcinków przecinających się.

6 Line segment intersection Uproszczenie 1: Mapy składają się z odcinków. Problem 1: Dla danego zbioru odcinków S podać punkty przecięcia oraz pary odcinków przecinających się. Problem2 : Dla danego zbioru wielokątów S podać punkty przecięcia oraz pary wielokątów (i odcinków) przecinających się.

7 Line segment intersection Uproszczenie 1: Mapy składają się z odcinków. Problem 1: Dla danego zbioru odcinków S podać punkty przecięcia oraz pary odcinków przecinających się. Problem2 : Dla danego zbioru wielokątów S podać punkty przecięcia oraz pary wielokątów (i odcinków) przecinających się. Uproszczenie 2: Zamiast dwóch zbiorów będziemy rozpatrywać jeden, po rozwiazaniu problemu trzeba odfiltrować szukane odpowiedzi.

8 Rysunek: Prosty problem

9 Rysunek: Też łatwy? Odcinki: 100, Przecięć: 1077, Max: 4950

10 Line segment intersection Jak reprezentować odcinki? Czy odcinki są domknięte? Jak sprawdzić czy dwa odcinki się przecinają? Jeżeli wiemy, że dwa odcinki się przecinają, jak wyliczyć punkt przecięcia? Co zrobić z odcinkami równoległymi?

11 Line segment intersection Odcinki reprezentujemy jako ich końce. Odcinki są domkniete. Problem testowania i znajdowania punktów przecięcia ćwiczenia, teraz przyjmujemy, że umiemy. Odcinki równoległe później.

12 Line segment intersection Algorithm 1 NaiveSegInt(S) Input: Zbiór odcinków S Output: Lista puntów przecięcia wraz o odcinkami. 1: for każda para odcinków do 2: if Przecinają się then 3: Znajdź punkt przecięcia. Dodaj punkt i odcinki do listy. 4: end if 5: end for

13 Line segment intersection Trzeba wykonać (n 2 n)/2 testów, złożoność O(n 2 ) Nawet jeżeli żadne dwa odcinki się nie przecinają. Zauważmy, że algorytm nie wymaga dodatkowej pamięci do przechowywania danych.

14 Line segment intersection Trzeba wykonać (n 2 n)/2 testów, złożoność O(n 2 ) Nawet jeżeli żadne dwa odcinki się nie przecinają. Zauważmy, że algorytm nie wymaga dodatkowej pamięci do przechowywania danych. zauważmy, że w pesymistycznym przypadku (wszystkie odcinki się przecinają) (n 2 n)/2 testów jest konieczne. W praktyce: dużo odcinków się nie przecina. Chcielibyśmy algorytm, działający szybciej, gdy jest mało przecięć. (czyli output-sensitive)

15 Line segment intersection Obserwacja 1 Jeżeli odcinki są daleko, to się nie przecinają. Jeżeli rzuty odcinków na oś Y nie zachodzą na siebie, to odcinki nie przecinają się. Wystarczy zatem testować pary odcinków, których rzuty na siebie zachodzą.

16 Line segment intersection Obserwacja 1 Jeżeli odcinki są daleko, to się nie przecinają. Jeżeli rzuty odcinków na oś Y nie zachodzą na siebie, to odcinki nie przecinają się. Wystarczy zatem testować pary odcinków, których rzuty na siebie zachodzą. Jak znaleźć takie pary?

17 Line segment intersection

18 Line segment intersection Sweeping line, plane sweeping algorithm Wyobraźmy sobie prostą l : y = a przesuwającą się z góry na dół. status lista odcinków przecinających l

19 Line segment intersection Sweeping line, plane sweeping algorithm Wyobraźmy sobie prostą l : y = a przesuwającą się z góry na dół. status lista odcinków przecinających l status zmienia się podczas przesuwania event point punkt w którym zmienia się status

20 Line segment intersection 1: przetważaj event point od góry 2: if event point = górny koniec odcinka then 3: dodaj odcinek do status 4: testuj przecięcie z odcinkami w status 5: else // event point = dolny koniec odcinka 6: usuń odcinek z status 7: end if

21 Line segment intersection 1: przetważaj event point od góry 2: if event point = górny koniec odcinka then 3: dodaj odcinek do status 4: testuj przecięcie z odcinkami w status 5: else // event point = dolny koniec odcinka 6: usuń odcinek z status 7: end if W tym wypadku nadal możemy być zmuszeni wykonać na darmo wszystkie testy.

22 Line segment intersection ograniczymy się do testowania tylko odcinków sąsiadujących w poziomie zmiana statusu oznacza zmianę sąsiadów status uporządkowana od lewej lista odcinków przecinających l nowy typ event point: punkt przecięcia

23 Line segment intersection 1: przetważaj event point w porządku od góry, od lewej 2: if event point = górny koniec odcinka then 3: dodaj odcinek do status 4: testuj przecięcie z sąsiadami 5: else if event point = dolny koniec odcinka then 6: usuń odcinek z status 7: przetestuj nowych sąsiadów 8: else // event point = punkt przecięcia 9: zamień sąsiadów i przetestuj 10: end if 11: if jest przecięcie poniżej bierzacego punktu then 12: wstaw nowy event point, jeżeli jeszcze go nie ma, tak aby zachować porządek od góry, od lewej 13: end if

24 Line segment intersection event point = górny koniec odcinka

25 Line segment intersection event point = punkt przecięcia

26 Line segment intersection event point = dolny koniec odcinka

27 Line segment intersection Algorytm jest prawidłowy przy założeniu, że nie ma odcinków poziomych dwa odcinki przecinają się w conajwyżej jednym punkcie przecinają się tylko dwa odcinki na raz

28 Line segment intersection Trick na odcinki poziome Przyjmujemy, że lewy koniec jest końcem górnym. W ten sposób zachowujemy porządek: od góry, od lewej.

29 Line segment intersection Podczas wykonywania tego algorytmu musimy przechowywać dane: event points i status Szybkość działania algorytmu zależy od szybkości operacji na strukturach danych, np.: wstawiania, wyszukiwania, usuwania. Czas wykonania operacji na strukturach danych jest kluczowy.

30 Line segment intersection Event queue Q Ta struktura przechowuje event points, wraz z odcinkami które ich dotyczą. Potrzebujemy: relacji porządkującej: od góry, od lewej operacji wstawiania, usuwania (dokładniej - fetch), wyszukiwania Taką strukturę (kolejkę) można zaimplementowac korzystając z balanced Binary Search Tree, z czasem wstawiania i usuwania O(log m), m - liczba elementów kolejki

31 Line segment intersection Status T T struktura przechowuje odcinki przecinające l w kolejności od lewej w taki sposób aby można było łatwo(szybko) podać sąsiadów. Potrzebujemy: realcji porządkujacej: od lewej Szybkiego wstawiania, usuwania, wyszukiwania Ponownie, możemy zaimplementować T za pomocą BST.

32 Line segment intersection OBRAZEK dla Q oraz T

33 Line segment intersection Korzystanie z T Liście przechowują odcinki Węzły przechowją najbardziej prawy liść z lewego poddrzewa wyszukiwanie sąsiadów: OBRAZEK

34 Line segment intersection Algorithm 2 SegInt(S) Input: Zbiór odcinków S Output: Lista puntów przecięcia wraz o odcinkami. 1: Utwórz Q i dodaj końce odcinków, 2: Utwórz T 3: while Q jest niepuste do 4: Pobierz (fetch) następny event point p z Q 5: HandleEventPoint(p) 6: end while Algorytm HandleEventPoint został naszkicowany wcześniej (bez uwzględnienia przyadków zdegenerowanych)

35 Line segment intersection Podany algorytm (nawet po uwzględnieniu przypadków zdegenerowanych) działa w czasie O((n + I ) log n), używa O(n) pamięci, gdzie I jest liczbą przecięć.

36 Plan 2 Line segment intersection 2 Analiza Doubly-connected edge list Problem jeszcze raz Algorytm Algorytm - nowa lista wierzchołków i pół-krawędzi Algorytm - nowa lista ścian Algorytm - podsumowanie Zastosowania

37 Analiza Problem2 (przypomnienie): Dla danego zbioru wielokątów S podać punkty przecięcia oraz pary wielokątów (i odcinków) przecinających się.

38 Analiza Problem2 (przypomnienie): Dla danego zbioru wielokątów S podać punkty przecięcia oraz pary wielokątów (i odcinków) przecinających się. Uproszczenie Zamiast zbioru wielokątów rozważamy graf planarny, a dokładnie jego zanurzenie w płaszczyźnę. Krawędzie zanurzamy jako linie proste. Takie zanurzenie indukuje podział płaszczyzny na wielokąty.

39 Analiza Jak reprezentować taki podział płaszczyzny 1 Możliwość pierwsza, przechowywać jadną z trzech poniższych lista wierzchołków lista krawędzi lista ścian

40 Analiza Jak reprezentować taki podział płaszczyzny 1 Możliwość pierwsza, przechowywać jadną z trzech poniższych lista wierzchołków lista krawędzi lista ścian Cieżko otrzymać informacje topologiczne, np.: co z czym graniczy, brzeg danego obszaru itd.

41 Analiza Jak reprezentować taki podział płaszczyzny 2 Możliwość druga listy: wierzchołków, krawędzi, ścian lista informacji topologicznych, tzn. co z czym się łączy i graniczy

42 Analiza Jak reprezentować taki podział płaszczyzny 2 Możliwość druga listy: wierzchołków, krawędzi, ścian lista informacji topologicznych, tzn. co z czym się łączy i graniczy Trzeba wybrać strukturę danych, która przechowuje powyższe informacje zajmuje jak najmniejszą ilość pamięci jest wydajna

43 Doubly-connected edge list Będziemy przechowywać trzy listy: lista wierzchołków listę krawędzi, a dokładniej pół-krawędzi listę ścian każdy element tych list będzie zawierać informacje topologiczne

44 Doubly-connected edge list Reprezentacja krawędzi Każda krawedź jest brzegiem dwóch ścian. Każdą krawędź traktujemy jako dwie pół-krawędzie. Każda z nich ogranicza jedną ścianę.

45 Doubly-connected edge list Reprezentacja krawędzi Każda krawedź jest brzegiem dwóch ścian. Każdą krawędź traktujemy jako dwie pół-krawędzie. Każda z nich ogranicza jedną ścianę. orientację pół-krawędzi - ściana którą ogranicza pół-krawędź leży po lewej stronie. mamy w ten sposób zdefiniowany początkowy i końcowy wierzchołek pół-krawędzi

46 Doubly-connected edge list Reprezentacja krawędzi Każda krawedź jest brzegiem dwóch ścian. Każdą krawędź traktujemy jako dwie pół-krawędzie. Każda z nich ogranicza jedną ścianę. orientację pół-krawędzi - ściana którą ogranicza pół-krawędź leży po lewej stronie. mamy w ten sposób zdefiniowany początkowy i końcowy wierzchołek pół-krawędzi następnik e jest to pół-krawędź zaczynajaca się w końcowym wierzchołku e, ograniczajaca tą samą ścianę.

47 Doubly-connected edge list Dla pół-krawędzi (half-edge) e = v w definiujemy Origin( e ) = v Twin( e ) = w v Destination( e ) = Origin(Twin( e ) Next( e ) Prev( e ) IncidentFace(e)

48 Doubly-connected edge list Reprezentacja ściany Aby powiedzieć jaki jest zewnętrzny brzeg danej ściany, wystarczy podać jedną pół-krawędź z jej brzegu, a następnie przegladać Next().

49 Doubly-connected edge list Reprezentacja ściany Aby powiedzieć jaki jest zewnętrzny brzeg danej ściany, wystarczy podać jedną pół-krawędź z jej brzegu, a następnie przegladać Next(). Sciany mogą mieć dziury. Aby powiedzieć jaki jest brzeg dziury należy podać jedna pół-krawedź z jej brzegu i przegladać Prev(). Dla kazdej dziury potrzebujemy jedną pół-krawedź.

50 Doubly-connected edge list Dla ściany f definiujemy OuterComponent(f ) = dowolna pół-krawędź zewnętrzna InnerComponents(f ) = lista pół-krawedzi dziur, jedna pół-krawedź dla każdej dziury

51 Doubly-connected edge list Reprezentacja wierzchołka Każdy wierzchołek jest opisany przez swoje współrzędne Każdy wierzchołek posiada pół-krawędzie, dla który jest on poczatkiem Ponieważ korzystamy z pól-krawędzi, aby podać wszystkie pół-krawedzie zaczynajace sie w danym wierzchołku wszystkie przylegajace ściany wystarczy podać jedna pół-krawedź

52 Doubly-connected edge list Dla wierzchołka v definiujemy Coordinates(v) IncidentEdge(v) - dovolna pół-krawędź taka, że Origin = v

53 Doubly-connected edge list Struktura danych lista wierzchołków, każdy rekord zawiera: Coordinates, InicdentEdge lista pół-krawedzi, każdy rekord zawiera: Origin, Twin, IncidentFace, Next, Prev lista ścian, każdy rekord zawiera: OuterComponent, InnerComponents

54 Doubly-connected edge list Uwagi Jakie dane przechowujemy: Coordinates(v) przechowuje dwie liczby InnerComponents przechowuje listę wszystkie pozostałe pola są wskaźnikami do rekordów Ilośc przechowywanych danych dla kazdego wierzchołka i krawedzi jest taka sama. Dla ściany zależy od topologii - liczba dziur - liniowo.

55 Doubly-connected edge list Uwagi Tak skonstruowana struktura danych pozwala przechowywać dodatkowe informacje, np.: wierzchołki: nazwy miast, rond, węzłów na autostradzie lub typ obiektu pół-krawędzie: nazwy ulic, informacja czy jest to droga jednokierunkowa, zamknięta, autostrada, etc., ściany: typ obszaru np.: miasto, las, pszenica, smoki, area51,

56 Doubly-connected edge list Uwagi Jeżeli nie chcemy przechowywać żadnych informacji, to możemy zrezygnować z listy wierzchołków. Wtedy Origin(e) = Coordinates(Origin(e)) Możemy także zrezygnować z listy ścian (np.: w przypadku sieci dróg).

57 Problem jeszcze raz Mamy dane dwa podziały płaszczyzny (grafy planarne) S 1, S 2. Znaleźć nowy podział płaszczyzny (overlay) O(S 1, S 2 ) taki, że f O(S 1, S 2 ) jest ścianą istnieją ściany f 1 S 1, f 2 S 2, takie, że f jest maksymalnym spójnym podzbiorem f 1 f 2

58 Problem jeszcze raz Majac dane struktury związane z S 1 i S 2 pdoać strukturę w O(S 1, S 2 ) w której z każdę krawędzią zwiazana jest informacja o ścianach z S 1 i S 2, które zawierają tą krawędź. W ten sposób możemy określić jakie informacje są zwiazane z częścią wspólną tych ścian.

59 Algorytm Połączmy listy S 1 i S 2. Zauważmy, że obrazek O zawiera w zasadzie takie same pół-krawedzie jak S 1 i S 2. Brakuje wierzchołków odpowiadających punktom przecięcia.

60 Algorytm Połączmy listy S 1 i S 2. Zauważmy, że obrazek O zawiera w zasadzie takie same pół-krawedzie jak S 1 i S 2. Brakuje wierzchołków odpowiadających punktom przecięcia. Niektóre z pół-krawędzi są podzielone na części w punktach przecięcia krawędzi z tych dwóch list. każdy punkt przecięcia jest prawidłowym wierzchołkiem Każda taka część jest prawidłową pół krawędzią (orientacja, następnik itd.).

61 Algorytm Musimy zatem naprawić strukturę O(S 1, S 2 ), tzn.: utworzyć nowe lub zaktualizować rekordy dla wierzchołków - znaleźć punkty przecięcia pół-krawędzi (i usunać stare rekordy). ścian

62 Algorytm - nowa lista wierzchołków i pół-krawędzi Będziemy korzystać z algorytmu SegInt dla odcinków tworzących krawędzie S 1 i S 2 Q kolejka eventów i T drzewo status - takie jak w SegInt każde znalezione przecięcie jest wierzchołkiem w O(S 1, S 2 ), Ponadto mamy D - struktura opisana wyżej, zawiera informacje skopiowane z S 1 i S 2

63 Algorytm - nowa lista wierzchołków i pół-krawędzi Będziemy korzystać z algorytmu SegInt dla odcinków tworzących krawędzie S 1 i S 2 Q kolejka eventów i T drzewo status - takie jak w SegInt każde znalezione przecięcie jest wierzchołkiem w O(S 1, S 2 ), Ponadto mamy D - struktura opisana wyżej, zawiera informacje skopiowane z S 1 i S 2 dodatkowo w T wraz z każdą krawędzią przechowujemy informację o odpowiadających jej pół-krawędziom umożliwi to zaktualizowanie D gdy SegInt napotka punkt przecięcia

64 Algorytm - nowa lista wierzchołków i pół-krawędzi Co zrobić, gdy SegInt napotka event point? jeżeli event dotyczy tylko odcinków z S 1 albo S 2 nie trzeba nic robić, jest to wierzhołek w tych siatkach jeżeli event dotyczy odcinków z obu podziałów trzeba poprawić D

65 Algorytm - nowa lista wierzchołków i pół-krawędzi Co się może zdażyć krawędź S 1 przechodzi przez wierzchołek S 2, lub na odwrót przecięcie krawędzi z dwóch podziałów wierzchołki z dwóch podziałów pokrywają się

66 Algorytm - nowa lista wierzchołków i pół-krawędzi e S 1 przechodzi przez v S 2 e musi zostać podzielona na dwie częsci (4 pół-krawędzie) należy utworzyć 2 nowe pół-krawędzie trzeba poprawić wpisy w dwóch istniejących pół-krawędziach trzeba poprawić wpisy w 4 pół-krawędziach z S 2, sąsiadach krawędzi e

67 Algorytm - nowa lista wierzchołków i pół-krawędzi e S 1 przechodzi przez v S 2 Input: e S 1, v S 2 Output: poprawione D (lokalnie) 1: e i e - półkrawędzie odpowiadające e // patrz obrazek 2: utwórz dwie nowe pół-krawędzie e 1, e 2, 3: Origin(e 1 ) = v, Origin(e 2 ) = v, 4: Twin(e ) = e 1, Twin(e ) = e 2, Twin(e 1 ) = e, Twin(e 2 ) = e 5: Next(e 1 ) = Next(e ), Next(e 2 ) = Next(e ) + uaktualnij Prev w Next(e i ) 6: Znajdź sąsiadów e, zaktualizuj Next i Prev // patrz obrazek 7: Znajdź sąsiadów e, zaktualizuj Next i Prev // patrz obrazek

68 Algorytm - nowa lista wierzchołków i pół-krawędzi e S 1 przecina f S 2 trzeba utworzyć nowy wierzchołek trzeba utworzyć 2 nowe pół-krawędzie dla e trzeba utworzyć 2 nowe pół-krawędzie dla f trzeba poprawić wpisy w 4 istniejących pół-krawędziach

69 Algorytm - nowa lista wierzchołków i pół-krawędzi e S 1 przecina f S 2 Input: e S 1, f S 2 Output: poprawione D (lokalnie) 1: e i e - półkrawędzie odpowiadające e // patrz obrazek 2: f i f - półkrawędzie odpowiadające e // patrz obrazek 3: utwórz nowy wierzchołek v 4: utwórz dwie nowe pół-krawędzie e 1, e 2 5: utwórz dwie nowe pół-krawędzie f 1, f 2 6: ustaw Origin = v dla e 1, e 2, f 1, f 2 7: ustaw Twin dla e 1, e 2, e, e i f 8: Dla każdej pół-krawedzi znajdz sąsiadów i ustaw Next i Prev

70 Algorytm - nowa lista wierzchołków i pół-krawędzi v S 1 pokrywa się z w S 2 trzeba usunąć w trzeba poprawić Origin dla pół-krawędzi z S 2 trzeba poprawić Next i Prev dla istniejacych krawędzi ALGORYTM Ćwiczenie

71 Algorytm - nowa lista wierzchołków i pół-krawędzi Po wykonaniu SegInt w powyzszy sposób D zawiera poprawne informacje o wierzchołkach i krawędziach. Można to wykonać w czasie O((n + k) log n), gdzie n - ilość krawędzi+wierzchołków+ścian S 1 i S 2, k - tak samo dla O(S 1, S 2 )

72 Algorytm - nowa lista ścian Dla każdej ściany w O(S 1, S 2 ) musimy utworzyć rekord, musimy to zrobić bazując na D dla każdej półkrawędzi musimy zaktualizować IncidentFace każda ściana w nowy podziale musi zawierać informacje o ścianach S 1, S 2, które ja zawierają to pozwoli wykorzystać wynik do znajdowania częsci wspólnych itd...

73 Algorytm - nowa lista ścian każda ściana ma swój zewnętrzny brzeg (cykl), złożony z pół-krawędzi przeglądając listę krawędzi w D, łatwo jest znaleźć wszystkie takie cykle trzeba zdecydować, czy taki cykl jest brzegiem ściany, czy raczej brzegiem dziury trzeba zdecydować które cykle (zewnętrzny i dziury) ograniczają tą samą ścianę

74 Algorytm - nowa lista ścian Czy cykl jest brzegiem ściany czy dziury? 1: znajdź najbardziej lewy wierzchołek cyklu i przylegajace pół-krawędzie e 1 i e 2 2: if (e 1, e 2 ) < π then 3: cykl jest brzegiem zewnętrznym 4: else 5: cykl jest brzegiem dziury 6: end if Zauważmy, że jeżeli cykl jest brzegiem dziury to Twin jest brzegiem zewnętrznym i na odwrót.

75 Algorytm - nowa lista ścian Które cykle ograniczają tą samą ścianę? Aby to stwierdzić budujemy graf G kazdy cykl jest reprezentowany przez wierzchołek mamy też wyimaginowany wierzchołek reprezentujacy ograniczenie całej mapy dwa wierzchołki są połączone krawędzią jeden z nich jest brzegiem dziury, a drugi posiada półkrawędzi bezpośrednio na lewo od najbardziej lewego wierzchołka pierwszego cyklu jeżeli takiej krawędzi nie ma, łączymy cykl z cyklem wyimaginowanym

76 Algorytm - nowa lista ścian Można wykazać, że każdy spójny podgraf G wyznacza cykle ograniczajace jedną ścianę. W łatwy sposób można teraz Uzupełnić InnerComponents oraz OuterComponent.

77 Algorytm - nowa lista ścian Jak skonstruować G? Podczas SegInt sprawdzamy jaka krąwędź leżeli bezpośrednio na lewo od wierzchołka należy zapamiętać tą informację po utworzeniu listy krawędzi i wierzchołków utworzyć węzły G przeglądając cykle pół-krawędzi dla każdego cyklu znaleźć najbardizej lewy wierzchołek i krawędź bezpośrednio na lewo połączyć odpowiadające węzły w G krawędzią można to zrobic wydajnie, jezeli dla kazdej krawędzi jej rekord będzie przechowywał informację o cyklu (węźle G) który ją zawiera

78 Algorytm - nowa lista ścian Jak podać ściany w S 1 i S 2 zawierajace ścianę w O(S 1, S 2 )? Niech v należy do ściany f O(S 1, S 2 ). Jeżeli v jest punktem przecięcia krawędzi z S 1 i S 2 wtedy możemy wykorzystać IncidentFace tych krawędzi Jeżeli v jest wierzchołkiem z (przykładowo) S 1 wtedy znamy ściane z S 1, trzeba wyznaczyć ścianę z S 2 która zawiera v Możemy to zrobić podczas wykonywania SegInt, wystarczy skorzystać z IncidentFace krawędzi należącej do S 2 bezpośrednio na lewo i zapamietac tą informację zatem w SegInt musimy wokonac dodatkową czynność - zapamietać ściany do których należy wierzchołek.

79 Algorytm - podsumowanie Input: podziały płaszczyzny S 1 i S 2 Output: nowy podział płaszczyzny O(S 1, S 2 ), zawierajacy informacje o pokrywaniu 1: Skopiuj listy wierzchołków i krawędzi z S 1 i S 2 do D 2: WYkonaj SegInt dla krawędzi z D, aktualizuj D jeżeli potrzeba, zapamiętaj informacje o najbardziej na lewo krawędzi i ścianie zawierającej kazdy wierzchołek 3: Wyznacz cykle, przeglądając D 4: Utwórz G 5: for każdy spójny podgraf G do 6: Utwórz nową ścianę f, przypisz OuterComponent, InnerComponents 7: Dla kazdej pół-krawędzi z OuterComponent ustaw IncidentFace 8: end for 9: zaktualizuj informację o ścianach zawierajacych ściany z O(S 1, S 2 )

80 Algorytm - podsumowanie Ten algorytm można zreaizować w czasie O((n + k) log n) został podany przez Bentleya i Ottmana w 1979 Istnieje algorytm O(n log n + k) potrzebujacy O(n) pamięci

81 Zastosowania wykrywanie przecięć dwóch siatek pokrywanie się (overlay) dwóch mapy operacje logiczne na wielokątach (CAD)

82 Plan 3 Polygon triangulation Problem i motywacja Traingulacja - analiza Monotone pieces Algorytm MakeMonotone Algorytm TriangulateMonotonePolygon

83 Problem i motywacja Dla dowolnego wielokąta podać jego podział na trójkąty. j.w. ale oszczędnie, tzn jak najmnije trójkatów. Dla do płaszczyzny na wielokaty podać odpowiadajacy mu oszczędny podział na trójkaty.

84 Problem i motywacja Art gallery problem Ilu strażników potrzeba aby pilnować galerii sztuki? Mając plan danego piętra w galerii sztuki, określić ilu nieruchomych strażników (kamer) potrzeba, aby każde miejsce było podobserwacją.

85 Problem i motywacja plan piętra - skomplikowany wielokąt zakładamy, że jest on jednospójny (brzeg jest spójny) kamera widzi każdy punkt który można połączyć odcinkiem leżacym wewnątrz wielokąta Ile potrzeba kamer? Odpowiedź zależy od ilości wierzchołków i samego wielokata. Dla dowolnego wypukłego wystarczy jedna kamera. Znalezienie minimalnej liczby kamer jest problemem NP-trudnym Zajmiemmy się przypadkiem pesymistycznym - ile najmniej kamer potrzeba aby chronić n-kąt.

86 Problem i motywacja Najłatwiejszym do upilnowania wielokatem jest trójkąt. Podzielimy wiec nasz wielokąt na trójkąty, czyli wykonamy triangulację: łączymy wierzchołki za pomocą przekątnych. każdy wierzchołek ma być użyty przekątne nie mogą sie przecinać Mając daną triangulację, w każdym trójkącie mozemy ustawić kamerę.

87 Problem i motywacja Twierdzenie Każdy jednospójny wielokąt posiada triangulację. Każda triangulacja n-kąta składa się z dokładnie n 2 trójkątów.

88 Problem i motywacja Zatem n 2 kamery wystarczą zawsze. Zauważmy, że jest to rozwiazanie mocno nie optymalne.

89 Problem i motywacja Zatem n 2 kamery wystarczą zawsze. Zauważmy, że jest to rozwiazanie mocno nie optymalne. Umieszczając kamerę na przekątnej możemy pilnować dwóch trójkatów. Dobrze wybierając przekatne możemy zredukować liczbę potrzebnych kamer do n/2

90 Problem i motywacja Zatem n 2 kamery wystarczą zawsze. Zauważmy, że jest to rozwiazanie mocno nie optymalne. Umieszczając kamerę na przekątnej możemy pilnować dwóch trójkatów. Dobrze wybierając przekatne możemy zredukować liczbę potrzebnych kamer do n/2 Umieszczając kamerę w wierzchołku możemy pilnować wszystkie trójkąty o tym wierzchołku.

91 Problem i motywacja Twierdzenie Każdy jednospójny n-kąt może być pilnowany przez n/3 kamer. Podane oszacowanie jest optymalnym oszacowaniem z góry. Rysunek: Tu potrzeba n/3 kamer

92 Problem i motywacja Korzystając z 3-kolorowania grafu dualnego do triangulacji można podać algorytm, który dla danej triangluacji podaje pozycje kamer w czasie liniowym.

93 Traingulacja - analiza Algorytm naiwny?

94 Traingulacja - analiza Algorytm naiwny? Algorytm rekurencyjny: trójkąt jest jest już striangulowany załóżmy, że umiemy podać triagulację m-kąta, m < n w n kącie znajdź przekątną, wyznacza ona podział wielokąta na dwa wielokaty o mniejszej liczbie wierzchołków. zastosuj algorytm do każdego z tych wielokątów

95 Traingulacja - analiza Jak znaleźc przekatną? Dla najbardziej na lewo położonego wierzchołka v spróbuj połączyć jego sąsiadów u, w przekątną. Jeżeli się nei uda (odcinek wychodzi z wielokata) połącz najbardziej lewy z wierzchołkiem najdalszym od wierzchołkiem leżacym wewnatrz trójkata vuw. Opisany algorytm działa w czasie n 2.

96 Traingulacja - analiza Czy można to zrobić szybciej? Triangulacja wielokąta wypukłego może być wykonana w czasie liniowym Niestety, podział wielokąta na wielokąty wypukłe jest tak samo trudny jak jego triagulacja. Potrzebujemy czegoś innego...

97 Monotone pieces Mówimy, że jednospójny wielokat jest y-monotoniczny, jeżeli część wspólna tego wielokąta i dowolnej prostej poziomej jest spójna: czyli zbiór pusty, punkt lub odcinek. Jeżeli wielokat jest y-monotoniczny, to poruszając się wzdłuż krawędzi od najwyższego wierzchołka w kierunku najniższego, zawsze poruszamy się w dół lub poziomo, a nigdy w górę.

98 Monotone pieces Poruszając się wzdłuż krawędzi welokąta, możemy napotkać wierzchołek w którym kierunek poruszania zmienia się z w dół na w górę (lub odwrotnie). taki wierzchołek nie może wystąpić w wielokacie monotonicznym w takich wierzchołkach będziemy dodawac przekątne, dzieląc w ten sposób wielokat na dwa nowe wierzchołek należy do obu nowych, jednak teraz kierunek ruchu się nie zmienia i monotniczność nie jest zepsuta

99 Monotone pieces Jekie typy wierzchołków możemy napotkać? Zależy to od położenia sąsiadów i kąta wewnętrznego. start vertex: sąsiedzi poniżej, kąt wewnętrzny < π split vertex: sąsiedzi poniżej, kąt wewnętrzny > π merge vertexe: sąsiedzi powyżej, kat wewnętrzny > π end vertex: sąsiedzi powyżej, kąt wewnętrzny < π regular: jeden sąsiad powyzej, drugi ponizej

100 Monotone pieces Mamy dany wielokąt P. uporządkujmy jego wierzchołki w kolejnosci przeciwnej do ruchu wskazówek zegara: v 1,..., v n oznaczmy krawędzie e i = v i v i+1, e n = v n v 1 Będziemy robić sweeping od góry do dołu. event points: wierzchołki, Q - kolejka piorytetowa żadne wierzchołki nie bedą dodawane, zatem możemy je posortować (w czasie logarytmicznym) od góry i od lewej. Wtedy dostep do kolejnego elementu jest w czasie stałym.

101 Monotone pieces Naszymm celem jest: dla kazdego split vertex dodać przekatną do wierzchołka leżacego powyżej dla każdego merge vertex dodać przekatną do wierzchołka leżacego poniżej

102 Monotone pieces Niech v i - split vertex. e j krawędź najbliżej na lewo e k krawędź najbliżej na prawo Możemy połączyć v i z wierzchołkiem leżacym najniżej, pomiędzy krawędziami e j i e k. W ostateczności taki wierzcołkiem jest górny koniec e j lub e k. Nazwijmy go helper(e j ). helper(e j ) wierzchołek leżący najniżej nad sweeping line taki, że poziomy odcinke łączący helper(e j ) i e j leży wewnątrz P.

103 Monotone pieces Podczas przesuwania sweeping line w dół, możemy zapamiętywać wierzchołki helper(e j ). Trudniej sytuacja wyglada, gdy napotykamy merge vertex, ponieważ wtedy potrzebujemy wierzchołka poniżej sweeping line. Czyli takiego, którego jescze nie napotkaliśmy.

104 Monotone pieces Zauważmy, że jeżeli v i jest merge vertex, a e j jest krawędzią najbliżej na lewo, to helper(e j ) = v i.

105 Monotone pieces Zauważmy, że jeżeli v i jest merge vertex, a e j jest krawędzią najbliżej na lewo, to helper(e j ) = v i. v i możemy połączyć z najwyżej leżacym wierzchołkiem poniżej sweeping line tego wierzchołka nie znamy w tym momencie, ale poznamy go wykonujac algorytm

106 Monotone pieces Zauważmy, że jeżeli v i jest merge vertex, a e j jest krawędzią najbliżej na lewo, to helper(e j ) = v i. v i możemy połączyć z najwyżej leżacym wierzchołkiem poniżej sweeping line tego wierzchołka nie znamy w tym momencie, ale poznamy go wykonujac algorytm gdy zdarzy się sytuacja, w której bedziemy zmieniać helper(e j ) wystarczy sprawdzić czy poprzedni heleper był merge vertex. jeżeli tak, to należy połączyć przekątną stary i nowy zauważmy, że tak dzieje sie gdy nowy helepr jest split vertex, jeżeli helper(e j ) się nie zmieni wtedy trzeba go połączyć z dolnym wierzchołkiem e j

107 Monotone pieces Kolejny element do sweeping: status: drzewo binarne T przechowujemy krawędzie od góry i od lewej razem z każdą krawędzią przechowujemy jej helper wystarczy przechowywac te krawędzie, dla których P leży po prawej stronie

108 Monotone pieces Kolejny element do sweeping: status: drzewo binarne T przechowujemy krawędzie od góry i od lewej razem z każdą krawędzią przechowujemy jej helper wystarczy przechowywac te krawędzie, dla których P leży po prawej stronie status zmienia się, gdy nowa krawędź zaczyna przecinać sie ze sweeping line zmienia się helper krawedzi, która jest w T

109 Algorytm MakeMonotone D - lista wierzchołków i krawędzi (jak na poprzednim wykładzie) Q - event queue T - status Jeżeli do P zostanie dodana przekatna, to dodamy ją do D. Po zakończeniu algorytmu D bedzie przechowywać podział P an wielokąty monotoniczne. Każdy z tych wielokatów może być łatwo wyciągniety z D (Czyli jak?)

110 Algorytm MakeMonotone Algorithm 3 MakeMonotone(P) Input: jednospójny wielokąt P, przechowywany w D Output: podział P na wielokąty monotoniczne, przechowywany w D 1: Skonstruuj Q, umieszczająć wierzchołki od góry od lewej 2: Utwórz puste drzewo T 3: while Q nie jest pusta do 4: Usuń wierzchołek o najwyzszym priorytcie z Q 5: Wykonaj odpowiednią procedurę Handle{type}Vertex w zależności od typu wierzchołka 6: end while

111 Algorytm MakeMonotone Algorithm 4 HandleStartVertex(v i ) 1: Dodaj e i do T 2: helper(e i ) = v i Algorithm 5 HandleEndVertex(v i ) 1: if helper(e i 1 ) == merge vertex then 2: Dodaj przekątną łączącą v i z helper(e i 1 ) 3: end if

112 Algorytm MakeMonotone Algorithm 6 HandleSplitVertex(v i ) 1: wyszukaj w T krawędź e j najbliżej na lewo od v i 2: wstaw przekatną łączącą v i oraz helper(e j ) 3: helper(ej) = v i 4: Dodaj e i do T 5: helper(e i ) = v i

113 Algorytm MakeMonotone Algorithm 7 HandleMergeVertex(v i ) 1: if helper(e i 1 )==merge vertex then 2: wstaw przekątną łączącą v i oraz helper(e i 1 ) 3: end if 4: usuń e i 1 z T 5: Znajdż w T krawędź e j najbliżej na lewo od v i 6: if helper(e j )==merge vertex then 7: wstaw przekątną łączącą v i oraz helper(e j ) 8: end if 9: helper(e j ) = v i

114 Algorytm MakeMonotone Algorithm 8 HandleRegularVertex(v i ) 1: if Wnętrze P leży na prawo od v i then 2: if helper(e i 1 ) == merge vertex then 3: dodaj przekątną łączącą v i oraz helper(e i 1 ) 4: end if 5: usuń e i 1 z T 6: dodaj e i do T 7: helper(e i ) = v i 8: else 9: znajdź w T krawędź e j leżącą bezpośrednio na lewo od v i 10: if helper(e j )==merge vertex then 11: dodaj przekątną łączącą v i oraz helper(e j ) 12: end if 13: helper(e j ) = v i 14: end if

115 Algorytm MakeMonotone Twierdzenie Algorytm MakeMonotone(P) dzieli jednospójny wielokąt na monotoniczne częsci w czasie O(n log n) używając O(n) dodatkowej pamięci.

116 Algorytm TriangulateMonotonePolygon Bedziemy wykorzystywać pomocniczą strukturę danych - stos: dostęp tylko do ostatniego dodanego elementu, LIFO pop() - pobiera element ze szczytu stosu push(v) - odkłada element v na szczyt stosu Na stosie bedziemy przechowywać odwiedzone wierzchołki, które potrzebują jeszcze przekątnych.

117 Algorytm TriangulateMonotonePolygon Robimy sweeping od góry do dołu Jeżeli napotkamy wierzchołek, dodajemy tyle przekatnych ile jesteśmy w stanie. Część z dodanych przekątnych oddziela trójkaty od P Napotkane wierzchołki, które nie zostały odzielone odkładamy na stos. potrzebują przekątnych, bo znajdują się w tej cześci która musi być podzielona.

118 Algorytm TriangulateMonotonePolygon OBRAZKI

119 Algorytm TriangulateMonotonePolygon Algorithm 9 TriangulateMonotonePolygon(P) Input: wielokąt monotoniczny P, przechwywany w D Output: triangulacja P, przechowywana w D 1: uporządkuj wierzchołki P od góey i od lewej, u 1,..., u n 2: odłóż na stos u 1 i u 2 3: for j=3 to n-1 do 4: if u j i wierzchołek stosu leżą po różnych stronach then 5: pobierz wszystkie wierzchołki ze stosu 6: dla każdego pobranego wierzchołka, połącz go przekątną z u j, z wyjątkiem ostatniego 7: odłóż na stos u j i oraz u j 8: else 9: Pobierz wierzchołek ze stosu 10: Pobieraj wierzchołki ze stosu dopóki przekątne od u j do pobranego wierzchołka leżą w P 11: odłóż ostatni zabrany ze stosu wierzchołek spowrotem na stos 12: odłóż u j na stos 13: end if 14: end for 15: Dodaj przekątne z u n do wszystkich wierzchołków na stosie, pomijajac ostatni.

120 Algorytm TriangulateMonotonePolygon Powyższy algorytm działa w czasie liniowym. Aby dokonać triagulacji dowolnego wielokąta trzeba najpierw podzielić go na monotoniczne części, a potem dokonać triagulacji każdej z nich. Dowolny jednospójny wielokąt może być striangulowany w czasie O(n log n) używając dodatkowo O(n) pamięci.

121 Algorytm TriangulateMonotonePolygon Miła informacja Algorytm MakeMonotone działa dla dowolnych wielokątów, nie tlko dla jednospójnych.

122 Algorytm TriangulateMonotonePolygon Miła informacja Algorytm MakeMonotone działa dla dowolnych wielokątów, nie tlko dla jednospójnych. Kolejna miła informacja Korzystając z powzszego algorytmu można dokonać triangulacji dowolngo podziału płaszczyzny.

123 Plan 4 Ortogonal Range Searching Motywacja

124 Motywacja przechowujemy duży zbiór rekordów: klienci, pracownicy, towary każdy rekord zawiera pewną liczbę pól, niektóre z nich mają specjalną własność: można je uporządkować liniowo ilość zakupionego towaru, wartość zakupionego towaru wiek, pensja, staż pracy cena, ilość RAM w komputerze, przekątna ekranu,

125 Motywacja Chcemy wyszukiwać rekordy które spełniają kryteria typu od... do, np.: pracownicy w wieku od 18 do 26 lat pracownicy w wieku od 50 do 67 lat, zatrudnieni ponad 10 lat, zarabiający mniej niż 2000PLN monitory w cenie od 500 do 1000 PLN laptopy, od 8GB do 16GB RAM i dyskiem od 240GB do 512 GB

126 Motywacja Każda z interesujacych nas cech jest opisana przez wartości liczbowe z pewnego przedziału. znalezienie rekordów spełniajacego wszystkie kryteria jest równoważne znalezieniu rekordów, dla których wartości interesujacych nas pól leżą w tych przedziałach czyli w pewnej d-wymiarowej kostce. Musimy wykonać: orthogonal range query

127 Plan 5 Przypadek 1D Problem 2D Algorytm BuildKdTree Algorytm SearchKdTree trick warty zapamiętania Drzewa przedziałowe Algorytm Build2DRangeTree Algorytm 2DRangeQuery

128 Motywacja Problem Mamy dany zbiór P punktów na prostej Znaleźć wszystkie punkty P należące do przedziału [a, b] proste rozwiazanie, algorytm naiwny: sprawdź każdy punkt, czas działanie O(n). chcemy rowiązanie szybsze najlepiej gdyby czas działania zależał od ilości pasujacych punktów (output-sensitive)

129 Motywacja Będziemy używać drzewa BST operacje w czasie log n W liściach przechowujemy punkty zbioru P W wężle v przechowujemy spliting value x v lewe poddrzewo v zawiera punkty mniejsze lub równe x v prawe poddrzewo zawiera punkty większe

130 Motywacja znalezienie punktów z przedziału [a, b] oznacza teraz podanie lisci z pewnego poddrzewa z uwagi na naturę BST łatwo jest znaleźć poddrzewo w którym są one zwarte zaczna się ono w wierzchołku v split, w którym drogi do a i b się rozchodzą

131 Motywacja znalezienie punktów z przedziału [a, b] oznacza teraz podanie lisci z pewnego poddrzewa z uwagi na naturę BST łatwo jest znaleźć poddrzewo w którym są one zwarte zaczna się ono w wierzchołku v split, w którym drogi do a i b się rozchodzą idąc od v split do a poruszamy się w lewo lub w prawo jeżeli skręcamy w lewo w v, to wszystkei liście w prawym poddrzewie są większe od a jeżeli skręcamy w prawo w v, to jego lewe poddrzewo jest nieistotne podobnie dla b

132 Motywacja Rozwiązanie problemu polega zatem na wykonaniu trzech kroków: 1 znleźć poddrzewo zawierajace punkty z szukanego przedziału 2 przeszukać jego lewe (prawe) poddrzewo, wyszukujac odpowiednie prawe (lewe) poddrzewa 3 wypisać wszystkie liscie ze znalezionych poddrzew

133 Motywacja Algorithm 10 FindSplitNode(a,b) Input: drzewo T j.w. i dwie wartości a b Output: wierzchołek v (najmniejszego) poddrzewa zawierajacego punkty z przedziału [a, b] 1: v = root(t ) 2: while v nie jest liściem and (b x v or a > x v ) do 3: if b x v then 4: v = leftchild(v) 5: else 6: v = rightchild(v) 7: end if 8: end while

134 Motywacja Algorithm 11 1DRangeQuery(a,b) Input: drzewo T j.w. i dwie wartości a b Output: punkty z przedziału [a, b] 1: v split = FindSplitNode(a, b) 2: if v split jest liściem then 3: jeżeli v split [a, b], to zwróć ten liść 4: else 5: v = leftchild(v split 6: while v nie jest liściem do 7: if a < x v then 8: wypisz liście z prawego poddrzewa v, v = leftchild(v) 9: else 10: v = rightchild(v) 11: end if 12: end while 13: sprawdź czy v należy do [a, b] 14: wykonaj analogiczne kroki dla prawego poddrzewa v split 15: end if

135 Motywacja wypisanie wszystkich liści z poddrzewa wykonuje sie w czasie liniowym O(k), k-liczba znalezionych punktów w pesymistycznym przypadku (wszystkei punkty należą) czas jest liniowy Twierdzenie Podany algorytm działa w czasie O(logn + k), potrzebuje O(n log n) czasu na utworzenie drzewa i O(n) pamięci na przechowywanie.

136 Problem 2D Mamy dany zbiór P punktów na płaszczyźnie, zakładamy (na chwilę), że żadne dwa punkty nei maja takiej samej pierwszej ani drugiej współrzędnej. szukamy punktów należących do prostokąta [a, b] [c, d] Zasadniczo, wykonamy ten sam algorytm co w 1D. Wyszukiwanie 2D jest dwukrotnym wyszukiwaniem 1D. Cchemy utrzymać lepszy niż liniowy czas wyszukiwania.

137 Problem 2D Wykorzystamy zadsadę dziel na pół dzielimy zbiór punktów na przemian linią pionową i poziomą podziału dokonujemy tak aby po każdej stronie linii znalazło się tyle samo punktów (czyli szukamy mediany) punkt na linii traktujemy jako punkt leżący po lewej (dolnej) stronie linii

138 Problem 2D Będziemy korzystać z dwuwymiarowego kd-drzewa, które jest drzewem binarnym, tylko skonstruowanym sprytnie: wierzchołki przechowują proste, które dzielą na połowy liście przechowują punkty płaszczyzny wierzchołki o nieparzystej głębokości przechowują pionowe linie podziału wierzchołki o parzystej głębokości przechowują poziome linie podziału

139 Problem 2D OBRAZEK

140 Problem 2D

141 Algorytm BuildKdTree Algorithm 12 BuildKdTree(P,depth) Input: Zbiór punktów P i głębokość depth Output: korzeń kd-drzewa 1: if P zawiera jeden punkt then 2: dodaj ten punkt i zwróć jego wierzchołek 3: else 4: if depth jest parzysta then 5: podziel P linią pionowa równe zbiory P 1 (lewy) i P 2 (prawy) 6: else 7: podziel P linią poziomą równe zbiory P 1 (dolny) i P 2 (górny) 8: end if 9: v left = BuildKdTree(P 1, depth + 1) 10: v right = BuildKdTree(P 2, depth + 1) 11: dodaj węzeł v dla bierzącej linii, 12: leftchild(v) = v left, rightchild(v) = v right 13: end if

142 Algorytm BuildKdTree twierdzenie Kd-drzewo potrzebuje O(n log n) czasu na utworzenie O(n) pamieci na przechowywanie.

143 Algorytm SearchKdTree poddrzewo o wierzchołku v zawiera punkty leżace w pewnym prostokącie (być może nieogranczonym) oznaczmy go przez region(v) punkty są przechowywane w lisciach poddrzewa wtedyi tylko wtedy, gdy należą do region(v)

144 Algorytm SearchKdTree poddrzewo o wierzchołku v zawiera punkty leżace w pewnym prostokącie (być może nieogranczonym) oznaczmy go przez region(v) punkty są przechowywane w lisciach poddrzewa wtedyi tylko wtedy, gdy należą do region(v) algorytm wyszukiwania polega na przegladaniu drzewa, szukamy tylko wierzchołków których region przecina się z prostokątem [a, b] [c, d] jeżeli region(v) [a, b] [c, d], wtedy zwracamy wszystkie liście jeżeli dotarliśmy do liścia, to sprawdzamy i ewentualnie zwracamy ten liść

145 Algorytm SearchKdTree Algorithm 13 SearchKdTree(v) Input: korzeń v drzewa skonstruowanego j.w. i prostokąt R Output: liście (punkty) należące do R 1: if v jest liściem then 2: zwróć v jeżeli należy do R 3: else 4: if region(leftchild(v)) R then 5: zwróć liście drzewa leftchild(v) 6: else if region(leftchild(v)) przecina R then 7: earchkdtree(leftchild(v), R) 8: end if 9: if region(rightchild(v)) R then 10: zwróć liście drzewa rightchild(v) 11: else if region(rightchild(v)) przecina R then 12: SearchKdTree(rightchild(v), R) 13: end if 14: end if

146 Algorytm SearchKdTree zadania na ćwiczenia jak sprawdzić, czy punkt jest w prostokacie (łatwe) jak wyznaczyc region(v) w trakcie wykonywania algorytmu jak wyznaczyć region(leftchild(v) i region(rightchild(v)) w trakcie trwania algorytmu

147 Algorytm SearchKdTree Twierdzenie Wyszukiwanie może być wykonane w czasie O( n + k).

148 Algorytm SearchKdTree Twierdzenie Wyszukiwanie może być wykonane w czasie O( n + k). Powyższy algorytm można uogólnić na d wymiarów uzywając do podziału hiperpłaszczyzn zamiast prostych. Wtedy czas wykonania tego algorytmu wynosi O(n 1 1/d + k).

149 trick warty zapamiętania zalożenie, że żadne dwa punkty nie mają takiej samej pierwszej ani takiej samej drugie wspólrzędnej jest bzdurą, w realnym świecie wiele cech jest takich samych. Zamiast punktu p = (x, y) rozpatrujemy punkt ˆp = ((x, y), (y, x)) relacja porządkujaca współrzędne to porzadek leksykograficzny musimy na nowo zdefiniować R = [a, b] [c, d] ˆR = [(a, ), (b, )] [(c, ), (d, )] ćw. - zrozumieć powyższy zapis... dla takich danych możemy skostruowac 2-wymiarowe kd-drzewo i wykonać algorytm wyszukiwania w dokładnie ten sam sposób

150 Drzewa przedziałowe Rozwiązanie problemu wyszukiwania na płaszczyznie w inny sposób: najpierw znajdziemy punkty których pierwsza wspólrzędna jest w przedziale [a, b] a potem bedziemy się martwić o druga współrzędna. Budujemy drzewo T tak jak w przypadku 1-wymiarowym, dla pierwszej współrzędnej z każdym węzłem v drzewa T stowarzyszamy drzewo T y (a). Jest to drzewo wszystkich liści w poddrzewie v uporządkowane względem drugiej współrzędnej. W nowym drzewie węzły przechowują nie tylko swoje wartości, ale takze wskaźniki do innej struktury danych.

151 Algorytm Build2DRangeTree Algorithm 14 Build2DRangeTree(P) Input: zbiór punktów na płaszczyźnie P Output: korzeń 2-wymiarowego drzewa przedziałowego 1: zbuduj drzewo T y dla zbioru P, w liściach przechowuj unkty zbioru P 2: if P zawiera jeden punkt then 3: utwórz liść zawierajacy v oraz T y (v) = T y 4: else 5: podziel P na dwa równe zbiory P left i P right względem pierwszej współrzędnej 6: v left = Build2DRangeTree(P left ) 7: v right = Build2DRangeTree(P right ) 8: utwórz węzeł dla v, leftchild(v) = v left, rightchild(v) = v right, T y (v) = T y 9: end if

152 Algorytm Build2DRangeTree Twierdzenie Drzewo przedziałowe może być utworzone w czasie O(n log n) i wymaga O(n log n) pamięci.

153 Algorytm 2DRangeQuery Algorithm 15 2DRangeQuery(P, [a, b]x[c, d]) Input: drzewo przedziałowe i prostokąt [a, b] [c, d] Output: punkty w przedziale 1: v split = FindSplitNode(T, a, b) 2: if v split jest liściem then 3: zwróć v split jeżeli należy do R 4: else 5: v = leftchild(v split ) 6: while v nie jest liściem do 7: if a x v then 8: 1DRangeQuery(T y (rightchild(v), c, d)) 9: v = leftchild(v) 10: else 11: v = rightchild(v) 12: end if 13: end while 14: zwróć v jeżeli należy do R 15: wykonaj analogicznie dla v = rightchild(v) 16: end if

154 Algorytm 2DRangeQuery twierdzenie Powyższy algorytm działa w czasie (log 2 n + k)

155 Algorytm 2DRangeQuery twierdzenie Powyższy algorytm działa w czasie (log 2 n + k) Konstrukcję drzewa przedziałowego można uogółnić na większa liczę przedziałów. Z kazdym wierzchołkiem m-tej współrzędnej trzeba stworyć drzewo przedziałowe dla m 1-współrzędnej. Można wykazać, że d wymiarowe drzewo przedziałowe potrzebuje O(n log d 1 n) pamięci, może być utworzone w czasie O(n log d 1 n), a wyszukiwanie może być wykonane w czasie O(log d n + k).

156 Plan 6 Point location Problem Pierwsza próba Drugie podejście Algorytm TrapezoidalMap(S) Przypadek zdegenerowany

157 Problem Problem Dany jest podział płaszczyzny na wielokąty oraz punkt. Stwierdzić do którego wielokąta należy dany punkt. Jeżeli leży na krawędzi/wierzchołku podać tą krawędź/ ten wierzchołek.

158 Problem Zastosowanie 1 statyczne: w jakim powiecie/działce znajduje się wskazany punkt 2 dynamiczne: w jakim obszarze (np.: zamknięty akwen, zakaz lotów) znajduje się statek/samolot Ostatnie zadanie... lepiej, żeby robić to często i szybko... Potrzebujemy zatem nie tyle algorytmu, co struktury danych pozwalającej na szybkie wyszukiwanie.

159 Pierwsza próba porządkujemy wierzchołki wg pierwszej współrzędnej, od lewej przez każdy wierzchołek prowadzimy pionową prostą, dzieląc płaszczyznę na pasy

160 Pierwsza próba porządkujemy wierzchołki wg pierwszej współrzędnej, od lewej przez każdy wierzchołek prowadzimy pionową prostą, dzieląc płaszczyznę na pasy W czasie O(log(n) można określić w którym pasie znajduje się szukany punkt (jak to zrobić?).

161 Pierwsza próba żaden wierzchołek nie leży wewnątrz pasa, czyli żadna krawędź nie zaczyna ani nie kończy się wewnątrz pasa ponadto, żadne dwie krawędzie nie przecinają się wewnątrz pasa w każdym pasie można uporządkować, przecinające go krawędzie od góry do dołu każdy obszar pomiędzy dwoma krawędziami należy do dokładnie jednej ściany albo należy do zewnętrza

162 Pierwsza próba 1: jeżeli nie zostało wykonane wcześniej: 2: podziel S na pasy 3: dla każdego pasa utwórz uporządkowaną (od góry) listę przecinających krawędzi 4: oznacz każdą krawędź przez ścianę leżąco powyżej (w tym zewnętrze) 5: WŁAŚCIWY ALGORYTM Input: podział płaszczyzny S na pasy wrz z krawędziami w tych pasach oraz punkt q Output: ściana, krawędź lub wierzchołek w którym leży punkt 6: znajdź pasek w którym leży punkt q 7: znajdź krawędź leżącą bezpośrednio pod q 8: jeżeli takiej krawędzi nie ma, to punkt leży na zewnątrz

163 Pierwsza próba podany algorytm działa w czasie logarytmicznym (dlaczego?) niestety, w pesymistycznym przypadku wymaga n 2 pamięci (n pasów n-krawędzi przecinających pas) łatwo podać taki przypadek (OBRAZEK) Pomimo, ze algorytm działa szybko, ilość dodatkowej pamięci jest zbyt duża (np.: systemy wbudowane, małe urządzenia)

164 Pierwsza próba jeżeli dokładnie przyjrzymy się obrazkowi, to zobaczymy, że utworzyliśmy drobniejszy podział płaszczyzny każda ściana nowego podziału zawiera się jednej ścianie starego okazuje się, że rozwiązaliśmy problem dla drobniejszego podziału płaszczyzny (stąd zapotrzebowanie na pamięć) Nowy pomysł: stworzyć taki podział płaszczyzny, który nie wymaga tyle pamięci, ale zachować, w jak największym stopniu, szybkość poprzedniego

165 Drugie podejście Uproszczenia: do istniejącego podziału płaszczyzny dodajemy prostokąt R zawierający ten podział żadne dwa punkty nie mają takiej samej pierwszej współrzędnej (to założenie jest, nie realistyczne i później trzeba je usunąć)

166 Drugie podejście Będziemy tworzyć trapezoidal map T (S), czyli podział płaszczyzny, który składa się z trapezów. podstawy trapezów są równoległe do osi y dopuszczamy sytuację, że jedna z podstaw jest zdegenerowana do punktu, czyli uważamy trójkąt za trapez

167 Drugie podejście Będziemy tworzyć trapezoidal map T (S), czyli podział płaszczyzny, który składa się z trapezów. podstawy trapezów są równoległe do osi y dopuszczamy sytuację, że jedna z podstaw jest zdegenerowana do punktu, czyli uważamy trójkąt za trapez Z każdego wierzchołka podziału S wyprowadzamy pionowe odcinki w górę i w dół, łączące wierzchołek z krawędzią pod i nad tym wierzchołkiem ( zawsze istnieje bo S jest zawarty w R) tutaj jest założenie o różnych pierwszych współrzędnych

168 Drugie podejście Będziemy tworzyć trapezoidal map T (S), czyli podział płaszczyzny, który składa się z trapezów. podstawy trapezów są równoległe do osi y dopuszczamy sytuację, że jedna z podstaw jest zdegenerowana do punktu, czyli uważamy trójkąt za trapez Z każdego wierzchołka podziału S wyprowadzamy pionowe odcinki w górę i w dół, łączące wierzchołek z krawędzią pod i nad tym wierzchołkiem ( zawsze istnieje bo S jest zawarty w R) tutaj jest założenie o różnych pierwszych współrzędnych do podziału S dodajemy te krawędzie dodajemy także nowe wierzchołki oraz tworzymy na nowo listę ścian OBRAZEK

169 Drugie podejście każda nowa ściana podziału T (S) jest ograniczona przez pewną liczbę krawędzi z T (S) sąsiadujące i współliniowe krawędzie ograniczające ścianę nazywamy jej bokiem Twierdzenie Każda ściana w T (S) posiada dokładnie jeden lub dwa pionowe boki oraz dokładnie dwa boki, które nie są pionowe. OBRAZEK

170 Drugie podejście każdy nie pionowy bok ściany jest zawarty w pewnej krawędzi S lub poziomym boku R bok ograniczający z góry oznaczamy top( ) bok ograniczający z dołu oznaczamy bottom( )

171 Drugie podejście Lewa krawędź ściany może być: 1 punktem wspólnym top( ) i bottom( ) 2 odcinkiem zaczynającym się w lewym wierzchołku top( ) kończącym się w bottom( ) 3 odcinkiem zaczynającym się w lewym wierzchołku bottom( ) kończącym się w top( ) 4 sumą dwóch odcinków zaczynających się w wierzchołku leżącym pomiędzy top( ) i botton( ) i kończącym się na tych bokach 5 jest lewą krawędzią R (dla dokładnie jednej ściany) OBRAZKI Dla prawego boku mamy analogiczne pięć sytuacji.

172 Drugie podejście W każdym z wymienionych przypadków, lewy bok jest definiowany przez pewien wierzchołek, będziemy go oznaczać leftp( ). Odpowiedni wierzchołek dla prawego boku będziemy oznaczać rightp( ).

173 Drugie podejście W każdym z wymienionych przypadków, lewy bok jest definiowany przez pewien wierzchołek, będziemy go oznaczać leftp( ). Odpowiedni wierzchołek dla prawego boku będziemy oznaczać rightp( ). Zauważmy, że każda ściana T (S) jest jednoznacznie wyznaczona przez top, bottom, leftp oraz rightp.

174 Drugie podejście Twierdznie Trapezoidal map T (S) dla podziału S złożonego z n krawędzi zawiera co najwyżej 6n + 4 wierzchołków oraz co najwyzej 3n + 1 ścian.

175 Drugie podejście Dwie ściany T (S) nazywamy sąsiadującymi, jeżeli mają wspólną pionową krawędź (nie bok!) ponieważ żadne dwa wierzchołki S nie miały takiej samej pierwszej współrzędnej, każda ściana posiada co najwyżej cztery sąsiadujące ściany. bez tego założenia mogłaby posiadać ich dowolnie dużo (OBRAZEK)

176 Drugie podejście Dwie ściany T (S) nazywamy sąsiadującymi, jeżeli mają wspólną pionową krawędź (nie bok!) ponieważ żadne dwa wierzchołki S nie miały takiej samej pierwszej współrzędnej, każda ściana posiada co najwyżej cztery sąsiadujące ściany. bez tego założenia mogłaby posiadać ich dowolnie dużo (OBRAZEK) Jeżeli jest ścianą sąsiadującą z lewej strony ze ścianą to mają one wspólny top lub bottom. w pierwszym przypadku nazywamy lewym górnym sąsiadem w drugim przypadku nazywamy lewym dolnym sąsiadem, może posiadać jednego lewego sąsiada, dwóch albo żadnego

Przecięcia odcinków. Wykład /07

Przecięcia odcinków. Wykład /07 Przecięcia odcinków Wykład 2 2006/07 Problem Dane: zbiór S={s 1,...,s n } odcinków na płaszczyźnie Wynik: zbiór punktów przecięć wszystkich odcinków z S, wraz z informacją które odcinki przecinają się

Bardziej szczegółowo

WYKŁAD 3 WYPEŁNIANIE OBSZARÓW. Plan wykładu: 1. Wypełnianie wieloboku

WYKŁAD 3 WYPEŁNIANIE OBSZARÓW. Plan wykładu: 1. Wypełnianie wieloboku WYKŁ 3 WYPŁNINI OSZRÓW. Wypełnianie wieloboku Zasada parzystości: Prosta, która nie przechodzi przez wierzchołek przecina wielobok parzystą ilość razy. Plan wykładu: Wypełnianie wieloboku Wypełnianie konturu

Bardziej szczegółowo

Wykład 2. Drzewa zbalansowane AVL i 2-3-4

Wykład 2. Drzewa zbalansowane AVL i 2-3-4 Wykład Drzewa zbalansowane AVL i -3-4 Drzewa AVL Wprowadzenie Drzewa AVL Definicja drzewa AVL Operacje wstawiania i usuwania Złożoność obliczeniowa Drzewa -3-4 Definicja drzewa -3-4 Operacje wstawiania

Bardziej szczegółowo

Algorytmy i struktury danych. wykład 5

Algorytmy i struktury danych. wykład 5 Plan wykładu: Wskaźniki. : listy, drzewa, kopce. Wskaźniki - wskaźniki Wskaźnik jest to liczba lub symbol który w ogólności wskazuje adres komórki pamięci. W językach wysokiego poziomu wskaźniki mogą również

Bardziej szczegółowo

Kolejka priorytetowa. Często rozważa się kolejki priorytetowe, w których poszukuje się elementu minimalnego zamiast maksymalnego.

Kolejka priorytetowa. Często rozważa się kolejki priorytetowe, w których poszukuje się elementu minimalnego zamiast maksymalnego. Kolejki Kolejka priorytetowa Kolejka priorytetowa (ang. priority queue) to struktura danych pozwalająca efektywnie realizować następujące operacje na zbiorze dynamicznym, którego elementy pochodzą z określonego

Bardziej szczegółowo

Zad. 1 Zad. 2 Zad. 3 Zad. 4 Zad. 5 SUMA

Zad. 1 Zad. 2 Zad. 3 Zad. 4 Zad. 5 SUMA Zad. 1 Zad. 2 Zad. 3 Zad. 4 Zad. 5 SUMA Zad. 1 (12p.)Niech n 3k > 0. Zbadać jaka jest najmniejsza możliwa liczba krawędzi w grafie, który ma dokładnie n wierzchołków oraz dokładnie k składowych, z których

Bardziej szczegółowo

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

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

Bardziej szczegółowo

GEOMETRIA ELEMENTARNA

GEOMETRIA ELEMENTARNA Bardo, 7 11 XII A. D. 2016 I Uniwersytecki Obóz Olimpiady Matematycznej GEOMETRIA ELEMENTARNA materiały przygotował Antoni Kamiński na podstawie zbiorów zadań: Przygotowanie do olimpiad matematycznych

Bardziej szczegółowo

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

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

Bardziej szczegółowo

Listy, kolejki, stosy

Listy, kolejki, stosy Listy, kolejki, stosy abc Lista O Struktura danych składa się z węzłów, gdzie mamy informacje (dane) i wskaźniki do następnych węzłów. Zajmuje tyle miejsca w pamięci ile mamy węzłów O Gdzie można wykorzystać:

Bardziej szczegółowo

Porządek symetryczny: right(x)

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

Bardziej szczegółowo

Wysokość drzewa Głębokość węzła

Wysokość 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ółowo

1. A 2. A 3. B 4. B 5. C 6. B 7. B 8. D 9. A 10. D 11. C 12. D 13. B 14. D 15. C 16. C 17. C 18. B 19. D 20. C 21. C 22. D 23. D 24. A 25.

1. A 2. A 3. B 4. B 5. C 6. B 7. B 8. D 9. A 10. D 11. C 12. D 13. B 14. D 15. C 16. C 17. C 18. B 19. D 20. C 21. C 22. D 23. D 24. A 25. 1. A 2. A 3. B 4. B 5. C 6. B 7. B 8. D 9. A 10. D 11. C 12. D 13. B 14. D 15. C 16. C 17. C 18. B 19. D 20. C 21. C 22. D 23. D 24. A 25. A Najłatwiejszym sposobem jest rozpatrzenie wszystkich odpowiedzi

Bardziej szczegółowo

Kompresja danych Streszczenie Studia Dzienne Wykład 10,

Kompresja danych Streszczenie Studia Dzienne Wykład 10, 1 Kwantyzacja wektorowa Kompresja danych Streszczenie Studia Dzienne Wykład 10, 28.04.2006 Kwantyzacja wektorowa: dane dzielone na bloki (wektory), każdy blok kwantyzowany jako jeden element danych. Ogólny

Bardziej szczegółowo

Algorytmy i Struktury Danych

Algorytmy 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ółowo

Programowanie obiektowe

Programowanie 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ółowo

Drzewa BST i AVL. Drzewa poszukiwań binarnych (BST)

Drzewa BST i AVL. Drzewa poszukiwań binarnych (BST) Drzewa ST i VL Drzewa poszukiwań binarnych (ST) Drzewo ST to dynamiczna struktura danych (w formie drzewa binarnego), która ma tą właściwość, że dla każdego elementu wszystkie elementy w jego prawym poddrzewie

Bardziej szczegółowo

Co należy zauważyć Rzuty punktu leżą na jednej prostej do osi rzutów x 12, którą nazywamy prostą odnoszącą Wysokość punktu jest odległością rzutu

Co należy zauważyć Rzuty punktu leżą na jednej prostej do osi rzutów x 12, którą nazywamy prostą odnoszącą Wysokość punktu jest odległością rzutu Oznaczenia A, B, 1, 2, I, II, punkty a, b, proste α, β, płaszczyzny π 1, π 2, rzutnie k kierunek rzutowania d(a,m) odległość punktu od prostej m(a,b) prosta przechodząca przez punkty A i B α(1,2,3) płaszczyzna

Bardziej szczegółowo

Podstawy Informatyki. Metody dostępu do danych

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

Bardziej szczegółowo

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

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

Bardziej szczegółowo

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

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

Bardziej szczegółowo

Lista 4. Kamil Matuszewski 22 marca 2016

Lista 4. Kamil Matuszewski 22 marca 2016 Lista 4 Kamil Matuszewski 22 marca 2016 1 2 3 4 5 6 7 8 9 10 Zadanie 2 Ułóż algorytm który dla danego n-wierzchołkowego drzewa i liczby k pokoloruje jak najwięcej wierzchołków tak, by na każdej ścieżce

Bardziej szczegółowo

Wykł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 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ółowo

Krzywa uniwersalna Sierpińskiego

Krzywa uniwersalna Sierpińskiego Krzywa uniwersalna Sierpińskiego Małgorzata Blaszke Karol Grzyb Streszczenie W niniejszej pracy omówimy krzywą uniwersalną Sierpińskiego, zwaną również dywanem Sierpińskiego. Pokażemy klasyczną metodę

Bardziej szczegółowo

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

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

Bardziej szczegółowo

PLANIMETRIA CZYLI GEOMETRIA PŁASZCZYZNY CZ. 1

PLANIMETRIA CZYLI GEOMETRIA PŁASZCZYZNY CZ. 1 PLANIMETRIA CZYLI GEOMETRIA PŁASZCZYZNY CZ. 1 Planimetria to dział geometrii, w którym przedmiotem badań są własności figur geometrycznych leżących na płaszczyźnie (patrz określenie płaszczyzny). Pojęcia

Bardziej szczegółowo

Luty 2001 Algorytmy (4) 2000/2001

Luty 2001 Algorytmy (4) 2000/2001 Mając dany zbiór elementów, chcemy znaleźć w nim element największy (maksimum), bądź najmniejszy (minimum). We wszystkich naturalnych metodach znajdywania najmniejszego i największego elementu obecne jest

Bardziej szczegółowo

3. Macierze i Układy Równań Liniowych

3. Macierze i Układy Równań Liniowych 3. Macierze i Układy Równań Liniowych Rozważamy równanie macierzowe z końcówki ostatniego wykładu ( ) 3 1 X = 4 1 ( ) 2 5 Podstawiając X = ( ) x y i wymnażając, otrzymujemy układ 2 równań liniowych 3x

Bardziej szczegółowo

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

Wstęp do programowania. Drzewa podstawowe techniki. Piotr Chrząstowski-Wachtel Wstęp do programowania Drzewa podstawowe techniki Piotr Chrząstowski-Wachtel Drzewa wyszukiwań Drzewa często służą do przechowywania informacji. Jeśli uda sie nam stworzyć drzewo o niewielkiej wysokości

Bardziej szczegółowo

6. Technika zamiatania (na płaszczyźnie)

6. Technika zamiatania (na płaszczyźnie) 6. Technika zamiatania (na płaszczyźnie) miotła Idea algorytmu zamiatania prostą polega na przesuwaniu pionowej prostej miotły po płaszczyźnie z lewa na prawo (z góry na dół). Podczas zamiatania utrzymywane

Bardziej szczegółowo

Programowanie obiektowe

Programowanie 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ółowo

Matematyka dyskretna. Andrzej Łachwa, UJ, B/14

Matematyka dyskretna. Andrzej Łachwa, UJ, B/14 Matematyka dyskretna Andrzej Łachwa, UJ, 2019 andrzej.lachwa@uj.edu.pl 1B/14 Drogi w grafach Marszruta (trasa) w grafie G z wierzchołka w do wierzchołka u to skończony ciąg krawędzi w postaci. W skrócie

Bardziej szczegółowo

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

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

Bardziej szczegółowo

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

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

Bardziej szczegółowo

GEOMETRIA PRZESTRZENNA (STEREOMETRIA)

GEOMETRIA PRZESTRZENNA (STEREOMETRIA) GEOMETRIA PRZESTRZENNA (STEREOMETRIA) 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

Bardziej szczegółowo

Algorytmiczna teoria grafów

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

Bardziej szczegółowo

STEREOMETRIA CZYLI GEOMETRIA W 3 WYMIARACH

STEREOMETRIA CZYLI GEOMETRIA W 3 WYMIARACH STEREOMETRIA CZYLI GEOMETRIA W 3 WYMIARACH Stereometria jest działem geometrii, którego przedmiotem badań są bryły przestrzenne oraz ich właściwości. WZAJEMNE POŁOŻENIE PROSTYCH W PRZESTRZENI 2 proste

Bardziej szczegółowo

ALGORYTMY I STRUKTURY DANYCH

ALGORYTMY I STRUKTURY DANYCH LGORTM I STRUKTUR DNH Temat 6: Drzewa ST, VL Wykładowca: dr inż. bigniew TRPT e-mail: bigniew.tarapata@isi.wat.edu.pl http://www.tarapata.strefa.pl/p_algorytmy_i_struktury_danych/ Współautorami wykładu

Bardziej szczegółowo

WSTĘP DO INFORMATYKI. Drzewa i struktury drzewiaste

WSTĘP DO INFORMATYKI. Drzewa i struktury drzewiaste Akademia Górniczo-Hutnicza Wydział Elektrotechniki, Automatyki, Informatyki i Inżynierii Biomedycznej WSTĘP DO INFORMATYKI Adrian Horzyk Drzewa i struktury drzewiaste www.agh.edu.pl DEFINICJA DRZEWA Drzewo

Bardziej szczegółowo

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

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

Bardziej szczegółowo

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

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

Bardziej szczegółowo

Znajdowanie wyjścia z labiryntu

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

Bardziej szczegółowo

Wykład 8. Drzewa AVL i 2-3-4

Wykład 8. Drzewa AVL i 2-3-4 Wykład 8 Drzewa AVL i 2-3-4 1 Drzewa AVL Ø Drzewa AVL Definicja drzewa AVL Operacje wstawiania i usuwania Złożoność obliczeniowa Ø Drzewa 2-3-4 Definicja drzewa 2-3-4 Operacje wstawiania i usuwania Złożoność

Bardziej szczegółowo

Ilustracja S1 S2. S3 ściana zewnętrzna

Ilustracja S1 S2. S3 ściana zewnętrzna Grafy płaskie G=(V,E) nazywamy grafem płaskim, gdy V jest skończonym podzbiorem punktów płaszczyzny euklidesowej, a E to zbiór krzywych Jordana (łamanych) o końcach w V i takich, że: 1) rożne krzywe mają

Bardziej szczegółowo

Tadeusz Pankowski www.put.poznan.pl/~tadeusz.pankowski

Tadeusz Pankowski www.put.poznan.pl/~tadeusz.pankowski : idea Indeksowanie: Drzewo decyzyjne, przeszukiwania binarnego: F = {5, 7, 10, 12, 13, 15, 17, 30, 34, 35, 37, 40, 45, 50, 60} 30 12 40 7 15 35 50 Tadeusz Pankowski www.put.poznan.pl/~tadeusz.pankowski

Bardziej szczegółowo

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

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

Bardziej szczegółowo

Matematyka dyskretna - 7.Drzewa

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

Bardziej szczegółowo

FUNKCJA LINIOWA - WYKRES

FUNKCJA LINIOWA - WYKRES FUNKCJA LINIOWA - WYKRES Wzór funkcji liniowej (Postać kierunkowa) Funkcja liniowa jest podstawowym typem funkcji. Jest to funkcja o wzorze: y = ax + b a i b to współczynniki funkcji, które mają wartości

Bardziej szczegółowo

Znajdowanie skojarzeń na maszynie równoległej

Znajdowanie skojarzeń na maszynie równoległej 11 grudnia 2008 Spis treści 1 Skojarzenia w różnych klasach grafów Drzewa Grafy gęste Grafy regularne dwudzielne Claw-free graphs 2 Drzewa Skojarzenia w drzewach Fakt Wybierajac krawędź do skojarzenia

Bardziej szczegółowo

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

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

Bardziej szczegółowo

Definicja obrotu: Definicja elementów obrotu:

Definicja obrotu: Definicja elementów obrotu: 5. Obroty i kłady Definicja obrotu: Obrotem punktu A dookoła prostej l nazywamy ruch punktu A po okręgu k zawartym w płaszczyźnie prostopadłej do prostej l w kierunku zgodnym lub przeciwnym do ruchu wskazówek

Bardziej szczegółowo

Sortowanie topologiczne skierowanych grafów acyklicznych

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

Bardziej szczegółowo

Programowanie w VB Proste algorytmy sortowania

Programowanie w VB Proste algorytmy sortowania Programowanie w VB Proste algorytmy sortowania Sortowanie bąbelkowe Algorytm sortowania bąbelkowego polega na porównywaniu par elementów leżących obok siebie i, jeśli jest to potrzebne, zmienianiu ich

Bardziej szczegółowo

Metody teorii gier. ALP520 - Wykład z Algorytmów Probabilistycznych p.2

Metody teorii gier. ALP520 - Wykład z Algorytmów Probabilistycznych p.2 Metody teorii gier ALP520 - Wykład z Algorytmów Probabilistycznych p.2 Metody teorii gier Cel: Wyprowadzenie oszacowania dolnego na oczekiwany czas działania dowolnego algorytmu losowego dla danego problemu.

Bardziej szczegółowo

Wstęp do programowania

Wstę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ółowo

Drzewa 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. 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ółowo

Drzewa poszukiwań binarnych

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

Bardziej szczegółowo

Wykład 2. Drzewa poszukiwań binarnych (BST)

Wykład 2. Drzewa poszukiwań binarnych (BST) Wykład 2 Drzewa poszukiwań binarnych (BST) 1 O czym będziemy mówić Definicja Operacje na drzewach BST: Search Minimum, Maximum Predecessor, Successor Insert, Delete Struktura losowo budowanych drzew BST

Bardziej szczegółowo

Wykład 6. Drzewa poszukiwań binarnych (BST)

Wykład 6. Drzewa poszukiwań binarnych (BST) Wykład 6 Drzewa poszukiwań binarnych (BST) 1 O czym będziemy mówić Definicja Operacje na drzewach BST: Search Minimum, Maximum Predecessor, Successor Insert, Delete Struktura losowo budowanych drzew BST

Bardziej szczegółowo

Podstawowe własności grafów. Wykład 3. Własności grafów

Podstawowe 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ółowo

Wykład 8. Drzewo rozpinające (minimum spanning tree)

Wykł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ółowo

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

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

Bardziej szczegółowo

Matematyczne Podstawy Informatyki

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

Bardziej szczegółowo

Drzewo. 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:

Drzewo. 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ółowo

w jednym kwadrat ziemia powietrze równoboczny pięciobok

w jednym kwadrat ziemia powietrze równoboczny pięciobok Wielościany Definicja 1: Wielościanem nazywamy zbiór skończonej ilości wielokątów płaskich spełniających następujące warunki: 1. każde dwa wielokąty mają bok lub wierzchołek wspólny albo nie mają żadnego

Bardziej szczegółowo

Algorytmy i Struktury Danych, 9. ćwiczenia

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

Bardziej szczegółowo

Każdy węzeł w drzewie posiada 3 pola: klucz, adres prawego potomka i adres lewego potomka. Pola zawierające adresy mogą być puste.

Każdy węzeł w drzewie posiada 3 pola: klucz, adres prawego potomka i adres lewego potomka. Pola zawierające adresy mogą być puste. Drzewa binarne Każdy węzeł w drzewie posiada pola: klucz, adres prawego potomka i adres lewego potomka. Pola zawierające adresy mogą być puste. Uporządkowanie. Zakładamy, że klucze są różne. Klucze leżące

Bardziej szczegółowo

Algorytmy i. Wykład 5: Drzewa. Dr inż. Paweł Kasprowski

Algorytmy i. Wykład 5: Drzewa. Dr inż. Paweł Kasprowski Algorytmy i struktury danych Wykład 5: Drzewa Dr inż. Paweł Kasprowski pawel@kasprowski.pl Drzewa Struktury przechowywania danych podobne do list ale z innymi zasadami wskazywania następników Szczególny

Bardziej szczegółowo

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

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

Bardziej szczegółowo

Notatki przygotowawcze dotyczące inwersji na warsztaty O geometrii nieeuklidesowej hiperbolicznej Wrocław, grudzień 2013

Notatki przygotowawcze dotyczące inwersji na warsztaty O geometrii nieeuklidesowej hiperbolicznej Wrocław, grudzień 2013 Notatki przygotowawcze dotyczące inwersji na warsztaty O geometrii nieeuklidesowej hiperbolicznej Wrocław, grudzień 013 3.4.1 Inwersja względem okręgu. Inwersja względem okręgu jest przekształceniem płaszczyzny

Bardziej szczegółowo

Metoda objętości zadania

Metoda objętości zadania Metoda objętości zadania Płaszczyzny i dzielą graniastosłup trójkątny na cztery bryły Znaleźć stosunki objętości tych brył 2 any jest równoległościan o objętości V Wyznaczyć objętość części wspólnej czworościanów

Bardziej szczegółowo

Zad.3. Jakub Trojgo i Jakub Wieczorek. 14 grudnia 2013

Zad.3. Jakub Trojgo i Jakub Wieczorek. 14 grudnia 2013 Zad.3 Jakub Trojgo i Jakub Wieczorek 14 grudnia 2013 W pierwszej części naszej pracy będziemy chcieli zbadać ciągłość funkcji f(x, y) w przypadku gdy płaszczyzna wyposażona jest w jedną z topologii: a)

Bardziej szczegółowo

prowadzący dr ADRIAN HORZYK /~horzyk e-mail: horzyk@agh tel.: 012-617 Konsultacje paw. D-13/325

prowadzą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ółowo

Algorytmy 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 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ółowo

Drzewa czerwono-czarne.

Drzewa czerwono-czarne. Binboy at Sphere http://binboy.sphere.p l Drzewa czerwono-czarne. Autor: Jacek Zacharek Wstęp. Pojęcie drzewa czerwono-czarnego (red-black tree) zapoczątkował Rudolf Bayer w książce z 1972 r. pt. Symmetric

Bardziej szczegółowo

Drzewa podstawowe poj

Drzewa podstawowe poj Drzewa podstawowe poj ecia drzewo graf reprezentujacy regularna strukture wskaźnikowa, gdzie każdy element zawiera dwa lub wiecej wskaźników (ponumerowanych) do takich samych elementów; wez ly (albo wierzcho

Bardziej szczegółowo

PLANIMETRIA CZYLI GEOMETRIA PŁASZCZYZNY CZ. 3

PLANIMETRIA CZYLI GEOMETRIA PŁASZCZYZNY CZ. 3 DEFINICJE PLANIMETRIA CZYLI GEOMETRIA PŁASZCZYZNY CZ. 3 Czworokąt to wielokąt o 4 bokach i 4 kątach. Przekątną czworokąta nazywamy odcinek łączący przeciwległe wierzchołki. Wysokością czworokąta nazywamy

Bardziej szczegółowo

FUNKCJA LINIOWA - WYKRES. y = ax + b. a i b to współczynniki funkcji, które mają wartości liczbowe

FUNKCJA LINIOWA - WYKRES. y = ax + b. a i b to współczynniki funkcji, które mają wartości liczbowe FUNKCJA LINIOWA - WYKRES Wzór funkcji liniowej (postać kierunkowa) Funkcja liniowa to funkcja o wzorze: y = ax + b a i b to współczynniki funkcji, które mają wartości liczbowe Szczególnie ważny w postaci

Bardziej szczegółowo

Plan wykładu. Wykład 3. Rzutowanie prostokątne, widoki, przekroje, kłady. Rzutowanie prostokątne - geneza. Rzutowanie prostokątne - geneza

Plan wykładu. Wykład 3. Rzutowanie prostokątne, widoki, przekroje, kłady. Rzutowanie prostokątne - geneza. Rzutowanie prostokątne - geneza Plan wykładu Wykład 3 Rzutowanie prostokątne, widoki, przekroje, kłady 1. Rzutowanie prostokątne - geneza 2. Dwa sposoby wzajemnego położenia rzutni, obiektu i obserwatora, metoda europejska i amerykańska

Bardziej szczegółowo

Kombinowanie o nieskończoności. 2. Wyspy, mosty, mapy i kredki materiały do ćwiczeń

Kombinowanie o nieskończoności. 2. Wyspy, mosty, mapy i kredki materiały do ćwiczeń Kombinowanie o nieskończoności. 2. Wyspy, mosty, mapy i kredki materiały do ćwiczeń Projekt Matematyka dla ciekawych świata spisał: Michał Korch 15 marzec 2018 Szybkie przypomnienie z wykładu Prezentacja

Bardziej szczegółowo

Analiza algorytmów zadania podstawowe

Analiza algorytmów zadania podstawowe Analiza algorytmów zadania podstawowe Zadanie 1 Zliczanie Zliczaj(n) 1 r 0 2 for i 1 to n 1 3 do for j i + 1 to n 4 do for k 1 to j 5 do r r + 1 6 return r 0 Jaka wartość zostanie zwrócona przez powyższą

Bardziej szczegółowo

Drzewa poszukiwań binarnych

Drzewa poszukiwań binarnych 1 Drzewa poszukiwań binarnych Kacper Pawłowski Streszczenie W tej pracy przedstawię zagadnienia związane z drzewami poszukiwań binarnych. Przytoczę poszczególne operacje na tej strukturze danych oraz ich

Bardziej szczegółowo

9. Podstawowe narzędzia matematyczne analiz przestrzennych

9. Podstawowe narzędzia matematyczne analiz przestrzennych Waldemar Izdebski - Wykłady z przedmiotu SIT 75 9. odstawowe narzędzia matematyczne analiz przestrzennych Niniejszy rozdział służy ogólnemu przedstawieniu metod matematycznych wykorzystywanych w zagadnieniu

Bardziej szczegółowo

Struktury Danych i Złożoność Obliczeniowa

Struktury Danych i Złożoność Obliczeniowa Struktury Danych i Złożoność Obliczeniowa Zajęcia 3 Struktury drzewiaste drzewo binarne szczególny przypadek drzewa, które jest szczególnym przypadkiem grafu skierowanego, stopień każdego wierzchołka jest

Bardziej szczegółowo

Definicja pliku kratowego

Definicja pliku kratowego Pliki kratowe Definicja pliku kratowego Plik kratowy (ang grid file) jest strukturą wspierająca realizację zapytań wielowymiarowych Uporządkowanie rekordów, zawierających dane wielowymiarowe w pliku kratowym,

Bardziej szczegółowo

ZASADY PROGRAMOWANIA KOMPUTERÓW ZAP zima 2014/2015. Drzewa BST c.d., równoważenie drzew, kopce.

ZASADY 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ółowo

Przypomnij sobie krótki wstęp do teorii grafów przedstawiony na początku semestru.

Przypomnij 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ółowo

Matematyka dyskretna

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

Bardziej szczegółowo

Wykład X. Programowanie. dr inż. Janusz Słupik. Gliwice, Wydział Matematyki Stosowanej Politechniki Śląskiej. c Copyright 2016 Janusz Słupik

Wykład X. Programowanie. dr inż. Janusz Słupik. Gliwice, Wydział Matematyki Stosowanej Politechniki Śląskiej. c Copyright 2016 Janusz Słupik Wykład X Wydział Matematyki Stosowanej Politechniki Śląskiej Gliwice, 2016 c Copyright 2016 Janusz Słupik Drzewa binarne Drzewa binarne Drzewo binarne - to drzewo (graf spójny bez cykli) z korzeniem (wyróżnionym

Bardziej szczegółowo

FUNKCJA LINIOWA, RÓWNANIA I UKŁADY RÓWNAŃ LINIOWYCH

FUNKCJA LINIOWA, RÓWNANIA I UKŁADY RÓWNAŃ LINIOWYCH FUNKCJA LINIOWA, RÓWNANIA I UKŁADY RÓWNAŃ LINIOWYCH PROPORCJONALNOŚĆ PROSTA Proporcjonalnością prostą nazywamy zależność między dwoma wielkościami zmiennymi x i y, określoną wzorem: y = a x Gdzie a jest

Bardziej szczegółowo

Instrukcje dla zawodników

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

Bardziej szczegółowo

domykanie relacji, relacja równoważności, rozkłady zbiorów

domykanie relacji, relacja równoważności, rozkłady zbiorów 1 of 8 2012-03-28 17:45 Logika i teoria mnogości/wykład 5: Para uporządkowana iloczyn kartezjański relacje domykanie relacji relacja równoważności rozkłady zbiorów From Studia Informatyczne < Logika i

Bardziej szczegółowo

E: Rekonstrukcja ewolucji. Algorytmy filogenetyczne

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

Bardziej szczegółowo

Notacja RPN. 28 kwietnia wyliczanie i transformacja wyrażeń. Opis został przygotowany przez: Bogdana Kreczmera.

Notacja RPN. 28 kwietnia wyliczanie i transformacja wyrażeń. Opis został przygotowany przez: Bogdana Kreczmera. 1 wyliczanie i transformacja wyrażeń (wersja skrócona) Opis został przygotowany przez: Bogdana Kreczmera 28 kwietnia 2002 Strona 1 z 68 Zakład Podstaw Cybernetyki i Robotyki - trochę historii...............

Bardziej szczegółowo

PODSTAWY > Figury płaskie (1) KĄTY. Kąt składa się z ramion i wierzchołka. Jego wielkość jest mierzona w stopniach:

PODSTAWY > Figury płaskie (1) KĄTY. Kąt składa się z ramion i wierzchołka. Jego wielkość jest mierzona w stopniach: PODSTAWY > Figury płaskie (1) KĄTY Kąt składa się z ramion i wierzchołka. Jego wielkość jest mierzona w stopniach: Kąt możemy opisać wpisując w łuk jego miarę (gdy jest znana). Gdy nie znamy miary kąta,

Bardziej szczegółowo

Podstawy Informatyki. Wykład 6. Struktury danych

Podstawy Informatyki. Wykład 6. Struktury danych Podstawy Informatyki Wykład 6 Struktury danych Stałe i zmienne Podstawowymi obiektami występującymi w programie są stałe i zmienne. Ich znaczenie jest takie samo jak w matematyce. Stałe i zmienne muszą

Bardziej szczegółowo

Algorytmy równoległe: ocena efektywności prostych algorytmów dla systemów wielokomputerowych

Algorytmy równoległe: ocena efektywności prostych algorytmów dla systemów wielokomputerowych Algorytmy równoległe: ocena efektywności prostych algorytmów dla systemów wielokomputerowych Rafał Walkowiak Politechnika Poznańska Studia inżynierskie Informatyka 2014/15 Znajdowanie maksimum w zbiorze

Bardziej szczegółowo

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

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

Bardziej szczegółowo

Badania operacyjne: Wykład Zastosowanie kolorowania grafów w planowaniu produkcji typu no-idle

Badania operacyjne: Wykład Zastosowanie kolorowania grafów w planowaniu produkcji typu no-idle Badania operacyjne: Wykład Zastosowanie kolorowania grafów w planowaniu produkcji typu no-idle Paweł Szołtysek 12 czerwca 2008 Streszczenie Planowanie produkcji jest jednym z problemów optymalizacji dyskretnej,

Bardziej szczegółowo