RÓWNOLEGŁE ALGORYTMY WYZNACZANIA DOKŁADNEJ LICZBY ŚCIEŻEK WOLNYCH OD PRZECIĘĆ W PEWNYCH GRAFACH REGULARNYCH

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

Download "RÓWNOLEGŁE ALGORYTMY WYZNACZANIA DOKŁADNEJ LICZBY ŚCIEŻEK WOLNYCH OD PRZECIĘĆ W PEWNYCH GRAFACH REGULARNYCH"

Transkrypt

1 Politechnika Wrocławska Wydziałowy Zakład Informatyki Wydział Informatyki I Zarządzania Wybrzeże Wyspiańskiego 27, Wrocław Praca Magisterska RÓWNOLEGŁE ALGORYTMY WYZNACZANIA DOKŁADNEJ LICZBY ŚCIEŻEK WOLNYCH OD PRZECIĘĆ W PEWNYCH GRAFACH REGULARNYCH Paweł P. Mazur Promotor: dr hab. Maciej Liśkiewicz Ocena: Wrocław 2004

2

3 Streszczenie: Praca dotyczy zagadnienia ścieżek wolnych od przecięć (SAWs), ze szczególnym uwzględnieniem problemu zliczania SAWs na dwuwymiarowej kracie kwadratowej. Przedstawione zostały najnowsze opublikowane wyniki badań modelu SAW, w tym algorytmy zliczania ścieżek SAWs, przy pomocy których uzyskiwano w kolejnych latach najlepsze rezultaty. Przeprowadzono własne badania przy użyciu metody przeszukiwania zupełnego, które pozwoliły wysunąć hipotezę o istnieniu stałej κ = sn c n wyrażającej średnią liczbę kroków algorytmu przeszukiwania wyczerpującego z nawrotami przypadających na jedną znalezioną ścieżkę SAW długości n. Istnienie stałej κ pozwala przypuszczać, że problem wchodzenia do tzw. ślepych zaułków nie wpływa na złożoność asymptotyczną algorytmu. Własność ta niesie pewną nową informację o charakterze ścieżek SAWs. W pracy przedstawiono również dwa autorskie algorytmy zliczania ścieżek SAWs, które można w łatwy sposób zrównoleglić. Złożoność obliczeniową jednego z nich oceniamy na O(λ n ), λ < µ, drugiego na około O(µ n ). Zbadano także problem generowania losowej ścieżki SAW. Abstract: The thesis treats about the issues of Self-Avoiding Walks (SAWs) with the emphasis on the problem of counting the number of SAWs in two-dimensional square lattice. The most recently published results from SAW model research have been presented, including algorithms for counting the numbers of SAWs used for obtaining better and better results in successive years. Also own research has been carried out based on a method of the complete search. The results allowed to put forward a hypothesis about the existence of a constant κ = sn c n, denoting the average number of steps that the complete search algorithm performs to find one single SAW of length n. The existence of the constant κ allows us to make a conjecture that the problem of entering so called dead-ends does not affect the overall asymptotical complexity of the algorithm. This property provides some kind of new information about the character of SAW paths. Two own algorithms for counting the number of SAWs have been presented in the thesis. Both of them can be easily parallelised. The complexity of one of them has been estimated to O(λ n ), λ < µ, while of the second one to O(µ n ). Also the problem of generating a random SAW path has been researched.

4

5 Al andar se hace camino, y al volver la vista atrás se ve la senda que nunca se ha de volver a pisar. Antionio Machando Tak wędrując, tworzysz drogi; Gdy spojrzenie wstecz zwrócone, Ujrzysz szlak, którego nigdy Po raz drugi nie znajdujesz. tłum. Zuzanna Jakubowska

6

7 Podziękowania W pierwszej kolejności, chciałbym serdecznie podziękować mojemu promotorowi, dr hab. Maciejowi Liśkiewiczowi, za zainteresowanie mnie tematyką, której dotyczy praca, pomoc w sformułowaniu tematu i wskazanie kierunku badań. Dzięki Jego radom i wskazówkom praca zyskała merytorycznie i zwiększyła się jej precyzja. Jestem bardzo wdzięczny panu Prof. Rüdigerowi K. Reischukowi, dyrektorowi Instytutu Informatyki Teoretycznej Uniwersytetu w Lubece (Niemcy) za wyrażenie zgody na nieograniczony dostęp do komputera równoległego dużej mocy obliczeniowej. Obliczenia przeprowadzone na komputerze były niezbędne do powstania niniejszej pracy. Dziękuję także pozostałym pracownikom Instytutu Informatyki Teoretycznej, w szczególności Panu Jensowi Heinrichsowi, za wszelką pomoc okazaną podczas korzystania z komputera. Wyrażam również słowa podziękowania Prof. Tony iemu Guttmannowi oraz Dr. Iwanowi Jensenowi z Wydziału Matematyki i Statystyki Uniwersytetu w Melbourne (Australia) za udostępnienie swoich publikacji na temat najnowszych wyników dla zagadnienia, o którym traktuje niniejsza praca. Publikacje te należą do zbioru najważniejszych pozycji w bibliografii pracy. Wielką wdzięczność okazuję mojemu bratu, Tomaszowi, za pomoc w dostępie do literatury znajdującej się w University of Oxford Radcliffe Science Library. Chciałbym również podziękować swoim Rodzicom za słowa zachęty i wsparcia.

8

9 Danksagung An erster Stelle möchte ich mich bei meinem Betreuer, Prof. Maciej Liśkiewicz bedanken. Ich danke ihm dafür, dass er mich für die Thematik, die diese Arbeit betrifft beigeistert hat und mir die Richtung der Untersuchungen gezeigt hat. Dank seiner Ratschläge und Anleitungen, bekam diese Arbeit methodische Stärken und ihre Präzision hat sich vergrößert. Ich danke ebenfalls Hr. Prof. Rüdiger K. Reischuk, dem Direktor des Instituts für Theoretische Informatik der Universität zu Lübeck (Deutschland), dafür dass er mir die Erlaubnis für den unbegrenzten Zugang zum High Performence Computer gegeben hat. Die Berechnungen, die ich am Parallelrechner durchgeführt habe, waren notwendig zur Entstehung des experimentiellen Teils der vorliegenden Arbeit. Ich danke auch den restlichen Mitarbeitern des Instituts für Theoretische Informatik, insbesondere Hr. Jens Heinrichs, für all die Hilfe, die mir während der Nutzung des Computers geleistet wurde. Ich zeige Dankbarkeit Hr. Prof. Tony Guttmann und Hr. Dr. Iwan Jensen aus dem Fachbereich Mathematik und Statistik der Universität in Melbourne (Australien). Sie haben mir Zugang zu ihren Veröffentlichungen gegeben, die die Thematik der neusten Ergebnisse betreffen, die diese Arbeit behandelt. Diese Veröffentlichungen gehören zur Sammlung der wichtigsten Positionen im Literaturverzeichnis dieser Arbeit. Ich bedanke mich auch bei meinem Bruder Tomasz, für die Hilfestellung im Zugang zur reichhaltigen Literatur, die sich in der University of Oxford Radcliffe Science Library befindet. Dank dieser Literatur konnte ich mich mit der Thematik der Arbeit befassen. Große Dankbarkeit richte ich ebenfalls an meine Eltern, und danke ihnen für die Motivation und Unterstützung.

10

11 Spis treści Podziękowania Spis rysunków Spis tabel Wstęp Zliczanie ścieżek wolnych od przecięć Złożoność obliczeniowa problemów zliczania Czym są ścieżki wolne od przecięć? Model SAW Zastosowania modelu SAW Problem zliczania Ścieżek SAWs łatwo policzyć nie można Symetria Można szacować Historia uzyskanych dokładnych wyników Algorytmy dokładne Metoda przeszukiwania zupełnego Algorytm i jego efektywność obliczeniowa Złożoność obliczeniowa przeszukiwania zupełnego Algorytmy oparte na podejściu skończonej kraty Metoda macierzy przejścia Metoda dokładnego obliczania liczby SAW Conway-Enting-Guttmann (CEG) Zrównoleglenie algorytmu Pruning algorithm Zrównoleglenie algorytmu Algorytm łączenia kwadratów Faza wstępna (precomputing) Parzysta liczba przejść Nieparzysty border length Permutacje wejść/wyjść i język Motzkina Algorytm generowania permutacji wejść Faza główna Algorytm eliminacji cykli i błędnych ścieżek Symetrie Wybór śladów początkowych Obcinanie rekursji Implementacja Zrównoleglenie algorytmu Faza wstępna Faza główna

12 12 Spis treści 5.5. Uzyskane wyniki Analiza algorytmu Tempo zliczania Głębokość rekurencji algorytmu Wpływ selekcji kwadratów początkowych Złożoność obliczeniowa algorytmu Wnioski Algorytm z pętlą otwartą Implementacja Generowanie pętli Wyniki Analiza algorytmu Superkomputer wykorzystany do eksperymentów Dane techniczne Dostępna konfiguracja Praktyczna korzyść z architektury 64-bitowej OpenMP Efektywność realizacji procesów wielowątkowych Zakończenie A. Ograniczenia dolne i górne oraz szacowane wartości stałej µ B. Liczba SAWs C. Rozkład c n na czynniki pierwsze D. Liczby Catalana E. Permutacje ciągów nawiasowych F. Generowanie pseudolosowej SAW G. Tematy pokrewne H. Test efektywności dyrektyw OpenMP I. Wybrane kody źródłowe programów Bibliografia Oznaczenia

13 Spis rysunków 2.1. Krata kwadratowa i trójkątna Krata plaster miodu i kagome SAW w pułapce Symetria SAWs Grafy liniowe powstałe po przecięciu się SAW po wykonaniu n-tego kroku Grafy liniowe powstałe po przedłużeniu ogona kijanki o jeden krok Budowanie ścieżki SAW z trzech innych Współczynniki przyrostu wartości s n i c n (A) Liczba kroków przypadających na jedną znalezioną ścieżkę długości n (A) Współczynniki przyrostu wartości s n i c n (B) Liczba kroków przypadających na jedną znalezioną ścieżkę długości n (B) Liczba ścieżek SAW i położonych kroków skala liniowa Liczba ścieżek SAW i położonych kroków skala liniowo-logarytmiczna Podział skończonej kraty na dwie części Przykładowy rzut SAW na oś Y Typy komponentów nieredukowalnych Podział kraty na podkraty K i,j Kwadraty I typu Permutacja wejść i wyjść dla danego kwadratu Powtórzenia typu (1.) Powtórzenia typu (2.) Permutacje nawiasów opisujące połączenia wejść/wyjść w kwadracie Typy śladów Ścieżki identyczne względem przesunięcia Generowanie tablic miesz(m) Wykrywanie cyklu Wykrywanie błędnie skonstruowanej ścieżki SAW Główna struktura danych fazy wstępnej Podział danych dla wątków (I) Podział danych dla wątków (II) Scalanie tablicy kw dla w = Liczniki składników sumy o poszczególnych wielkościach dla w = 3, n = Liczniki składników sumy o poszczególnych wielkościach dla w = 3, n = Współczynnik przyrostu czasu obliczeń dla w = 4 (implementacja 1 wątkowa) Współczynnik przyrostu czasu obliczeń dla w = 5 (implementacja 4 wątkowa) Przykłady pętli otwartych Po wejściu do obszaru A ograniczonego pętlą otwartą, ścieżka nie może już z niego wyjść Generowanie SAW przy użyciu pętli otwartych Pętle pierwszej zaimplementowanej klasy

14 14 Spis rysunków 6.5. Pętle drugiej zaimplementowanej klasy Diagram pojedynczego zestawu płyt systemowych Magistrala danych wraz z przepustowościami pomiędzy elementami Magistrala adresów Magistrala Sun Fire 15K Model fork-and-join F.1. Pseudolosowa ścieżka SAW dla n = 1000 bez cofania kroków F.2. Pseudolosowa ścieżka SAW dla n = 1000, p=1/ F.3. Pseudolosowa ścieżka SAW dla n = 1000, p=1/ I.1. Diagram wywołań funkcji w programie brute 49 sym I.2. Diagram funkcji wywoływanych w main() I.3. Diagram funkcji wywoływanych w precomputing() I.4. Diagram funkcji wywoływanych w faza wlasciwa() I.5. Diagram funkcji wywoływanych w main()

15 Spis tabel 2.1. Najlepsze oszacowania µ (connective constant) dla krat hiperkubicznych Postępy w liczeniu SAWs na przestrzeni lat Czasy działania różnych implementacji sekwencyjnych i równoległych algorytmu brute-force Średnia liczba znalezionych ścieżek SAW w czasie 1 sekundy Liczba kroków wykonanych przez algorytm brute-force Reguły przejść pomiędzy konfiguracjami w metodzie macierzy przejścia Liczba konfiguracji cięć dla zadanej szerokości k pasa Liczba permutacji perm w zależności od liczby par wejść/wyjść Liczby ciągów wygenerowane w tablicach uloz(m) i miesz(m) Czasy działania fazy wstępnej Czasy działania fazy głównej na PC Czasy działania fazy głównej na Pilgrimie dla 5 wątków Czasy działania fazy głównej na Pilgrimie dla 40 wątków Liczby wystąpień sum częściowych [1..180], które powstały dla w = 3, n = Liczba śladów lokalnych z podziałem na wielkość licznika (w = 3) Liczba śladów lokalnych z podziałem na wielkość licznika (w = 4) Liczba śladów początkowych, dla których algorytm doszedł do określonego poziomu rekurencji (w = 3) Liczba śladów początkowych, dla których algorytm doszedł do określonego poziomu rekurencji (w = 4) Liczba śladów początkowych, dla których algorytm doszedł do określonego poziomu rekurencji (w = 5) Zyski z wprowadzonego ograniczenia na wybór kwadratów początkowych dla kwadratów o boku w = Liczba pętli w klasach dla różnych długości pętli Wyniki dla dwóch klas pętli Test możliwości algorytmu z pętlą otwartą Maksymalne przepustowości magistrali Czas opóźnienia (pin-to-pin latency) A.1. Historia uzyskiwania ograniczeń dolnych dla µ (connective constant) A.2. Historia uzyskiwania ograniczeń górnych dla µ (connective constant) A.3. Historia uzyskiwania dokładnych wartości µ (connective constant) D.1. Początkowe wyrazy ciągu liczb Catalana H.1. Wyniki testu porównaczego dyrektyw ATOMIC i CRITICAL I.1. Wybrane metryki dla projektu brute 49 sym

16 16 Spis tabel I.2. Wybrane metryki dla programu implementującego algorytm łączenia kwadratów 175 I.3. Wybrane metryki dla programu z pętlami otwartymi

17 1. Wstęp Ścieżkę wolną od przecięć (ang. self-avoiding walk, w skrócie SAW) na dwuwymiarowej kracie kwadratowej nieformalnie przedstawiamy jako trasę przejścia po ulicach miasta zgodnie z regułą, że nie przechodzimy więcej niż jeden raz przez to samo skrzyżowanie oraz, że nigdy nie zawracamy. Ze ścieżkami SAWs związanych jest kilka klasycznych problemów kombinatorycznych, które, pomimo prostych sformułowań, okazują się być niezwykle trudne. Podstawowym problemem jest policzenie liczby ścieżek wolnych od przecięć o zadanej długości n rozpoczynających się w początku d-wymiarowej kraty regularnej Z d. Za początek kraty przyjmujemy wierzchołek o współrzędnych (0,..., 0). SAW jest wówczas taką ścieżką w grafie, która przez każdy wierzchołek przechodzi co najwyżej jeden raz. Szukaną wartość oznaczamy przez c n. Pomimo wielu lat prowadzonych badań, nikomu nie udało się do tej pory znaleźć formuły pozwalającej obliczać c n. Co więcej, przypuszcza się, że taka formuła po prostu nie istnieje. Ważnym twierdzeniem Hammersleya i Mortona z 1954 r. jest istnienie stałej µ zależnej od wymiaru przestrzeni d takiej, że µ = lim c 1/n n n. Ponadto wysunięto hipotezę, że dla pewnych stałych rzeczywistych A i γ, prawdziwy jest wzór asymptotyczny c n Aµ n n γ 1, znany w fizyce statystycznej dla innych modeli fizycznych. Dokładna wartość µ pozostaje jednak wciąż nieznana. Wiadomo natomiast, że prawdziwe są nierówności: µ , dla d = 2, µ , dla d = 3, µ , dla d = 4, µ , dla d = 5, µ , dla d = 6. Pytanie o liczbę SAWs stanowi od ponad 35 lat niezwykle istotne zagadnienie w badaniach nad polimerami liniowymi w roztworach. Okazuje się, że SAWs bardzo dobrze nadają się do modelowania wielu obiektów, na przykład cząsteczek białka. Ścieżki SAWs modelują także zmiany fazowe występujące w zjawiskach ferromagnetyzmu. Ostatnio zagadnienie zliczania SAWs wykorzystywane jest do badania wydajności algorytmów grafowych. Problem zliczania SAWs jest także interesującym zagadnieniem z teorio-złożonościowego punktu widzenia. Wykazano np., że zliczanie SAWs w dowolnym grafie jest problemem #P-zupełnym. Pytaniem otwartym pozostaje pytanie Welscha z 1993 r., czy problem zliczania SAWs na dwuwymiarowej kracie jest #P 1 -zupełny? Częściowa

18 18 1. Wstęp odpowiedź podana w pracy [43] mówi, że problem pozostaje #P-zupełnym dla podgrafów kraty Z 2. Twierdząca odpowiedź na pytanie Welscha byłaby ważnym argumentem za tym, że nie istnieje wzór pozwalający wyliczyć c n. Dotychczas przedstawiono wiele algorytmów zliczających SAWs. Wszystkie one działają w czasie wykładniczym, a w większości przypadków ich złożoność wynosi O(µ n ). Najlepsze znane algorytmy uzyskują złożoność O(1.316 n ) (algorytm Conwaya, Entinga i Guttmanna z roku 1993) oraz złożoność O( n ) (algorytm Jensena z 2004 roku). Celem pracy jest opracowanie i zbadanie efektywności nowych algorytmów zliczania ścieżek SAWs na grafach regularnych. W szczególności będziemy się zajmować dwuwymiarowymi kratami kwadratowymi. W pracy prezentujemy dwa autorskie rozwiązania. Pierwszy algorytm polega na podziale kraty Z 2 na podkraty K i,j zawierające w w wierzchołków. Mówiąc w dużym uproszczeniu, w pierwszej fazie algorytmu badamy wszystkie możliwe przejścia ścieżki SAW przez podkratę K i,j, które nazywamy śladami lokalnymi i oznaczamy przez σ i,j. W drugiej części, metodą przeszukiwania zupełnego znajdujemy wszystkie takie ułożenia S = i,j Z σ i,j śladów lokalnych na kracie Z 2, które dają poprawne ścieżki SAWs o długości n. Ponieważ jeden ślad lokalny σ i,j o zadanych parametrach przejścia reprezentuje L(σ i,j ) różnych fragmentów ścieżki, powstałe ułożenia w drugiej części algorytmu opisują S = i,j L(σ i,j ) ścieżek SAWs o długości n. Parametrami algorytmu są n i w. Na podstawie uzyskanych wyników badań empirycznych wysuwamy hipotezę, że dla w > 5 złożoność algorytmu wynosi O(λ n ), gdzie λ < µ. Drugi algorytm zlicza ścieżki SAWs zmodyfikowaną metodą przeszukiwania zupełnego przestrzeni rozwiązań. Wprowadzamy pojęcie pętli otwartej dla fragmentu SAW o takiej własności, że kładąc odcinek jednostkowy na kracie doprowadzilibyśmy do przecięcia się ścieżki. Modyfikacja metody polega na tym, że po wykryciu powstania pętli otwartej nie generujemy dalszych części ścieżek, których zakończenia znajdują się wewnątrz pętli. Zastępujemy to jednym odwołaniem do przygotowanej w fazie precomputingu tablicy z informacjami o liczbie odpowiednich zakończeń znajdujących się wewnątrz pętli. W pracy pokazujemy, jaka jest liczba zakończeń wewnątrz wszystkich możliwych pętli i na podstawie uzyskanych wyników stwierdzamy, że jest ich zbyt mało, aby algorytm osiągnął złożoność mniejszą od O(µ n ). Innym wynikiem uzyskanym w pracy, jest wykrycie nowych cech ścieżek SAWs. Na podstawie tych wyników wysuwamy hipotezę o prawdziwości związku lim n s n s n 1 = µ. gdzie s n jest liczbą wykonanych kroków przy użyciu metody brutalnej siły (przeszukiwanie wyczerpujące z nawrotami) w procesie zliczania ścieżek SAWs długości n. W konsekwencji formułujemy przypuszczenie o istnieniu stałej κ takiej, że s n κ = lim 1.6. n c n Stałą κ należy interpretować, jako średnią liczbę kroków, wykonanych przez algorytm przeszukiwania zupełnego, potrzebną na znalezienie jednej ścieżki SAW o długości n. Prawdziwość hipotezy o istnieniu stałej κ znaczyłaby, że problem generowania ślepych zaułków w procesie zliczania SAWs metodą brute-force, nie wpływa negatywnie na asymptotyczną złożoność algorytmu.

19 Układ pracy jest następujący. W rozdziale 2 przedstawiamy podstawowe pojęcia i problemy występujące w badanym w pracy modelu SAW. Ponadto, zapoznajemy czytelnika z bieżącymi wynikami dotyczącymi problemu zliczania SAWs. W szczególności omawiamy wszystkie algorytmy, przy pomocy których uzyskiwane były kolejne wyniki. W rozdziale 3 omawiamy metodę przeszukiwania zupełnego oraz własne wyniki uzyskane przy pomocy tej metody. Przeprowadzamy także rozważania dotyczące złożoności obliczeniowej algorytmu Brute Force SAW, będącego realizacją metody brutalnej siły. Rozdział 4 zawiera opis metody macierzy przejścia, przy użyciu której zlicza się obiekty na skończonej kracie. Metoda ta wykorzystywana jest w algorytmach zliczania ścieżek wolnych od przecięć na nieograniczonej kracie: CEG oraz Pruning Algorithm. Rozdział przedstawia oba algorytmy oraz sposób ich efektywnego zrównoleglenia. W pracy omówione zostały także dwa własne algorytmy zliczania ścieżek SAWs. W rozdziale 5 prezentujemy metodę znajdowania ścieżek poprzez wyliczenie możliwych przejść SAW przez skończone kraty, a następnie łączenia tych krat ze sobą. Drugi autorski algorytm opisany jest w rozdziale 6. Nazwaliśmy go algorytmem z pętlą otwartą. Dla obydwóch algorytmów podajemy opis działania i implementacji, omawiamy sposób zrównoleglenia. Podajemy także uzyskane wyniki oraz przeprowadzamy dyskusję na temat wydajności algorytmów. Rozdział 7 dostarcza szczegółowych informacji na temat równoległego komputera dużej mocy, na którym przeprowadzane były obliczenia potrzebne do wykonania niniejszej pracy. Omawiamy także środowisko programowania komputerów równoległych ze wspólną pamięcią wykorzystane w implementacji własnych algorytmów. W szczególności podajemy własne obserwacje na temat efektywności wykonywania procesów wielowątkowych oraz cech alokatorów pamięci. Rozdział 8 zawiera podsumowanie pracy ze wskazaniem na najważniejsze cele pracy i stopień ich osiągnięcia. Wskazujemy także na możliwość kontynuowania badań dla modelu SAW i jemu podobnych, wynikających bezpośrednio z problemów poruszanych w pracy. Następnie zamieszczono dziewięć dodatków. Dodatek A zawiera informacje o wynikach dotyczących wyznaczania dolnych i górnych ograniczeń ważnej dla modelu SAW stałej µ (connective constant). W dodatku B zaprezentowane są wszystkie obliczone dokładne liczby ścieżek SAWs dla dwuwymiarowej kraty kwadratowej. Dodatek C zawiera rozkład liczby ścieżek SAWs na czynniki pierwsze. W dodatku D przedstawiamy pierwsze wyrazy ciągu liczb Catalana. Dodatek E prezentuje ciągi nawiasowe opisane w rozdziale 5. W dodatku F omawiamy zagadnienia związane z generowanie losowej ścieżki SAW oraz prezentujemy własne wyniki badań empirycznych. W dodatku G sygnalizujemy istnienie innych modeli ścieżek dla grafów regularnych, podobnych do modelu SAW. Dodatek H zawiera opis własnej procedury testowej dyrektyw środowiska programowania równoległego OpenMP, przy pomocy której wykonaliśmy testy wybranych dyrektyw synchronizujących wątki. W ostatnim dodatku I zamieściliśmy najważniejsze kody źródłowe programów napisanych w ramach pracy. Na końcu pracy umieśliśmy spis literatury, do której odwołujemy się w pracy oraz oznaczenia stosowane w pracy. 19

20 20 1. Wstęp Do pracy dołączona jest płyta CD o następującym układzie katalogów: CD Dokument_Under Dokumentacja programów wykonana w Understand C/C Dokument_Doxy Dokumentacja programów wykonana w Doxygen +-- Kody_Zrodlowe Wybrane kody źródłowe programów zaimplementowanych w ramach pracy +-- Programy +--Brute_symII +--Perm_kody +--Kwadraty +--Petle +--Wizualizacja Pracę wykonano w systemie L A TEX 2εw środowisku MiKTeX. Wszystkie rysunki wykonano w bezpłatnej 60-dniowej wersji programu Paint Shop Pro. Wykresy sporządzono przy pomocy programu Excel oraz MatLab. Dokumentację kodu źródłowego w formacie HTML wykonano przy użyciu Doxyfile oraz Understand for C/C++, który posłużył także jako narzędzie wykonania diagramów wywołań funkcji programu. Do optymalizacji kodu źródłowego wykorzystano profiler gprof. Obliczenia wykonano na komputerze klasy PC oraz równoległym komputerze dużej mocy obliczeniowej SunFire 15K.

21 2. Zliczanie ścieżek wolnych od przecięć 2.1. Złożoność obliczeniowa problemów zliczania Celem niniejszego podrozdziału jest przedstawienie podstawowych pojęć teorii złożoności obliczeniowej stosowanych w analizie złożonościowej dla problemów zliczania. W oparciu o monografię [57], podamy tu w szczególności definicje klas #P i #P 1 oraz sformułujemy ważne pojęcie redukowalności i zupełności. Mówiąc bardzo nieformalnie, rozwiązanie problemu zliczania dla pewnej ustalonej danej wejściowej x, polega na podaniu liczby obiektów y, które spełniają warunki narzucane przez daną x. Przykładowymi problemami zliczania są: 1. Dla wejściowej formuły Boolowskiej f(x 1,..., x n ) podaj liczbę różnych wartościowań zmiennych x 1,..., x n, które spełniają formułę f. 2. Dla zadanego grafu nieskierowanego G, podaj liczbę różnych ścieżek Hamiltona w G. 3. Dla zadanego grafu skierowanego G nie zawierającego pętli, oraz wierzchołków s i t, podaj liczbę różnych ścieżek w G łączących s z t. Jak łatwo zauważyć, problem którym zajmujemy sie w naszej pracy, można sformułować również jako problem zliczania: dla zadanego n, podaj liczbę ścieżek wolnych od przecięć o długości n. Nietrudno zauważyć, ze problem (3.) daje sie rozwiązać np. przy pomocy algorytmu Floyda-Warshalla [12], który działa w czasie wielomianowym w zależności od długości danej wejściowej. Z drugiej strony istnieje wiele przesłanek, które wskazują, że problemy (1.) i (2.) są na tyle trudne, że nie ma dla nich efektywnych algorytmów. Naturalne jest więc pytanie, jak trudny jest problem zliczania ścieżek wolnych od przecięć, którym zajmujemy się w tej pracy? Czy jego trudność jest zbliżona do trudności problemu (3.) czy też do trudności problemów (1.) i (2.)? W szczególności, gdyby udało się pokazać, że trudność tego problemu jest porównywalna do trudności problemów (1.) i (2.), wówczas otrzymalibyśmy ważny argument, potwierdzający hipotezę, że nie ma formuły zależnej od n wyrażającej dokładną liczbę ścieżek wolnych od przecięć. Poniżej przedstawiamy formalnie pojęcia problem zliczania i porównywalna trudność problemów zliczania. Definicja Niech R Σ Σ będzie relacją binarną na słowach. Relację R nazwiemy wielomianowo rozstrzygalną, jeżeli istnieje deterministyczna maszyna Turinga rozstrzygająca w czasie wielomianowym język {x; y : (x, y) R}. Mówimy, że relacja R jest wielomianowo zrównoważona, jeżeli z tego, że (x, y) R, wynika y x k dla pewnego k 1, czyli długość drugiej składowej jest zawsze ograniczona przez wielomian, którego argumentem jest długość pierwszej składowej (ograniczenie w drugą stronę jest nieistotne). Definicja Niech Q będzie wielomianowo zrównoważoną, wielomianowo rozstrzygalną relacją binarną. Problem zliczania związany z relacją Q wyrażony jest przez następujące pytanie: dla zadanego x, ile istnieje różnych y takich, że (x, y) Q?

22 22 2. Zliczanie ścieżek wolnych od przecięć Przykład Dla problemu (1.) oznaczanego #SAT mamy: Q = y spełnia formułę x Dla problemu (2.), który oznaczamy #HAMILTON PATH mamy: Q = y jest ścieżką Hamiltona w grafie x. Definicja Klasa #P składa się ze wszystkich problemów zliczania związanych z wielomianowo zrównoważonymi, wielomianowo rozstrzygalnymi relacjami. Klasa #P została wprowadzona przez Valianta w pracy [73]. Równoważnie można zdefiniować tę klasę jako zbiór wszystkich problemów obliczalnych przez niedeterministyczne maszyny Turinga w czasie wielomianowym, które dodatkowo posiadają umiejętność podawania liczby rozwiązań akceptujących. W klasie #P Valiant wyrożnił podklasę oznaczaną jako #P 1, składającą się z problemów zliczania, w których dane wejściowe są kodowane unarnie. Mówimy, że problem A redukuje się do problemu B, jeżeli istnieje pewna transformacja R przekształcająca każdy przykład x problemu A do przykładów R(x) problemu B. Stąd, dla problemów decyzyjnych rozwiązanie N problemu B dla danej R(x) daje jednocześnie odpowiedź dla przykładu x problemu A. Dla problemów funkcyjnych, w tym także dla problemów zliczania, aby otrzymać rozwiązanie wyjściowego problemu A, należy wykonać jeszcze dodatkowo transformację S(N). Jeżeli redukcja R nie jest trudna do wyliczenia, wówczas możemy stwierdzić, że problem B jest co najmniej tak trudny jak A. Przyjmujemy, że redukcja R jest obliczalna w czasie wielomianowym i z pamięcią logarytmiczną, w zależności od długości danej wejściowej. Redukcję taką nazywamy redukcją efektywną. Dla problemów zliczających transformacja S jest nazywana redukcją oszczędną, jeżeli jest funkcją identycznościową, tzn. liczba rozwiązań przykładu R(x) jest taka sama, jak liczba rozwiązań x. Redukcje można ze sobą składać. Można zatem uporządkować problemy według ich trudności. Definicja Niech C będzie klasą złożoności i niech L będzie dowolnym językiem. Mówimy, że L jest C-trudny, jeżeli dowolny język L C może być zredukowany do L przy użyciu redukcji efektywnej. Język L jest C-zupełny, jeśli dodatkowo L należy do C. Omawiane wcześniej problemy zliczania #SAT i #HAMILTON PATH są #P-zupełne (dowody można znaleźć np. w [57]). Wiele zliczeniowych wersji NP-zupełnych problemów decyzyjnych jest zupełna w klasie #P. Często dowód #P-trudności dla tych problemów można wykazać stosując te same redukcje, które posłużyły dla dowodów NP-trudności Czym są ścieżki wolne od przecięć? Ideę ścieżek wolnych od przecięć (ang. self-avoiding walk 1, w skrócie SAW) najłatwiej można przedstawić w sposób nieformalny dla przypadku przestrzeni dwuwymiarowej, czyli płaszczyzny. Podamy tu opis podobny do zamieszczonego w pracach [27, 50]: wyobraźmy sobie, że znajdujemy się w centrum miasta, którego ulice są tylko równoległe i prostopadłe 2. Stoimy na jednym ze skrzyżowań i wyruszamy w wędrówkę po mieście zgodnie z zasadą, że nie wolno zawrócić i przez każde ze skrzyżowań możemy przejść co najwyżej jeden raz. Ślad naszej wędrówki utworzy ścieżkę wolną od przecięć. 1 W dalszej cześci pracy będziemy się odwoływać do tego pojęcia skrótem SAW. 2 Świetnym przykładem jest dzielnica Manhattan w Nowym Yorku.

23 2.3. Model SAW 23 W przedmowie do [50] autorzy podają bardzo prostą definicję ścieżki wolnej od przecięć: SAW jest taką ścieżką na kracie, która nigdy nie przechodzi przez jeden punkt więcej niż jeden raz. Formalne zdefiniowanie SAW opiera się na pojęciu grafu nieskierowanego. Jedną z podstawowych klas grafów rozpatrywanych w kontekście SAWs są d-wymiarowe hiperprzestrzenne kraty Z d. Wierzchołki takiego grafu odpowiadają punktom d-wymiarowej przestrzeni Euklidesowej R d o współrzędnych będących liczbami całkowitymi, a krawędzie grafu występują tylko pomiędzy wierzchołkami odpowiadającymi sąsiednim punktom przestrzeni (punkty są sąsiednie, jeżeli dzieli je jednostkowa odległość euklidesowa). Ścieżkę ω definiujemy jako ciąg wierzchołków grafu (ω 0, ω 1,..., ω n ), gdzie ω 0 jest wierzchołkiem startowym. Wierzchołki w ciągu muszą spełniać warunki: 1. ω i+1 ω i = 1 2. ω i ω j, dla każdego 0 i < j n. Długość ścieżki ω, oznaczana przez ω, określa liczbę zajętych przez ścieżkę krawędzi grafu. Ścieżka o długości n przechodzi przez n+1 wierzchołków. Zbiór wszystkich SAWs o długości n oznaczać będziemy Ω n, a moc tego zbioru przez c n. Rozważania niniejszej pracy dotyczyć będą głównie dwuwymiarowej kraty kwadratowej. Prace naukowe prowadzone na temat modelu SAW dotyczą także wielu innych grafów, na przykład kraty trójkątnej lub kagome [44], dodatkowo w wymiarach d 2 (zobacz rysunek 2.1 i 2.2), a także grafów półregularnych, jak na przykład krata (3.12) 2 czy (4.8 2 ) [36]. Innym ciekawym przykładem grafów, na których bada się SAWs jest dywan Sierpińskiego [7, 47]. Czasami termin self-avoiding walk tłumaczony jest na język polski jako ścieżka z samounikaniem, a nie ścieżka wolna od przecięć. W naszej pracy stosować będziemy konsekwentnie termin ścieżka wolna od przecięć. Rysunek 2.1. Krata kwadratowa (po lewej) i trójkątna (po prawej) 2.3. Model SAW Zagadnienia związane ze ścieżkami (nie tylko SAWs) w nieskierowanych grafach regularnych prowadzone są intensywnie od wielu lat. Pierwsze systematyczne prace prowadzono już w latach sześćdziesiątych [1, 13, 14, 16, 39, 41, 69, 71]. Początkowo był to temat badań prowadzonych przez fizyków i chemików, gdyż SAW służył m.in.

24 24 2. Zliczanie ścieżek wolnych od przecięć Rysunek 2.2. Krata plaster miodu (po lewej) i kagome (po prawej) jako model opisujący budowę polimerów liniowych 3. Zdecydowaną większość najważniejszych prac na temat modelu SAW zamieszczono w takich czasopismach jak: Journal of Chemical Physics, Journal of Mathematical Physics, Journal of Statistical Physics, Molecular Physics, Journal of Physics A: Mathematical and General. Dostrzega się trzy podstawowe problemy związane z SAWs, wynikające bezpośrednio z badań nad polimerami: Ile jest różnych ścieżek o określonej długości n? Jaka jest średnia odległość R 2 n = 1 c n Ω n (ω 0 ω n ) 2 pomiędzy krańcami ścieżki dla losowo wybranej SAW o długości n? Generowanie losowej ścieżki o długości n z rozkładem jednostajnym (zob. dodatek F). Jak dotąd nie udało się znaleźć pełnego rozwiązania dla żadnego z powyższych problemów, a dokładne rozwiązania znane są jedynie dla małych wartości n. Nie udało się dotychczas znaleźć wzorów, które pozwoliłyby wyliczyć szukane wartości. Potrzeby fizyków i chemików zaspokoiły częściowo algorytmy aproksymacyjne [5, 33, 60] i symulacje komputerowe. Należy zwrócić uwagę na kilka bardzo interesujących cech SAWs: 1. Liczba ścieżek jest całkowicie określona - nie ma tu żadnego czynnika niedeterministycznego - a mimo to znalezienie tej liczby nawet dla stosunkowanych małych wartości n jest zadaniem bardzo trudnym. 2. Pomimo, że liczba ścieżek o określonej długości n jest ogromna nawet dla niewielkich wartości n (np. dla n = 39 liczba ta jest już 18 cyfrowa, dla n = 49 jest 23-cyfrowa, a dla n = 70 ma aż 31 cyfr) to ich liczba jest względnie mała w zestawieniu z liczbą wszystkich ścieżek, jakie można poprowadzić na kracie. Np. dla n=50 na jedną ścieżkę SAW przypada około wszystkich ścieżek. W świecie matematyki problem dokładnego zliczania SAWs można porównać do zagadnień związanych z wyznaczeniem gęstości położenia liczb pierwszych. W obu 3 Polimer jest cząsteczką chemiczną powstałą w wyniku reakcji polimeryzacji. Reakcja ta polega na łączeniu się wielu jednakowych cząsteczek, zwanych monomerami. Ze względu na strukturę, polimery dzielimy na liniowe, rozgałęzione i usieciowane. Polimery liniowe są wynikiem łączenia się monomerów w jeden łańcuch, w skład którego może wejść nawet 10 5 monomerów.

25 2.3. Model SAW 25 przypadkach zagadnienie jest ściśle deterministyczne, dokładnie przebadane, opracowane są algorytmy aproksymacyjne, ale wzory pozwalające wyliczyć szukane wielkości pozostają zagadką. Powiązanie SAW z liczbami pierwszymi jest znacznie większe niż przytoczona analogia. Okazuje się (zob. dodatek C), że w rozkładzie liczb c n występują bardzo duże liczby pierwsze. Pozwala to przypuszczać, że w związku z tym nie istnieje formuła, obliczalna w czasie wielomianowym, której wynikiem jest c n. Problem zliczania SAWs jest wyzwaniem także w dziedzinie złożoności obliczeniowej. W 1979 r. Valiant pokazał w [74], że problem policzenia ścieżek s-t jest #P-zupełny, zarówno dla grafów skierowanych jak i nieskierowanych. W [43] wykazano, że dowód Valianta wskazuje również #P-zupełność problemu zliczania SAWs w dowolnym grafie. Welsch postawił w 1993 r. pytanie, czy problem zliczania SAWs w dwuwymiarowej kracie jest #P 1 -zupełny. Autorzy pracy [43] częściowo odpowiadają na pytanie Welscha, pokazując, że problemem #P-zupełnym jest zliczania SAWs na podgrafie dwuwymiarowej kraty. Szeroką analizę problemu zliczania różnych obiektów na kracie przedstawiono w pracy [62]. Omawia sie tam w szczególności SAWs, a także pewne typy ścieżek ograniczonych, tzw. TSRWs (ang. two-step-restricted walks) [24]. Są to ścieżki SAW, w których kierunek położenia n-tego kroku zależy od kierunku n 1 kroku. W dwuwymiarowej kracie kwadratowej, przy założeniu, że ścieżka jest wolna od przecięć, dla każdego z 4 możliwych położeń i-tego kroku możemy wykonać 3 różne następne (i + 1) kroki, co generuje 12 konfiguracji. Definiując model ścieżki TSRW specyfikujemy regułę, zgodnie z którą ścieżka jest poprawnie zbudowana. Możliwe jest zatem zdefiniowanie 2 12 = 4096 różnych modeli ścieżek TSRW. Przykładowe ścieżki TSRW: 3-choice, w których po kroku w kierunku pionowym 4 (N lub S) można wykonać krok w dowolnym kierunku (oprócz cofnięcia się), ale po kroku w kierunku poziomym (W lub E) nie można wykonać skrętu zgodnego z ruchem wskazówek zegara (czyli N dla W i S dla E), 2-choice, ścieżki 3-choice, w których zakazane jest wykonanie dwóch kolejnych ruchów w kierunku pionowym (N lub S), ścieżki spiralne (ang. spiral walks), w których zabronione jest wykonywanie skrętów zgodnie z ruchem wskazówek zegara, ścieżki częściowo skierowane (ang. partially directed walks), w których zabronione są kroki w kierunku W. Wówczas przecięcie ścieżki z dowolną pionową linią daje graf spójny (graf, w którym każda para wierzchołków jest połączona drogą), ścieżki skierowane (ang. directed walks), w których dopuszczalne są jedynie kroki w kierunkach północnym (N) i wschodnim (E). Ponieważ ogólny problem zliczania SAWs jest bardzo trudny, prowadzenie badań nad modelami ograniczonymi, takimi jak TSRWs, ma na celu wyjaśnienie przyczyn i natury trudności tego problemu, jak również wyznaczenie granic, poniżej których problem staje się efektywnie rozwiązywalny Zastosowania modelu SAW Polimery liniowe w roztworach przybierają kształt, który jest całkowicie losowy, z tym wyjątkiem, że dwie cząsteczki, nie mogą zajmować tego samego miejsca w przestrzeni (ang. excluded volume effect). Stąd często polimery liniowe modeluje sie przy 4 Dla wygody kierunki kroków na dwuwymiarowej przestrzeni będziemy oznaczać pierwszymi literami angielskich nazw kierunków geograficznych: North, East, South, West.

26 26 2. Zliczanie ścieżek wolnych od przecięć użyciu SAWs. Jednym z typów takich polimerów są białka, składające się z aminokwasów [28]. Dwa białka o takiej samej sekwencji aminokwasów przybierają taką samą postać (kształt) w trzech wymiarach. Celem badań naukowych jest zdobycie umiejętności przewidywania struktury białka tylko na podstawie informacji o jego budowie w jednym wymiarze, czyli na podstawie informacji o kolejności aminokwasów (kod genetyczny przechowuje tylko taką informację o białku). Niestety model białek jest zbyt skomplikowany, by go efektywnie i dokładnie symulować. Z tego powodu opracowuje się modele prostsze, nie oddające pełnej charakterystyki białek, a tylko ich podstawowe cechy. W jednym z najprostszych takich modeli białko przedstawia się jako SAW. Chociaż przy tym podejściu najlepszym modelem byłby SAW w przestrzeni trójwymiarowej, to model dwuwymiarowy jest również cenny - używa się go do badań nad polimerami ułożonymi pomiędzy dwoma równoległymi, położonymi blisko siebie płaszczyznami [63, 64]. Nie przeszkadza także fakt, że model SAW jest dyskretny, a polimery są obiektami ciągłymi dla dużych wartości n różnica ta jest wysoce nieistotna [63]. Liczba ścieżek o długości n stanowi informację o entropii ułożeniowej (ang. configurational entropy) cząsteczki, a odległość pomiędzy końcami ścieżki Rn 2 stanowi ważny parametr w badaniach lepkości roztworów polimerowych. SAWs są także powiązane z systemami spinowymi. De Gennes zaobserwował w 1972 r., że ścieżkę SAW można użyć także jako model ferromagnetyzmu zero-component. Spostrzeżenie to nie wniosło nowych dokładnych wyników dla problemów związanych z modelem SAW, ale pomogło wyliczyć wartości stałej γ (critical exponent, którą omawiamy w 2.4.3) dla wymiarów d = 2, 3, 4 oraz analogicznej stałej ν dla problemu obliczenia średniej odległości pomiędzy krańcami ścieżki dla losowo wybranej SAW o długości n. Podstawowym modelem spinowym jest model Isinga. Model ten najczęściej rozpatruje się w hiperkubicznej kracie Z d. Zdefiniujmy Λ jako zbiór wierzchołków w Z d należących do d-wymiarowej kostki [ L, L] d, dla L 1. Do każdego wierzchołka x należącego do Λ przypisujemy zmienną S (x), która może przyjmować tylko dwie wartości: +1 lub 1. Wartości zmiennej S (x) odpowiadają możliwym stanom spinów. Następnie, przy założeniu braku wpływu środowiska zewnętrznego na Λ, liczona jest energia konkretnej reprezentacji spinowej, czyli Hamiltonian H(Λ) = J S (x) S (y), x,y gdzie notacja x,y oznacza sumę po wszystkich parach wierzchołków x i y, będącymi najbliższymi sąsiadami w Λ. Stała J, zwana całką wymiany, określa siłę interakcji pomiędzy sąsiednimi spinami 5 i najczęściej zakłada się, że J jest niezależne od x i y. Spiny, dążąc do minimalizacji tej energii, mogą zmieniać swoje stany, a prawdopodobieństwo zmiany zależy m.in. od temperatury otoczenia. Po pewnym czasie układ dochodzi do równowagi z otoczeniem i staje się stabilny, co charakteryzuje się pewnym uporządkowaniem spinów. Im niższa temperatura, tym coraz większy obszar uporządkowania układu 6. W odpowiednio niskiej temperaturze, zwanej temperaturą uporządkowania, uporządkowanie rozciąga się na cały obszar Λ. Istnieje także druga wyróżniona wartość temperatury temperatura (lub punkt) Curie T c, powyżej której dla d 2 układ jest całkowicie chaotyczny. W punkcie Curie następuje tzw. przejście fazowe (ang. phase 5 Jeżeli J > 0 stan najniższej energii uzyskiwany jest, gdy spiny są jednakowo ułożone, czyli przyjmują jednakowy stan i tworzy się ferromagnetyk. Dla J < 0 tworzy się antyferromagnetyk. 6 Pod adresami millonas/applets/ising/index.htm oraz bulaty/mownit/ising/ dostępne są aplety Javy demonstrujące opisane zachowanie się spinów.

27 2.4. Problem zliczania 27 transition) 7, po którym zmieniają się właściwości fizyczne próbki: na przykład magnesy przestają być magnesami. Z temperaturą T c związanych jest kilka stałych, które są analogiczne do stałych występujących w modelu SAW [33, 50]. Na przykład wrażliwość (ang. susceptibility), którą definiujemy następująco χ(t ) = d 1 x S (0) S (x), zachowuje się rozbieżnie dla T T c, zgodnie z χ(t ) const.(t c T ) γ. W pracy [16] znajdują się pierwsze spostrzeżenia na temat relacji pomiędzy modelem SAW i modelem Isinga. Pokazana jest zależność µ ω, gdzie ω jest pewną stałą modelu Isinga. Co więcej, wysunięta jest hipoteza, że model SAW jest znacznie trudniejszy do badania niż model Isinga. Uogólnieniem modelu Isinga jest model N-wektor (lub O(N)) opisany po raz pierwszy przez Stanleya w 1968 r. W tym modelu spin jest n-wymiarowym wektorem, przy czym wymiar ten nie jest powiązany w żaden sposób z wymiarem przestrzeni d, w której rozpatrywany jest układ spinów. Hamiltonian ma teraz postać H(Λ) = J S (x) S (y), x,y gdzie oznacza zwykły euklidesowy iloczyn skalarny. Model ten może być rozpatrywany w granicy, gdy n 0, kiedy to otrzymujemy ścieżkę SAW: pewne stałe przyjmują wartości takie, jak stałe opisujące model SAW. Właśnie tego odkrycia dokonał de Gennes. Bardzo wiele informacji na temat powiązania modelu SAW i N-wektor, znajduje się w [33, 50], gdzie podana jest również bardzo obszerna literatura na ten temat. Model SAW znajduje zastosowanie także w rozwiązywaniu problemów w bioinformatyce. Przykładem [59] jest badanie wpływu promieniowania na rozłam DNA, które modeluje się jako SAW. Ścieżki SAW wykorzystuje się także przy projektowaniu algorytmów znajdowania przecięć dwóch sieci (ang. mesh intersection) [42]. W literaturze znajdują się opisy i przykłady wielu innych zastosowań, głównie z dziedziny fizyki i chemii [29] Problem zliczania Ścieżek SAWs łatwo policzyć nie można Na wstępie pozwolimy sobie na małą dygresję na temat ścieżek o nieco mniej rygorystycznych wymaganiach niż SAWs oraz bez jakichkolwiek wymagań i porównamy je z SAWs. Rozważania dotyczyć będą krat kwadratowych. Ścieżki losowe (ang. random walks) nie posiadają żadnych ograniczeń na wybór kierunku kolejnego kroku; wybranie każdego z kierunków określone jest przez jednakowe prawdopobieństwo p = 1. W każdym kroku można wybrać odcinek jednostkowy 2d w jednym z 2d kierunków, a zatem ścieżek spełniających warunek ω = n jest (2d) n. 7 Model Isinga został wymyślony przez Lenza na początku lat dwudziestych ubiegłego wieku. Jego rozwiązanie dla d = 1 przedstawił Ising w 1925 r., pokazując, że dla tego przypadku przejście fazowe nie występuje. W latach czterdziestych Onsager rozwiązał model dla d = 2 i dopiero wówczas model stał się użyteczny. Nazwa jednak pozostała model Isinga.

28 28 2. Zliczanie ścieżek wolnych od przecięć Ścieżki bez zawracania (ang. nonreversing walks) są to ścieżki losowe, w których w k-tym kroku nie wolno pójść w kierunku przeciwnym do kierunku kroku (k 1)-szego. Również w tym przypadku bardzo łatwo jest policzyć liczbę ścieżek o długości n. W pierwszym kroku do wyboru są 2d kierunki, a w następnych zawsze są (2d 1) kierunki. Zatem liczba ścieżek równa się 2d(2d 1) n 1, co dla dużych n zbiega do (2d 1) n. SAW jest ścieżką bez zawracania, która dodatkowo jest wolna od przecięć. Czy można policzyć, podobnie jak dla ścieżek losowych i ścieżek bez zawracania, ile jest SAWs o długości n? Niestety, jak dotąd nikomu nie udało się podać wzoru, który pozwoliłby wyliczyć wartość c n. Trudność wynika z faktu, że liczba możliwych do wykonania kroków jest zmienna w pierwszym kroku można pójść w 2d kierunkach, w drugim i trzecim w (2d 1) kierunkach, ale w czwartym są (2d 1) lub (2d 2) możliwości w zależności od poprzednich kroków. W piątym i następnych krokach liczba dostępnych kierunków jest uzależniona od wszystkich poprzednich kroków. Cechą odróżniającą SAWs od pozostałych wymienionych modeli ścieżek, jest możliwość wystąpienia blokady, tzn. takiej sytuacji, gdy nie jest możliwe wykonanie jakiegokolwiek kroku, gdyż wszystkie sąsiednie wierzchołki grafu są już zajęte (rysunek 2.3). Na dwuwymiarowej Rysunek 2.3. SAW w pułapce. kracie prawdopobieństwo wygenerowania ścieżki SAWs o długości n bez wystąpienia blokady zbiega do zera wraz ze wzrostem n. Wynika to z twierdzenia udowodnionego w 1921 r. przez George a Pólya [80], które mówi, że w jedno- i dwuwymiarowej kracie prawdopodobieństwo powrotu losowej ścieżki (ang. random walk) do początku ścieżki wynosi 1 8. Dochodzi więc do pewnego paradoksu: z jednej strony ścieżek jest tak mało, że prawdopodobieństwo wylosowania SAW ze wszystkich ścieżek zbiega do zera, a z drugiej strony jest ich tak dużo, że wyliczenie wszystkich jest zadaniem niezwykle trudnym. Analizując uzyskane dotąd dokładne wyniki dla n < 51 szacunkowa liczba SAWs w dwóch wymiarach to n (więcej informacji na temat szacowania liczby SAWs podajemy w punkcie 2.4.3). Co więcej, dość długo nie wykluczano, że dla pewnych wartości n prawdziwa jest nierówność c n+1 < c n. Dopiero Twierdzenie 2.4.1, udowodnione w 1990 r. przez George a L. O Briena [53], pokazało, że to przypuszczenie jest fałszywe: Twierdzenie Dla d 2 oraz wszystkich n, prawdziwa jest nierówność c n c n+1. 8 Dla kolejnych wymiarów prawdopodobieństwo powrotu do początku maleje: dla d = 3 wynosi ono 0.34, dla d = , a dla d = [64].

29 2.4. Problem zliczania Symetria Zarówno dla teoretycznych rozważań nad ścieżkami SAWs jak i dla prób praktycznego policzenia ścieżek na przykład przy pomocy programów komputerowych nie bez znaczenia jest symetria jaką można dostrzeć w ścieżkach. Dla ułatwienia, rozważania przedstawione zostaną dla przestrzeni dwuwymiarowej. Pierwsze spostrzeżenie to fakt, że każdą ścieżkę można obrócić o 90, 180 i 270 stopni. Dzięki temu uzyskujemy czterokrotną redukcję problemu wystarczy policzyć ścieżki, których pierwszy krok wykonany jest na przykład w kierunku północnym (N), a wynik pomnożyć przez cztery. Innym typem symetrii jest symetria zwierciadlana względem: prostej pionowej, poziomej i dwóch prostych skośnych. Aby z niej skorzystać można rozpatrywać tylko takie ścieżki, których pierwszy skręt jest w określonym kierunku, na przykład wschodnim (E). W ten sposób dla jednej wygenerowanej ścieżki możemy otrzymać osiem różnych sytuacji. Jednak uzyskany wynik nie będzie stanowić jednej ósmej liczby wszystkich ścieżek obroty ścieżek bez skrętów dają te same ścieżki, co symetria względem prostych, zatem od uzyskanego wyniku należy odjąć liczbę cztery. Na rysunku 2.4 pokazano generowanie ścieżek o długości n = 3. W tabeli 3.1 na stronie 38 znajdują się wyniki czasu działania programu realizującego algorytm brutalnej siły dla trzech podejść: bez zastosowania symetrii, z symetrią obrotową, a także ze wszystkimi opisanymi symetriami. Rysunek 2.4. Symetria SAWs ścieżki można obracać i odbijać względem czterech prostych symetrii, co dla zadania policzenia ścieżek o długości n zmniejsza liczbę ścieżek potrzebnych do wygenerowania prawie ośmiokrotnie. Dla ścieżek bez zakrętów symetria daje ten sam efekt co obrót, dlatego należy wyeliminować te sytuacje, które zaznaczono ciemniejszym tłem Można szacować Ze względu na duże trudności dokładnego policzenia SAWs wykonano wiele prac w zakresie szacowania liczby SAWs, podając odpowiednio dolne i górne ograniczenia. Oczywistym i bardzo grubym ograniczeniem górnym jest 2d(2d 1) n 1, tj. liczba ścieżek

30 30 2. Zliczanie ścieżek wolnych od przecięć bez zawracania, a dolnym d n liczba ścieżek, które wykonują kroki tylko w jednym kierunku w każdym wymiarze. Otrzymujemy zależność: d n c n 2d(2d 1) n 1. (2.1) Innym oczywistym ograniczeniem górnym jest zależność c n+1 (2d 1)c n. (2.2) W 1954 r. Hammersley i Morton pokazali istnienie w każdym wymiarze d 2 granicy nazwanej connective constant: µ = n lim c 1/n n. (2.3) Stała µ jest miarą wyrażającą średnią liczbę możliwych ruchów dla długiej ścieżki SAW. Nietrudno zauważyć, że z (2.1) i (2.3) wynika nierówność d µ 2d 1. (2.4) Jest to bardzo zgrubne oszacowanie µ, gdyż takie były również ograniczenia w (2.1). Znalezienie jak najdokładniejszych oszacowań dla µ jest dużym wyzwanie matematyki dyskretnej i innych działów zajmujących się SAWs. W pracy [50], korzystając z własności subaddytywności ciągu {log c n } pokazany jest związek: µ n c n, z którego wynika następujące oszacowanie dla µ µ c 1/n n. (2.5) Niestety jest ono bardzo powoli zbieżne do µ. Lepszym ograniczeniem jest µ ( cn c 1 ) 1/(n 1) n 2. Wiele ograniczeń górnych stałej µ wyprowadza się korzystając z pojęcia SAW z pamięcią (pamiętanych jest jedynie τ wierzchołków, które odwiedzono w ostatnich τ krokach; wymaga się, by jedynie te wierzchołki nie były odwiedzone ponownie w kolejnym kroku), a ograniczenia dolne z tzw. pomostów (ang. bridge). Oszacowania dokładnych wartości wykonuje się przy pomocy metod ekstrapolacji uzyskanych wyników w zliczaniu ścieżek SAWs. W tabeli 2.1 zebrano najlepsze uzyskane wyniki związane z szacowaniem wartości µ dla wymiarów od 2 do 8. W dodatku A przedstawiono postępy w uzyskiwaniu tych wyników na przestrzeni lat. Wzór (2.3) można interpretować następująco: dla dużych wartości n wartość c n jest rzędu µ n. Można więc przypuszczać, że zachodzi równość c n+1 lim = µ, n c n jednak do tej pory udało sie to udowodnić tylko dla wymiarów d=1 (w tym przypadku dowód jest trywialny 9 ) i d 5. W 1963 roku Harry Kesten udowodnił w pracy [39] dla wszystkich wymiarów prawdziwość równości c n+2 lim = µ 2. n c n 9 Ciąg c n ma postać (1,2,2,2,... ), zatem µ = lim n 2 1/n = 1 oraz lim n c n+1 lim n 2 2 = 1. c n =

31 2.4. Problem zliczania 31 Tabela 2.1. Najlepsze oszacowania µ (connective constant) dla krat hiperkubicznych d Ograniczenie dolne Wartość szacowana Ograniczenie górne a ± e b a ± f c a ± g b a ± h d a ± h d ± h ± h Literatura: a) T. Hara, G. Slade, A. D. Sokal (1993) [26], b) A. Pönitz, P. Tittmann (2000) [58] c) D. MacDonald et al (2000) [46], d) J. Noonan (1998) [52], e) Rechnitzer, Janse van Rensburg (2002) [61], f) A. J. Guttmann (1994), g) A. J. Guttmann (1978), h) A. L. Owczarek, T. Prellberg (2001) [54] Ważną hipotezą fizyki statystycznej wynikającej z powiązań modelu SAW z modelem Isinga jest [16], że dla liczby ścieżek SAW c n zachodzi zależność c n Aµ n n γ 1, (2.6) gdzie A (amplituda) jest pewną stałą zależną od wymiaru przestrzeni, µ jest stałą connective constant, a γ jest stałą nazwaną critical exponent i jej wartość również zależy od wymiaru przestrzeni. Natomiast symbol należy rozumieć następująco: zapis f(n) g(n) oznacza, że f jest asymptotycznie równa g, co wyrazić można f(n) lim n g(n) = 1. Przypuszczalne wartości 10 γ to [50]: 43 dla d=2, dla d=3 oraz 1 dla d 4. Dla 32 d=4 zależność (2.6) skorygowana jest czynnikiem logarytmicznym c n Aµ n n γ 1 (log n) 1/4, (2.7) a przyjmując wartość γ = 1 otrzymujemy c n Aµ n (log n) 1/4. (2.8) Stała γ ma bardzo duże znaczenie. Po pierwsze przypuszcza się, że jest ona uniwersalna, tzn. zależna prawie jedynie od wymiaru przestrzeni. W przeciwieństwie do γ, stała µ nie jest uniwersalna, a zatem wyraża mniej informacji niż γ. Stała γ jest na przykład identyczna dla różnych dwuwymiarowych krat, takich jak krata kwadratowa i typu plaster miodu. Jest to cecha nie bez znaczenia dla badań nad polimerami, gdyż oznacza ona, że pewne uproszczenia w ich modelowaniu nie wpłyną negatywnie na wyniki. Po drugie, fakt, że dla wymiarów d 4 stała γ jest identyczna jak dla wszystkich ścieżek losowych, oznacza niewielki wpływ warunku o braku samoprzecięć dla tych wymiarów Można zauważyć, że zależność (2.6) opisuje także zwykłe ścieżki losowe (random walks), z parametrami: A = 1, µ = 2d, γ = Uwaga ta nie dotyczy problemu średniej odległości pomiędzy końcami ścieżki: nawet dla wymiarów d > 4 odległość ta jest większa niż dla wszystkich losowych ścieżek wynika to z wartości stałej D występującej we wzorze opisującym tę odległość: Rn 2 Dn 2ν. Dla wszystkich ścieżek losowych stałe przyjmują wartości D = 1, ν = 1/2. Dla SAWs w przestrzeni ponad czterowymiarowej ν = 1/2, ale D > 1, przy czym lim d D = 1. Ważnymi pracami na temat stałej ν są pozycje [31, 32]

32 32 2. Zliczanie ścieżek wolnych od przecięć Historia uzyskanych dokładnych wyników Prace nad wyznaczeniem dokładnej liczby wszystkich ścieżek na kwadratowej kracie dwuwymiarowej prowadzone są już od ponad połowy ubiegłego wieku i wraz z upływem czasu pojawiają się wyniki dla coraz większych wartości n. W tabeli 2.2 przedstawiono dotychczasowe osiągnięcia. Tabela 2.2. Postępy w liczeniu SAWs na przestrzeni lat Max n Autorzy wyniku Publikacja 16 M. E. Fisher, M. F. Sykes 1959 [16] 18 M. F. Sykes 1961 [69] 24 M. F. Sykes, A. J. Guttmann, M. G. Watts oraz P. D. Roberts 1972 [71] 27 A. J. Guttmann 1987 [21] 29 A. J. Guttmann oraz J. Wang 1991 [25] 30 D. MacDonald, D. L. Hunter, K. Kelly oraz N. Jan 1992 [45] 34 B. Masand, U. Wilensky, J. P. Massar oraz S. Redner 1992 [51] 39 A. R. Conway, I. G. Enting oraz A. J. Guttmann 1993 [8] 51 A. R. Conway oraz J. Guttmann 1996 [11] 71 I. Jensen 2004 [35] Dokładne wartości c n dla 0 n 71 w dwuwymiarowej kracie kwadratowej znajdują się w dodatku B Algorytmy dokładne Przedstawione zostaną teraz krótkie opisy metod, przy pomocy których ustanowiono kolejne rekordy w zliczaniu SAWs. n = 16 - Chain Counting Theorem (M. E. Fisher, M. F. Sykes 1959 [16]) Dokładny opis metody został podany w pracy jednego ze współautorów w 1961 r., dlatego sposób uzyskania wyniku podajemy w następnym punkcie. n = 18 - Chain Counting Theorem (M. F. Sykes 1961 [69]) Rozważania rozpoczynają się od stwierdzenia, że dla ścieżki SAW o długości n 1 można wykonać, nie naruszając zakazu powrotu (nonreversing walk), (2d 1) = σ kroków, gdzie d oznacza wymiar kraty. Część utworzonych w ten sposób ścieżek o długości n nadal pozostanie wolna od przecięć, ale w niektórych przypadkach dojdzie do przecięcia się ścieżki. Przecięcia te mogą powstać na dwa sposoby, przedstawione schematycznie na rysunku 2.5. Graf (a) typu kijanka (ang. tadpole) po- Rysunek 2.5. Grafy liniowe powstałe po przecięciu się SAW po wykonaniu n-tego kroku: (a) kijanka, T r,s ; (b) wielokąt, p n. wstał po przecięciu się ścieżki po r krokach od początku ścieżki. Oznaczamy przez T r,s liczbę takich grafów. Graf (b) przedstawia sytuację, gdy przecięcie nastąpi na

33 2.4. Problem zliczania 33 początku SAW otrzymujemy wówczas obiekt zwany wielobok (ang. polygon). Oznaczamy liczbę takich wieloboków przez p n. Stąd n 3 c n = σc n 1 2 T r,n r 2np n. (2.9) r=1 Równanie (2.9) pozwala na wyliczenie liczby SAWs o długości n na podstawie liczby SAWs o długości n 1 oraz liczby kijanek i wieloboków rzędu n, tzn. zawierających n kroków. W celu wyliczania tych wartości stosuje się tę samą technikę: po dołożeniu jednego kroku do ogona kijanki T x 1,y możemy otrzymać kijankę T x,y albo jeden z obiektów przedstawionych na rysunku 2.6 sztangielka (ang. dumbbell), ósemka (ang. orthodox figure-eight) i gwiaździsta ósemka (ang. star figure-eight), których liczbę oznaczamy odpowiednio przez (r, s, t) d, p r p s i (r, s, t) s. Autorzy omawianej pracy zamieścili komentarz na temat nazewnictwa tych obiektów, a także wprowadzają uogólnioną nazwę dla nich wszystkich uogólnione ósemki (ang. generalized figure-eights). Rysunek 2.6. Grafy liniowe powstałe po przedłużeniu ogona kijanki o jeden krok: (a) sztangielka, (r, s, t) d ; (b) ósemka p r p s ; (c) gwiaździsta ósemka (r, s, t) s. r + s + t = x + y = n. Zatem wielkość c n można wyrazić jako zależność od c n 1, liczby wieloboków rzędu n oraz od liczby obiektów przestawionych na rys Autorzy metody przyznają, że ta zależność nie jest oczywista i przeprowadzają analizę, która doprowadza do równania: c n+1 = 2σc n σ 2 c n 1 +2np n 2(n+1)p n+1 +8 (r, s, t) d +8 p r p s +12 s, t) s n+1 n+1 n+1(r, (2.10) gdzie n > 1, a sumowanie odbywa się po wszystkich obiektach uogólnionych ósemek rzędu n + 1. Rekurencyjny wzór (2.10) nosi nazwę chain counting theorem i pozwala policzyć ścieżki wolne od przecięć wykorzystując jako dane dodatkowe tylko liczebność uogólnionych ósemek, których jest znacznie mniej niż ścieżek. Metoda ta umożliwiła autorom pracy znalezienie liczby SAWs o długości do n = 18 dla dwuwymiarowej kraty kwadratowej, n = 24 dla kraty plaster miodu, n = 11 dla kraty trójkątnej oraz trójwymiarowej kraty kwadratowej, n = 9 dla kraty bcc (ang. body-centered cubic lattice) oraz n = 8 dla kraty fcc (ang. face-centered cubic lattice). n = 24 - Chain Counting Theorem (M. F. Sykes i in [71]) W pracy [70] oraz jej drugiej części dotyczącej krat trójwymiarowych przedstawiono badania nad modelem Isinga, w wyniku których otrzymano nowe wyniki dotyczące

34 34 2. Zliczanie ścieżek wolnych od przecięć wrażliwości (ang. susceptibility) modelu na wysokie temperatury. Analogiczne wyniki dotyczące modelu SAW przedstawiono właśnie w pracy [71], bazując na chain counting theorem opisanym w pracy [69]. n = 27 - Dimerization Algorithm (A. J. Guttmann 1987 [21]) Autor pracy [21] przeprowadził obliczenia, które trwały 30 dni, na maszynie DEC Micro Vax II używając do tego celu zmodyfikowanego algorytmu dimeryzacji Torriego i Whittingtona ([72]), który wzorowany jest na algorytmie dimeryzacji Suzuki (K. Suzuki 1968 Bull. Chem. Soc. Japan ) oraz Alexandrowicza (1969, [1]). Torrie i Whittington zliczali ścieżki NAWs (ang. first-neighbour-avoiding walks), które są ścieżkami SAWs posiadającymi dodatkowe ograniczenie [36, 65, 72]: dwa sąsiednie wierzchołki grafu mogą należeć do ścieżki tylko wtedy, gdy w ścieżce też są sąsiednie. Algorytm generowania NAWs rzędu (n + m) polega na generowaniu, przy pomocy standardowych metod (Martin 1962), NAWs rzędu n oraz rzędu m. Następnie wykonuje się łączenie każdej ścieżki rzędu n z każdą ścieżką rzędu m - otrzymany zbiór ścieżek zawiera wszystkie ścieżki NAWs rzędu n + m oraz ścieżki rzędu n+m nie będące NAW lub nawet SAW. Eliminację zbędnych ścieżek wykonuje się poprzez wykonanie operacji przecięcia bitowych reprezentacji łączonych ścieżek jeżeli wynik operacji jest wartością niezerową, wówczas ścieżkę należy odrzucić. n = 29 - Dimerization Algorithm (A. J. Guttmann i J. Wang 1991 [25]) Algorytm dimeryzacji opisany został już w poprzednim punkcie. Obliczenia, które doprowadziły do policzenia ścieżek SAWs o długości n = 29 trwały około 29 dni i wykonane zostały na komputerze Masscomp W tym przypadku nowy rekord uzyskano dzięki postępowi technologicznemu w dziedzinie budowania komputerów. n = 30 - Trimerization (D. MacDonald i in [45]) Algorytm ten również był wzorowany na pracy Torriego i Whittingtona [72], a jego główną ideą jest budowanie ścieżek SAWs o długości n = 2x + y z dwóch krótkich ścieżek o długości x i jednej długiej w sposób pokazany na rys Rysunek 2.7. Budowanie ścieżki SAW z trzech innych: do obydwóch końców ścieżki o długości y dołączane są ścieżki o długości x. W fazie precomputingu wyliczane są dwie macierze: A i B. W każdej komórce macierzy (właściwie wektora) A[i], gdzie i (1, c x ), pamiętana jest lista punktów (tzn. ich współrzędnych) należących do i-tej ścieżki SAW o długości x. Następnie liczona jest macierz B[p], w której dla każdego punktu p pamiętana jest lista wszystkich ścieżek o długości x przechodzących przez punkt p (czyli lista indeksów z macierzy A). Ścieżki znajdujące się na liście dla punktu p nie mogą być dodane jako pierwszy segment całej ścieżki, jeżeli punkt p jest już zajęty przez ścieżkę y. Macierz B liczona jest dla punktów znajdujących się w odległości x od początku układu współrzędnych (odległość liczona jest jako suma wartości bezględnych współrzędnych punktu) i służy do policzenia, ile ścieżek długości x może być dołączonych do

35 2.4. Problem zliczania 35 konkretnej ścieżki o długości y. Zarówno ścieżka y jak i jedna ze ścieżek x zaczynają się w początku układu współrzędnych. Na początku generowana jest ścieżka SAW o długości y przy pomocy zmodyfikowanej wersji algorytmu typu brute-force (zob. str. 41). Dodatkowo pamiętana jest lista liczb mówiących, ile punktów jest wspólnych dla znalezionej ścieżki y ze wszystkimi ścieżkami x. Przykładowo, liczba 2 oznacza, że ścieżki przecinają się w dwóch miejscach. Następnie podobną analizę przeprowadza się dla procesu dołączenia ścieżki x do drugiego końca ścieżki y. Należy jeszcze wykluczyć sytuację, gdy obie ścieżki x się przecinają taka sytuacja może się zdarzyć w odległości mniejszej lub równej 2x od początku układu współrzędnych. W zasadzie opisane łączenie ścieżek należałoby przeprowadzić dla wszystkich ścieżek y, ale autorzy korzystając z sytuacji symetrycznych redukują problem do 1/16 wszystkich przypadków (dla dwuwymiarowej kraty kwadratowej). Policzenie ścieżek o długości n = 30 trwało około 4 1 dni wykorzystując do obliczeń 2 stację roboczą SUN 386i. n = 34 - Supercomputer CM-2 (B. Masand i in [51]) Do obliczeń wykorzystano komputery równoległe Thinking Machines CM-2 z 4k, 8k, 16k, 32k, 64k procesorów. Moc obliczeniowa tych maszyn, wówczas jednych z najsilniejszych na świecie, pozwoliła na policzenie liczby SAWs o długości 29 w około 2 godziny (wraz z liczeniem odległości pomiędzy końcami ścieżek czas wydłużyłby się szacunkowo do około 6 godzin) dla porównania Guttmann i Wang na te same wyniki musieli czekać 700 godzin! Nowy rekord policzenie SAWs dla n = 34 zajęło 100 godzin. Algorytm użyty do obliczeń to zrównoleglona wersja algorytmu dimeryzacji. W pierwszym kroku generowane są wszystkie SAWs o długości m < n i do każdego procesora przypisana jest jedna ścieżka. Generowanie tych ścieżek odbywa się równolegle metodą backtrackingu w ten sposób, że przy dokładaniu następnego kroku na p możliwych sposobów, każdy z nich przypisywany jest do innego, wolnego, procesora, który dalej liczy niezależnie od pozostałych dokładając kolejne kroki i wykonując kolejne rozgałęzienia. W drugim kroku algorytmu jeden procesor generuje wszystkie SAWs o długości n m i przekazuje każdą z nich do wszystkich pozostałych procesorów, które sprawdzają, czy ścieżka odebrana po połączeniu ze świeżką długości m daje poprawną SAW. Zrównoleglenie jest więc typu zrównoleglenie danych, tzn. wszystkie jednostki obliczeniowe wykonują te same instrukcje, ale na różnych danych wejściowych. Można spodziewać się, że im większe będzie m tym lepsze uzyska się przyspieszenie. CM-2 udostępnia tzw. procesory wirtualne, które odwzorowywane są na fizyczne procesory. Zabieg ten umożliwia łatwe oprogramowanie algorytmu przewidującego dużą liczbę zadań. n = 39 - Transfer Matrix Enumeration Technique (A. R. Conway i in [8]) Opis na str. 49 n = 51 - Transfer Matrix Enumeration Technique (A. R. Conway i in [11]) Opis na str. 49 n = 71 - Pruning algorithm (I. Jensen 2004 [35]) Opis na str. 54

36

37 3. Metoda przeszukiwania zupełnego Najprostszą metodą algorytmiczną dla obliczenia liczby ścieżek wolnych od przecięć w dowolnym grafie jest systematyczne przeszukiwanie wyczerpujące z nawrotami. Metoda pełnego przeszukiwania przestrzeni rozwiązań danego problemu dyskretnego z zadaną daną wejściową nazywana jest także metodą brutalnej siły (ang. brute-force). W niniejszym rozdziale podamy sekwencyjny algorytm przeszukiwania pełnego dla kraty kwadratowej i omówimy sposób jego zrównoleglania. Podamy także uzyskane wyniki eksperymentalne i przedyskutujemy pewne zaskakujące własności ścieżek wolnych od przecięć, które udało nam się zaobserwować wykonując obliczenia tą metodą Algorytm i jego efektywność obliczeniowa Przedstawiony algorytm, startując z pozycji (0,0), symuluje w kracie Z 2 pokonywanie kolejnych odcinków jednostkowych ścieżki SAW długości n. Zakładamy, że algorytm dysponuje tablicą, w której zaznacza odwiedzone węzły kraty, oraz że inicjuje się go wywołaniem Brute Force SAW(0,0,n). Wynik obliczeń umieszczony jest w zmiennej globalnej o nazwie licznik. Brute Force SAW (x, y, n) 1 for kierunek E, S, W, N 2 do (x, y ) Krok(kierunek, x, y) 3 if Wolny(x, y ) 4 then Wykonaj Krok Symulacji(x, y ) 5 n n 1 6 if n = 0 7 then licznik licznik + 1; 8 else Brute Force SAW(x, y, n) 9 Zwolnij(x, y) W powyższym algorytmie wykorzystujemy funkcję Krok(kierunek,x,y), która dla współrzędnych (x, y) oraz zadanego kierunku E, S, W lub N zwraca: (x+1, y) dla kierunku E, (x, y-1) dla kierunku S, (x-1, y) dla kierunku W, oraz (x, y+1) dla kierunku N. Funkcja Wolny(x, y ) zwraca wartość 1 jeśli węzeł (x, y ) nie był odwiedzony przez aktualnie symulowaną ścieżkę; w przeciwnym razie zwraca 0. Ponadto procedura Wykonaj Krok Symulacji(x, y ) markuje węzeł (x, y ) jako odwiedzony, a Zwolnij(x, y) usuwa tę informację. Oczywistą modyfikacją algorytmu Brute Force SAW, jest podanie dodatkowo podczas rekurencyjnego wywołania procedury, parametru kierunek. Wówczas pętlę główną procedury wykonuje się z pominięciem kierunku odwrotnego do kierunku ostatnio wykonanego kroku. Odwołując się do algorytmu Bru-

38 38 3. Metoda przeszukiwania zupełnego te Force SAW w niniejszej pracy, będziemy mieli na myśli zawsze algorytm zawierający tę modyfikację (nie umieściliśmy jej w pseudokodzie dla zwiększenia jego czytelności). W tabeli 3.1 pokazujemy czasy potrzebne na obliczenie wyników. Program podstawowy jest sekwencyjną implementacją algorytmu Brute Force SAW, który uruchomiono zarówno na komputerze PC jak i na komputerze duzej mocy obliczeniowej, do którego odwołujemy się w tej pracy poprzez nazwę Pilgrim (kolumny PC 1 oraz Pilgrim 1 ). Tabela 3.1. Czasy działania różnych implementacji sekwencyjnych i równoległych algorytmu brute-force. Czas podany jest w sekundach PC Pilgrim 1 PC PC Pilgrim 36 Pilgrim 71 Pilgrim 49 n symi symii symi symii Przelicznik: 3600s=1h, 18000s=5h, 36000s=10h, 54000s=15h, 72000s=20h, 86400s=24h, s=28h Dla zwiększenia efektywności algorytmu, wprowadziliśmy oczywistą modyfikację programu sekwencyjnego, wykorzystując obroty ścieżek o 90, 180 i 270 stopni względem punktu początkowego. Stąd wystarczy zliczać tylko ścieżki, których pierwszy krok wykonano w kierunku E, a otrzymany wynik pomnożyć przez 4. Wyniki czasowe znaj-

39 3.1. Algorytm i jego efektywność obliczeniowa 39 dują się w tabeli w kolumnie PC-symI. Kolejne usprawnienie wykorzystuje symetrię lustrzaną 1. Przyjęto, że po pierwszym kroku w kierunku E, ścieżka może albo nadal podążać na wprost w tym kierunku, albo wykonać skręt w prawo, czyli w kierunku S. Następne skręty ścieżki są już w dowolnym kierunku. Otrzymaną liczbę ścieżek pomnożono przez 8 i odjęto wartość 4. Wyniki czasowe znajdują się w kolumnie PC-symII i są one około osiem razy mniejsze niż dla tego samego n przy oryginalnej wersji algorytmu brute-force. Opracowaliśmy również algorytm równoległy. Zadanie podzielono na niezależne podzadania tak, aby każdy procesor mógł zliczać ścieżki, a wynik końcowy był sumą wyników uzyskanych na poszczególnych procesorach. Algorytm równoległy składa się z dwóch etapów: precomputingu oraz algorytmu właściwego. Przypomnijmy, że w wersji sekwencyjnej, algorytm konstruuje SAW startując z punktu (0,0) i przyjmując, że wszystkie pozostałe węzły są wolne. W wersji równoległej każdy procesor konstruuje sufiks SAW startując z punktu na płaszczyźnie, będącego zakończeniem pewnego prefiksu SAW o długości 3. Celem precomputingu jest przygotowanie punktów startowych dla poszczególnych procesorów. Liczba prefiksów SAWs długości m = 3 jest równa c 3 = 36, zatem dla konstrukcji sufiksów długości n 3 należało użyć 36 procesorów. Zauważmy, że wielkość poszczególnych zadań jest porównywalnej wielkości, dlatego optymalnym rozwiązaniem jest przypisanie tylko jednego zadania jednemu procesorowi. Wyniki działania takiego algorytmu dla długości n [4, 31] zebrane są w kolumnie Pilgrim 36. Ponieważ w czasie przeprowadzania eksperymentów dostępnych było 72 procesorów, zrównoleglanie w powyższy sposób (bez wykorzystania symetrii) nie było już dalej możliwe, ponieważ c 4 = 100. Dla zwiększenia efektywności algorytmu, wykorzystano symetrię w następujący sposób. Dla c 5 = 284 przy użyciu obrotów można przygotować 71 zadań dla 71 procesorów. Wyniki obliczeń znajdują się w kolumnie Pilgrim 71. Warto zauważyć, że gdyby wykorzystano oba typy symetrii, wówczas te same czasy obliczeń można by uzyskać dla = 36 procesorów. Mówiąc ogólniej, na maszynie z liczbą procesorów p 72, każdy procesor konstruuje sufiksy SAWs długości n m dla k prefiksów, długości m. Dla równomiernego obciążenia procesorów, należy zatem wymagać, by c m = pk, dla pewnego k N. Przykładowo, dla p = 49 mamy k = 2 oraz m = 6, ponieważ c 6 +4 = 784 = 98 = Wyniki czasowe dla tak przyjętego zbalansowania umieszczone 8 8 są w tabeli 3.1 w kolumnie Pilgrim 49. Obliczenia wykonane metodą przeszukiwania zupełnego są bardzo mało efektywne. Dysponując nawet komputerem równoległym dużej mocy obliczeniowej, nie można w rozsądnym czasie policzyć ścieżek nawet dla stosunkowo małych wartości n. Wynika to z czasowej złożoności obliczeniowej metody przeszukiwania zupełnego, która jest wykładnicza względem n. Niska efektywność tego algorytmu wynika z faktu, że generuje on i zlicza każdą poprawną ścieżkę, a ich liczba rośnie wykładniczo (zobacz punkt 2.4). Faktyczna złożoność metody brute-force może być dodatkowo pogorszona tym, że algorytm konstruując SAWs wpada w ślepe zaułki, które uniemożliwiają dalszą konstrukcję i należy wykonać nawrót. Wykorzystanie symetrii pozwala na redukcję czasu pracy algorytmu jedynie o stały czynnik 8. Zauważmy, że w rezultacie czas liczenia ścieżek o długości n + 1 jest dłuższy niż liczenie wszystkich ścieżek o długości 1... n. 1 Opis zastosowania symetrii obrotowej i lustrzanej do problemu #SAW znajduje się na str. 29.

40 40 3. Metoda przeszukiwania zupełnego Zaletą omawianego algorytmu jest niewątpliwie jego prosta implementacja oraz bardzo niskie zapotrzebowanie na wielkość pamięci operacyjnej. Przykładowo, implementacja 49-wątkowa wymaga jedynie 4056KB. W tabeli 3.2 przedstawione zostały szybkości, z jakimi zliczane były ścieżki na obu komputerach. Tabela 3.2. Średnia liczba znalezionych ścieżek SAW w czasie 1 sekundy n PC Pilgrim Złożoność obliczeniowa przeszukiwania zupełnego Dokładne oszacowanie czasowej złożoności obliczeniowej algorytmu Brute Force SAW jest interesującym i trudnym problemem samym w sobie. W niniejszym rozdziale pokażemy pewne wyniki, które sugerują, że problem ten jest bardzo bliski problemowi zliczania ścieżek SAW. Przyjmijmy, że przez złożoność algorytmu Brute Force SAW rozumieć będziemy globalną liczbę wywołań procedury Wykonaj Krok Symulacji w wierszu 4, dla zadanej wartości n. Oznaczmy tę wielkość przez s n. W tabeli 3.3 zestawiono wielkości c n, s n oraz ilorazy c n /c n 1 i s n /s n 1 ilustrujące tempo wzrostu wielkości c n i s n. W tabeli podajemy także średnią liczbę kroków algorytmu przypadającą na jedną ścieżkę SAW, to jest s n /c n. Można zauważyć, że wraz ze wrostem długości ścieżek n, zarówno tempo przyrostu s n jak i przyrostu c n, maleje. Jak napisaliśmy w podrozdziale iloczyn c n /c n 1 w granicy n równa się przypuszczalnie µ. Na podstawie wyników z tabeli 3.3 dla początkowych wartości n, można postawić hipotezę, że s n /s n 1 w granicy n zbiega także do tej samej wielkości. Gdyby hipoteza była prawdziwa, to wówczas stosunek sn c n dążyłby do pewnej granicy rzeczywistej, którą oznaczamy przez κ. To by oznaczało, że wspomniany wcześniej problem wchodzenia przez algorytm w ślepe zaułki nie wpływa negatywnie na asymptotyczną złożoność obliczeniową algorytmu, która zatem przypuszczalnie wynosi O(µ n ). Dane z tabeli 3.3 przedstawiono w postaci graficznej na rysunkach 3.1 i 3.2. Jeżeli dokładniej przyjrzymy się danym z tabeli i wykresom, możemy zauważyć bardzo ciekawą własność. Powiększenie wykresów przedstawiono na rysunkach 3.3 i 3.4. Widzimy, że chociaż liczba kroków przypadających na ścieżkę ma ogólną tendencję wzrostową, to dla n 8 co druga wartość jest mniejsza od swojego poprzednika. Przyczyną takiego s zachowania się jest zmiana wielkości n s n 1 względem cn c n 1. Dla n parzystych przyrost liczby ścieżek jest mniejszy od przyrostu liczby kroków, a dla n nieparzystych jest większy.

41 3.2. Złożoność obliczeniowa przeszukiwania zupełnego 41 Jeżeli zależność ta (przedstawiona na rysunku 3.4) zachodziłaby dla wszystkich n 8, s wówczas oznaczałoby to, że lim n s n cn = κ oraz przypuszczalnie lim n n s n 1 = µ. Na zakończenie przedstawiamy wykresy ze wzrostem liczby ścieżek SAWs i wykonanych kroków w skali liniowej (rysunek 3.5) oraz liniowo-logarytmicznej (rysunek 3.6). W literaturze rozważa się także algorytm o nazwie Modified Brute Force (Peter Grassberger, Z. Phys. B 48 s.255, 1982). MBF wykorzystuje wszystkie opisane symetrie. Użyty został m.in. przez MacDonalda do generowania ścieżek w algorytmie dimeryzacji. Tabela 3.3. Liczba kroków wykonanych przez algorytm brute-force n c n s n s n cn s n s n 1 c n c n , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , ,66650

42 42 3. Metoda przeszukiwania zupełnego Rysunek 3.1. Współczynniki przyrostu wartości s n i c n (A) Rysunek 3.2. Liczba kroków przypadających na jedną znalezioną ścieżkę długości n (A)

43 3.2. Złożoność obliczeniowa przeszukiwania zupełnego 43 Rysunek 3.3. Współczynniki przyrostu wartości s n i c n (B) Rysunek 3.4. Liczba kroków przypadających na jedną znalezioną ścieżkę długości n (B)

44 44 3. Metoda przeszukiwania zupełnego Rysunek 3.5. Liczba ścieżek SAW i położonych kroków skala liniowa Rysunek 3.6. Liczba ścieżek SAW i położonych kroków skala liniowo-logarytmiczna

45 4. Algorytmy oparte na podejściu skończonej kraty Najlepsze znane obecnie wyniki w zakresie dokładnego zliczania ścieżek SAWs, uzyskano stosując algorytmy oparte na kracie skończonej (ang. FLM finite lattice method). Enting w pracy [15] zastosował jako pierwszy tego typu podejście dla zliczania SAPs 1 (ang. self-avoiding polygons). Idea rozwiązania polega na wyliczeniu na wstępie częściowych funkcji tworzących dla pewnych własności danego modelu na skończonej przestrzeni, na przykład skończonej kracie kwadratowej. Następnie używając tych funkcji uzyskuje się wyniki właściwe. Częściowe funkcje tworzące wylicza się wykorzystując różne odmiany techniki zwanej metodą macierzy przejścia (ang. transfer matrix technique) Metoda macierzy przejścia Załóżmy, że dany jest prostokątny fragment kraty Z 2 o wymiarach W L krawędzi, na którym w całości mieścić się będą rozpatrywane ścieżki wolne od przecięć. Z uwagi na symetrię rozpatrujemy tylko takie prostokąty, w których L W. Fragment ten nazywać będziemy pasem. Rozpatrywany pas dzielimy na dwie części w sposób, jaki zilustrowano na rysunku 4.1. Linia cięcia składa się z trzech odcinków: dwóch pionowych, dających w sumie długość W i jednego poziomego odcinka jednostkowej długości. Fragment linii cięcia złożony z odcinka poziomego i górnego fragmentu jednostkowej długości odcinka dolnego nazywać będziemy zgięciem (porównaj rysunek 4.1). W omawianej metodzie istotne znaczenie odgrywać będzie sposób, w jaki SAWs przechodzą przez linię cięcia. Poniżej sprecyzujemy dokładniej, jak charakteryzować będziemy takie przejścia. Zauważmy najpierw, że po podziale pasa zawierającego poprawną ścieżkę wolną od przecięć, po lewej stronie linii cięcia może powstać kilka otwartych zakończeń pętlowych (tzn. oba końce takiego fragmentu mają krawędź przechodzącą przez linię cięcia) oraz maksymalnie dwa fragmenty, których jedna krawędź przechodzi przez linię cięcia. Fragmenty pierwszego typu nazywać będziemy pętlami otwartymi; o fragmentach drugiego typu będziemy mówić wolne końce. Przejścia SAWs przez linię cięcia będziemy kodowali przy użyciu ciągów elementów ze zbioru {0, 1, 2, 3} o długości W + 2. Kodowanie takie definiujemy następująco. Przypiszmy najpierw każdemu odcinkowi jednostkowemu, przez który przechodzi linia cięcia, etykietę zależną od typu fragmentu SAW, do którego ten odcinek należy. Indeksując odcinki z dołu do góry kolejnymi liczbami naturalnymi, 1 Zobacz dodatek G.

46 46 4. Algorytmy oparte na podejściu skończonej kraty etykietę σ i odcinka i-tego definiujemy jako 0 jeśli odcinek nie należy do SAW, 1 jeśli odcinek jest dolnym końcem pętli otwartej, σ i = 2 jeśli odcinek jest górnym końcem pętli otwartej, 3 jeśli odcinek jest krawędzią należącą do wolnego końca. Ciąg σ 1 σ 2... σ W +2 nazywać będziemy konfiguracją linii cięcia. Dla SAW na rysunku 4.1 otrzymujemy konfigurację Zauważmy, że kodowanie to jednoznacznie określa, które końce połączone są ze sobą pętlą otwartą. W celu znalezienia zakończenia pętli otwartej rozpoczynającej się i-tą jedynką od dołu postępujemy w następujący sposób. Od etykiety występującej tuż po badanej jedynce, rozpoczynamy zliczać etykiety 1 i 2. W przypadku, gdy licznik dwójek będzie większy od licznika jedynek, wówczas ostatnio policzona etykieta 2 odpowiada końcowi pętli otwartej. Oczywiście w poprawnej konfiguracji liczba jedynek zawsze równa jest liczbie dwójek, a liczba trójek wynosi 0, 1 lub 2. Konfigurację tworzą zatem słowa Motzkina 2. Rysunek 4.1. Podział skończonej kraty na dwie części. Kolorem czerwonym zaznaczono krawędź lewą i górną przed przesunięciem zgięcia, kolorem zielonym krawędź dolną i prawą po przesunięciu zgięcia. Przed przesunięciem zgięcia są trzy pętle otwarte i jeden wolny koniec. Metoda macierzy przejścia polega na tym, że dla zadanej linii cięcia l, oraz dla każdej poprawnej konfiguracji σ dla l obliczana jest częściowa funkcja tworząca, zliczająca wszystkie fragmenty SAWs na lewo od l, które są zgodne z konfiguracją σ. Obliczanie tych funkcji przebiega iteracyjnie: startujemy z linią podziału umieszczoną w skrajnie lewej części pasa, a następnie dla obliczenia funkcji tworzących dla linii cięcia l i konfiguracji σ, korzystamy z wyliczonych wcześniej funkcji dla cięcia l i konfiguracji σ. Linię cięcia l otrzymujemy z linii l w taki sposób, że przesuwamy zgięcie cięcia l o jedną jednostkę w dół, przerzucając tym samym dokładnie jeden wierzchołek P z prawej części pasa do lewej (patrz rysunek 4.1). Takie przesuwanie zgięcia nazywać będziemy modyfikacją cięcia l do cięcia l. Wskazanie, które konfiguracje σ należy użyć przy obliczaniu funkcji tworzącej dla l i σ wymaga nieco szerszego wyjaśnienia. Zacznijmy od zwrócenia uwagi na fakt, że po modyfikacji cięcia linia l przechodzi przez dwie krawędzie, które dla linii l były w prawej części kraty. Są to krawędzie położone w kierunku E i S od wierzchołka P. Ścieżka SAW można zajmować nowe krawędzie na cztery sposoby: 2 Zobacz podrozdział

47 4.1. Metoda macierzy przejścia obie krawędzie (E i S) są zajęte, 2. tylko krawędź E jest zajęta, 3. tylko krawędź S jest zajęta, 4. obie krawędzie (E i S) są wolne. Należy przeanalizować, które spośród ułożeń (1.)-(4.) są dopuszczalne w kontekście konfiguracji σ. Ułożenie jest dopuszczalne wówczas, gdy w konfiguracji σ nie powstała sytuacja, w której fragmenty SAW położone w lewej części kraty tworzą niepoprawne ścieżki SAWs. Niepoprawne należy rozumieć nie tylko jako naruszające zasadę o braku samoprzecięcia się, ale także jako istnienie kilku ścieżek SAW, o łącznej długości równej n. W szczególności, żaden wierzchołek nie może być stopnia większego od dwóch oraz wierzchołków o stopniu równym jeden może być co najwyżej dwa. Oznacza to, że błędne konfiguracje są wtedy, gdy: 1. W wierzchołku P doszło do połączenia się dwóch wolnych końców lub doszło do zgubienia wolnego końca. Zgubienie wolnego końca należy rozumieć jako sytuację, w której jest fragment SAW w lewej części kraty i nie zostanie do niego dołożona już żadna krawędź. Taka sytuacja może się zdarzyć, gdy obie krawędzie E i S są wolne. Wyjątkiem, w którym dopuszczalne jest połączenie się wolnych końców lub zgubienie wolnego końca, jest sytuacja, gdy w konfiguracji σ nie występują inne etykiety niż σ i = Wierzchołek P ma stopień większy niż dwa. W tabeli 4.1 zebrane są możliwe przejścia z konfiguracji σ do σ. Ze sposobu konstruowania linii cięcia l wynika, że konfiguracje σ i σ różnią się co najwyżej na dwóch pozycjach. Przyjmijmy następujące oznaczenia: σ N: etykieta krawędzi wychodzącej w kierunku N od wierzchołka P, σ W : etykieta krawędzi wychodzącej w kierunku W od wierzchołka P, σ E : etykieta krawędzi wychodzącej w kierunku E od wierzchołka P, σ S : etykieta krawędzi wychodzącej w kierunku S od wierzchołka P, Wówczas wiersze tabeli ponumerowane są etykietami σ W, a kolumny etykietami σ N. Komórki tabeli zawierają możliwe pary etykiet σ S σ E. Zatem para σ W σ N należy do konfiguracji σ, a para σ S σ E do konfiguracji σ. Tabela 4.1. Reguły przejść pomiędzy konfiguracjami w metodzie macierzy przejścia DOD ZAKAZANE ADD DOD Opiszemy teraz sposób wyprowadzenia par σ S σ E znajdujących się w tabeli oraz zastosowaną przy nich notację. Parę σ W σ N będziemy nazywać stanem wejściowym, a parę σ S σ E stanem wyjściowym. Dla pary σ W σ N = (00): Krawędzie W i N są wolne, a zatem są cztery możliwe stany wyjściowe. Pierwszy to (00) wówczas stopień wierzchołka P równa się 0. Jeżeli krawędzie E i S są zajęte przez ścieżkę SAW, wówczas otrzymujemy stan (12), gdyż powstała pętla otwarta o długości dwóch krawędzi. Trzecia i czwarta możliwość dotyczą sytuacji, gdy jedna z krawędzi, E lub S, jest zajęta. Powstaje wolny koniec o długości jednej krawędzi. Jeżeli SAW zajmuje krawędź E, otrzymujemy wówczas stan (03), a dla krawędzi S stan (30). Stany (03) i (30) oznaczamy pogrubioną czcionką, ponieważ dla

48 48 4. Algorytmy oparte na podejściu skończonej kraty nich dodatkowo musi być spełniony warunek, że w konfiguracji σ była maksymalnie jedna etykieta σ i = 3. Dla stanów wejściowych (01) i (10): Jedna z krawędzi, W lub N, jest zajęta przez dolny koniec pętli otwartej, a druga krawędź jest wolna. Zatem stopień wierzchołka P przed przesunięciem zgięcia wynosi jeden. Ze względu na fakt, że stopień P może maksymalnie wynosić dwa, możliwe są następujące dwie sytuacje: obie krawędzie E i S są wolne (wówczas stopień wierzchołka pozostaje równy jeden) lub tylko jedna z nich jest wolna (wówczas stopień wierzchołka P wynosi dwa). W pierwszym przypadku otrzymujemy stan wyjściowy (00). Dodatkowo, pętla otwarta zamienia się w wolny koniec, który jest przecięty na krawędzi z etykietą σ i = 2. Należy więc zmienić wartość etykiety, aby σ i = 3. Konieczność wykonania tej operacji oznaczamy linią ponad zapisem stanu wyjściowego. Ponadto musi być spełniony warunek o maksymalnej liczbie wolnych końców, co oznaczamy pogrubioną czcionką. W drugim przypadku następuje przedłużenie pętli o jedną krawędź i stan wyjściowy jest identyczny jak stan wejściowy: (01) albo odpowiednio (10). Dla stanów wejściowych (02) i (20): Sytuacja jest analogiczna jak dla par (01) i (10) rozważania dotyczą górnego końca pętli otwartej. A zatem możliwe stany wyjściowe to: (02), (20) i 00. Dla stanów wejściowych (03) i (30): Jedna z krawędzi, W lub N, jest zajęta i należy do wolnego końca, a druga krawędź jest wolna. Możliwe są dwa scenariusze. W pierwszym dołożona zostaje jedna krawędź, obojętnie E czy S i stan wyjściowy jest równy wówczas stanowi wejściowemu. W drugim scenariuszu obie krawędzie E i S pozostają wolne. Wówczas powstaje odłączony fragment SAW. Dopuszczalne jest to tylko wtedy, gdy odłączony fragment jest szukaną ścieżką SAW o długości n. Jest tak tylko wtedy, gdy wszystkie etykiety σ i są równe 0. Dodajemy wówczas częściową funkcję tworzącą do głównej funkcji tworzącej, co oznaczamy w tabeli 4.1 przez DOD. Dla stanów wejściowych (11) i (22): Obie krawędzie wejściowe W i N są zajęte, ale należą do innych pętli otwartych. Ponieważ obie krawędzie dochodzą do wierzchołka P, to jego stopień wynosi dwa. Oznacza to, że krawędzie E i S muszą pozostać wolne, czyli σ E = σ S = 0. Ponadto, po przesunięciu cięcia, pętle łaczą się w jedną pętlę otwartą. W związku z tym, należy odpowiednio przenumerować jej końce. Stąd stan wyjściowy to 00. Dla pary σ W σ N = (12): Ponieważ poszczególne fragmenty SAW na kracie nie mogą się przecinać, oznacza to, że krawędź N jest zakończeniem pętli otwartej rozpoczynającej się w krawędzi W. Jest to sytuacja niedopuszczalna, gdyż obie krawędzie dochodzą do wierzchołka P i w ten sposób powstaje pętla zamknięta. Dlatego dla σ W σ N = 12 nie ma ani jednego stanu wyjściowego. Dla pary σ W σ N = (21): Do wierzchołka P dochodzą dwie pętle otwarte. Krawędzią W dochodzi górny koniec pierwszej pętli, na krawędzi N jest dolny koniec drugiej pętli. Zatem po przesunięciu zgięcia następuje połączenie dwóch pętli otwartych w jedną pętlę. W konfiguracji wyjściowej krawędzie muszą być wolne i stan wyjściowy to (00). Etykiety powstałej pętli nie zmieniają się. Dla stanów wejściowych (13), (31), (23) i (32): Jedna z krawędzi należących do konfiguracji σ należy do wolnego końca, a druga krawędź należy do pętli otwartej. We wszystkich czterech sytuacjach następuje połączenie w wierzchołku P wolnego końca

49 4.2. Metoda dokładnego obliczania liczby SAW Conway-Enting-Guttmann (CEG) 49 z pętlą otwartą, co prowadzi do powstania wolnego końca. Krawędzie E i S muszą pozostać wolne, gdyż stopień wierzchołka P równa się 2. Drugiemu końcu pętli otwartej należy nadać etykietę σ i = 3. Stąd stan wyjściowy to 00. Dla pary σ W σ N = (33): Do wierzchołka P dochodzą dwie krawędzie SAW, które w konfiguracji σ oznaczone były jako wolne końce. Po przesunięciu zgięcia wolne końce łączą się ze sobą w jeden fragment SAW. Naturalnie, krawędzie E i S muszą być wolne. Jeżeli wszystkie etykiety σ i mają wartość zero, wówczas powstaje poprawna ścieżka SAW i dodajemy wynik do głównej funkcji tworzącej. W przeciwnym wypadku wynik odrzucamy. Oznaczmy przez f σ (u) częściową funkcję tworzącą opisującą konfigurację σ, a przez f σ (u) oznaczmy częściową funkcję tworzącą dla konfiguacji σ. Wówczas po modyfikacji cięcia l do cięcia l wykonywane jest następujące podstawienie: f σ (u) f σ (u) + f σ (u)u k, gdzie k jest liczbą niezerowych etykiet σ i w stanie wyjściowym. Wartość k odpowiada więc liczbie zajętych przez SAW krawędzi spośród krawędzi E i S przy wierzchołku P. Modyfikacja cięcia może być postrzegana jako operacja mnożenia macierzy stąd pochodzi nazwa metody. Dla każdej konfiguracji σ pamiętana jest funkcja tworzącą. Podczas przesunięcia zgięcia przekształcamy wektor kolumnowy F wszystkich częściowych funkcji tworzących w wektor kolumnowy F zawierający zaktualizowane częściowe funkcje tworzące dla wszystkich konfiguracji σ. Przekształcenie F do F odpowiada lewostronnemu pomnożeniu wektora kolumnowego przez pewną macierz kwadratową M. Oznaczmy przez s k liczbę wszystkich funkcji tworzących w wektorze F. Na podstawie danych w tabeli 4.2 stwierdzamy, że wektor F ma duży wymiar, a w konsekwencji macierz M jest również duża. Ponadto dla danej konfiguracji σ liczba odpowiadających konfiguracji σ ma wartości od 0 do 4. Oznacza to, że M jest macierzą rzadką. Poszczególne elementy macierzy mogą być jednak wyliczone na żądanie, więc M nie musi być przechowywana w pamięci w całości. Przedstawiona metoda macierzy przejścia jest algorytmem pozwalającym na efektywne zliczanie pewnych obiektów w skończonej kracie. W zależności od badanego modelu zmieniają się reguły przejść pomiędzy konfiguracjami σ i σ. Dla modelu SAW reguły są podane w tabeli 4.1. Dla modelu SAP będą one inne [15]. Wiedząc, ile jest SAWs w pasie o wymiarach W L, można na tej podstawie policzyć SAWs na nieograniczonej kracie. Przykładem algorytmu, który zlicza SAWs o długości n wykorzystując metodę macierzy przejścia jest CEG z 1993 r Metoda dokładnego obliczania liczby SAW Conway-Enting-Guttmann (CEG) Jeszcze do początku bieżącego roku najlepsze wyniki podające dokładną liczbę ścieżek wolnych od przecięć dla dwuwymiarowej kraty kwadratowej należały do A. R. Conwaya i A. J. Guttmanna. W 1993 r. podali oni (wraz z I. G. Entingiem) w [8] współczynniki c c 39 funkcji tworzącej C(x) = Σc n x n dla SAWs na kracie kwadratowej. W 1996 r. przedstawiono w [11] współczynniki c c 51 tej funkcji. Oba wyniki uzyskano stosując wyliczenia na skończonej kracie wraz z metodą macierzy przejścia. W

50 50 4. Algorytmy oparte na podejściu skończonej kraty 1996 r. otrzymano nowe wyniki, ponieważ opracowano wówczas nową równoległą wersję programu. Oznaczmy przez C mn liczbę ścieżek SAWs, które od swojego początku wykonują m kroków w kierunkach pionowych (N i S) oraz n kroków w kierunkach poziomych (E i W). Wówczas funkcja tworząca dla SAWs ma postać: C(u, w) = m,n=0 C mn u n w m. (4.1) Podanie wszystkich współczynników C mn dla pewnego skończonego m i n pozwala na policzenie ścieżek SAWs o długości nie większej niż m + n. Zauważmy, że zachodzi następująca relacja symetrii C mn = C nm. (4.2) Pozwala to na wprowadzenie następującego ograniczenia. Jeżeli dla indeksu n przyjmiemy n k, wówczas można obliczać C mn dla m + n 2k + 1. Zdefiniujmy ważne pojęcie nieredukowalnej składowej (ang. irreducible component). Składowa nieredukowalna jest to taki fragment SAW, który w rzucie na oś Y posiada co najmniej dwa pionowe odcinki jednostkowe (ang. y-bond) w każdej pozycji rzutu. Sposób wykonaniu rzutu ścieżki na oś Y przedstawiono na rysunku 4.2. Najważniejszą innowacją algorytmu CEG jest dekompozycja ścieżki SAW na nieredukowalne składowe. Interesują nas zatem fragmenty ścieżek SAW, które wielokrotnie zawracają w kierunku pionowym. Zauważmy, że są to obiekty, które można bardzo efektywnie zliczyć przy pomocy opisanej już w rozdziale 4.1 metody macierzy przejścia. Rozróżnia się pięć typów składowych nieredukowalnych. Oznaczamy je literami P, Q, R, S i T. Schematycznie przedstawiono je na rysunku 4.3. Komponenty nieredukowalne rozważa się w skończonej kracie o wymiarach prostokątnych. Dla każdego typu składowych nieredukowalnych określona jest funkcja tworząca. Funkcje te przedstawiają liczbę poszczególnych składowych w skończonej kracie. P (u, w) jest funkcją tworzącą dla ścieżek nie zawierajacych kroków pionowych. Ten przypadek jest najprostszy: takich ścieżek o długości 0 jest jedna, a o długości niezerowej są zawsze dwie ścieżki: P (u, w) = 1 + 2u + 2u 2 + 2u 3 + = 1 + u 1 u (4.3) Q(u, w) jest funkcją tworzącą dla ścieżek, których żaden koniec nie dosięga górnego i dolnego brzegu prostokąta. Rozpatruje się także funkcje Q m (u, w), które wyrażają liczbę ścieżek rozciągniętych na m krawędzi w pionie. Q(u, w) = Q m (u, w) (4.4) m=2 R(u, w) jest funkcją tworzącą dla ścieżek, których oba końce dosięgają górnego brzegu prostokąta. R(u, w) = R m (u, w) (4.5) m=1

51 4.2. Metoda dokładnego obliczania liczby SAW Conway-Enting-Guttmann (CEG) 51 Rysunek 4.2. Przykładowy rzut SAW na oś Y - składa się z jednego komponentu nieredukowalnego Q. Rysunek 4.3. Typy komponentów nieredukowalnych. S(u, w) jest funkcją tworzącą dla ścieżek, których jeden koniec dosięga górnego brzegu prostokąta, a drugi nie dotyka ani górnego, ani dolnego brzegu. S(u, w) = S m (u, w) (4.6) m=2 T (u, w) jest funkcją tworzącą dla ścieżek, których jeden koniec dosięga górnego, a drugi koniec dolnego brzegu prostokąta. T (u, w) = T m (u, w) (4.7) m=1 Analiza możliwych połączeń składowych nieredukowalnych doprowadza do wzoru funkcji tworzącej dla liczby ścieżek SAW [8]: C(u, w) = P (u, w) + 2[Q(u, w) + 2R(u, w) + 2S(u, w) + T (u, w)] gdzie +2V (u, w)[p (u, w) + 2R(u, w) + S(u, w) + T (u, w)] 2, (4.8) V (u, w) = U + UT U + UT UT U + = U(u, w) = w + wp w + wp wp w + = U 1 T U = w 1 w(t + P ), 1 1 wp (u, w), w oznacza jedną pionową krawędź (y-bond). Do wyliczenia funkcji Q, R, S, T stosuje się metodę macierzy przejścia dla pasa o wymiarach M L, gdzie M < L. W pracy [8] pokazane jest, że problem zliczenia ścieżek SAWs długości 4K + 3 można zredukować do problemu policzenia SAWs zawartych w pasach o szerokości M K wierszy wierzchołków oraz o długości L = 4K + 3 2M kolumn wierzchołków. Długość możemy pomniejszyć o wartość 2M ze względu na nałożony warunek o dochodzeniu składowych nieredukowalnych do górnego i dolnego brzegu pasa.

52 52 4. Algorytmy oparte na podejściu skończonej kraty Procedura zliczania odbywa się dla wszystkich szerokości M K. Dla każdego pasa rozpoczyna się od przeprowadzenia pierwszej linii cięcia l przy skrajnie lewej kolumnie wierzchołków w pasie. Zakłada się, że co najmniej jedna etykieta σ i musi mieć wartość różną od zera. W przeciwnym wypadku linia l nie przecięłaby fragmentu SAW, co w konsekwencji doprowadziłoby do policzenia identycznych SAWs przesuniętych na kracie o pewien wektor. Wprowadzamy teraz nowe pojęcie łańcucha, który jest nieskierowaną ścieżką SAW. Zwróćmy uwagę, że SAWs długości n, które podlegają zliczaniu są skierowane, natomiast metoda macierzy przejścia operuje na łańcuchach. Dla pasa o szerokości M zdefiniowano dla łańcuchów funkcję tworzącą G m (±, ±, ±). Pierwszy argument odnosi się do skrajnie górnego wiersza pasa, drugi do skrajnie dolnego, a trzeci do wszystkich pozostałych środkowych wierszy. Wartość argumentu + oznacza, że wiersz reprezentowany przez argument może być miejscem zakończenia składowej nieredukowalnej, a wartość oznacza zakaz zakończenia jej w danym wierszu pasa. Rozważa się więc następujące funkcje dla składowych nieredukowalnych R, T, S i Q: G K (+,, ), G K (+, +, ), G K (+,, +) oraz G K (,, +). Po przekształceniach podanych w [8] otrzymujemy: R m = G m (+,, ) G m 1 (+,, ) Q m = G m (,, +) G m 1 (+,, +) m 1 n=1 (Q n + R n + S n) S m = G m (+,, +) G m 1 (+,, +) G m (+,, ) G m 1 (+,, ) 1 2 (P 1) Q m m 1 n=1 T m = G m (+, +, ) 2G m (+,, ), (Q n + 2 S n + T m) gdzie częściowe funkcje tworzące oznaczone gwiazdką są pewnymi zmodyfikowanymi funkcjami (4.4), (4.6), (4.7). Algorytm policzenia liczby SAWs rozpoczyna się wyliczeniem opisanych funkcji G. Jest to najbardziej czaso- i pamięciochłonna część algorytmu. Autorzy algorytmu wykonali wyliczenia dla K = 8 na komputerze IBM RS6000/530 z pamięcią RAM 256MB. Następnie dla K = 9 program uruchomiono na IBM 3090 z 500MB RAMu. W drugiej części algorytmu wykonuje się obliczenia algebraiczne. Chociaż obliczenia te wykonuje się na dużych wielomianach trzech zmiennych (ponad współczynników), to obliczenia trwały zaledwie kilka godzin. Pierwsza cześć algorytmu zaimplementowana została w języku C, a druga w C++. Dla K = 8 policzono ścieżki o długości n = 35 w czasie 50 godzin. Algorytm ma złożoność (3 1 4 ) n (1.316) n, co pokazane jest w [35] Zrównoleglenie algorytmu Jak już wspomniano w podrozdziale 4.1, modyfikacja cięcia l o jeden wierzchołek odpowiada pomnożeniu lewostronnemu wektora kolumnowego częściowych funkcji tworzących F przez macierz kwadratową M. Operacja mnożenia macierzy jest najbardziej czaso- i pamięciochłonną operacją w algorytmie [22]. Wektor F podlegający pomnożeniu składa się z dużej liczby wielomianów, którą oznaczamy s k, gdzie k jest szerokością pasa. Jeden wielomian, będący częściową funkcją tworzącą dla jednej konfiguracji σ = {σ i }, reprezentuje liczbę różnych położeń fragmentów SAWs (o różnych sumarycznych długościach) po lewej stronie cięcia l.

53 4.2. Metoda dokładnego obliczania liczby SAW Conway-Enting-Guttmann (CEG) 53 Przypomnijmy, że macierz M jest macierzą rzadką. W zależności od położenia wierzchołka P, którego dodajemy do lewej strony kraty, wzdłuż linii cięcia l, inne elementy macierzy M będą przyjmować wartości niezerowe. W szczególności, dla danej konfiguracji σ dla różnych wierzchołków P i P elementy te będą położone w innych kolumnach. W celu zapewnienia dobrej skalowalności algorytmu należy tak uporządkować elementy wektora F dla każdej modyfikacji cięcia, aby macierz M była zawsze blokowo diagonalna. Spełnione muszą być warunki: 1. Modyfikowane funkcje tworzące dla konfiguracji σ powinne być położone w F obok siebie. Wówczas elementy wiersza w M dla σ o niezerowych wartościach będą ułożone koło siebie (tzn. w sąsiednich kolumnach). 2. Wiersze macierzy M muszą być ułożone w takiej kolejności, aby przy spełnieniu pierwszego warunku, M była blokowo diagonalna. Wówczas jedno zadanie dla procesora obejmuje jeden blok macierzy M. Zauważmy, że dla kolejnych wartościowań elementów macierzy M potrzebne są różne uporządkowania wektora F. Należy znaleźć sposób szybkiego porządkowania wektora F, aby efektywnie zapewnić spełnialność warunku (1.). Inwariantem zbioru operacji O będziemy nazywać taką regułę, która pozostaje prawdziwa i niezmienna dla wszystkich operacji należących do O. Jednym ze sposobów projektowania efektywnych algorytmów równoległych, opartych na podziale danych, jest określenie inwariantu dla wykonywanych przez procesory zadań. W przypadku metody macierzy przejścia do zbioru O należą wszystkie przesunięcia zgięcia o jeden wierzchołek P na jednej linii l. Inwariantem jest reguła, że dla przeciętych krawędzi, oprócz tych przy zgięciu, etykieta σ i = 0 nie może zostać zamieniona na etykietę σ i 0 oraz etykieta σ i 0 nie może zostać zamieniona na etykietę σ i = 0. Dla konfiguracji σ definiujemy stempel ψ(σ) jako ciąg elementów ze zbioru {0, 1} o długości równej długości σ. Element ψ i (σ) definiujemy jako ψ i (σ) = Tabela 4.2. Liczba konfiguracji cięć dla zadanej szerokości k pasa Szerokość k Długość σ s k { 0 jeśli dla odpowiadającej mu etykiety σi zachodzi σ i = 0 1 jeśli dla odpowiadającej mu etykiety σ i zachodzi σ i > 0 Następnie dokonujemy podziału konfiguracji na klasy. Dwie konfiguracje σ x i σ y należą do jednej klasy C, jeżeli ψ(σ x ) =. ψ(σ y ), gdzie =. oznacza porównanie stempli z pominięciem elementów ψ i (σ) odpowiadających krawędziom przeciętym przez zgięcie. Innymi słowy, dla wszystkich etykiet, oprócz tych dwóch, musi zachodzić równość sgn(σi x ) = sgn(σ y i ). Funkcję sgn(x) definiujemy następująco { 0 x = 0 sgn(x) = 1 x > 0 Klasę konfiguracji będziemy nazywać blokiem. Zauważmy, że ułożenie opisane w warunku (2.) zapewnione jest poprzez podział konfiguracji na klasy, który jest niezmienny dla całej metody macierzy przejścia.

54 54 4. Algorytmy oparte na podejściu skończonej kraty Uporządkowania elementów wektora F, wymagane przez warunek (1.), wykonujemy na podstawie wartości stempli z poprzedniej operacji mnożenia macierzy. Jeżeli element ψ i (σ) odpowiadający krawędzi E przy wierzchołku P ma wartość 0, blok wpisujemy na listę A, w przeciwnym wypadku wpisujemy go na listę B. Po zakończeniu mnożenia macierzy łączymy powstałą listę A z listą B i otrzymujemy uporządkowanie bloków dla kolejnej iteracji. Największym problemem w zrównolegleniu algorytmu jest równomierne przydzielanie zadań do procesorów. Każdy z procesorów otrzymuje do przetworzenia kilka bloków, gdyż wszystkich bloków jest więcej niż dostępnych procesorów. Niektóre z bloków zawierają więcej funkcji tworzących niż inne (na przykład stempel ψ(σ x ) = { } reprezentuje więcej konfiguracji niż ψ(σ y ) = { }). Przed rozdziałem zadań do procesorów należy więc przeprowadzić pewne dodatkowe operacje analizujące wielkość bloków. Operacje te nie wymagają dużego nakładu czasu, a znacznie optymalizują proces zrównoleglenia. Dla krótkich konfiguracji (tzn. małych szerokości pasa) i dużej liczby procesorów dobre zrównoważenie wielkości zadań osiąga się poprzez podzielenie opisanych wcześniej bloków na podbloki, które rozdzialamy pomiędzy procesory. Celem takiego działania jest zwiększenie liczby zadań poprzez zmniejszenie ich wielkości. Naturalnie burzy to blokową diagonalność macierzy M i zwiększa komunikację między procesorami, ale w praktyce okazuje się, że konieczność zapisu do podbloku znajdującego się przy innym procesorze pojawia się dość rzadko. Implementacja Conwaya i Guttmanna uruchomiona została na 1024-procesorowym superkomputerze Intel Paragon XP/S 150. Obliczenia wymagały 12 godzin czasu oraz 10 GB pamięci, przy czym wielkość danych wymienianych pomiędzy procesorami autorzy szacują na około 5 TB. W całym czasie działania zużycie procesorów wyniosło około 50% Pruning algorithm Przedstawimy teraz algorytm, którym uzyskano najnowsze wyniki dotyczące problemu zliczania ścieżek SAWs [35]. Autorem algorytmu jest Iwan Jensen z Uniwersytetu w Melbourne (Australia). Pierwotnie nowy algorytm został zastosowany do rozwiązania analogicznego problemu dla modelu SAP [37, 34]. Niewielkie modyfikacje pozwoliły zaadoptować go do modelu SAW. Algorytm jest ulepszoną wersją algorytmu CEG. Modyfikacja polega na tym, że dla dużych K (szerokość pasa) algorytm potrafi odrzucić pewne konfiguracje, które doprowadziłyby do ścieżek o długości większej niż N max, gdzie N max to zadana długość SAWs. Najpierw obliczana jest wartość N cur, która wyraża liczbę krawędzi położonych po lewej stronie linii cięcia l. Następnie obliczana jest wartość N add, tzn. minimalna liczba krawędzi wymagana do zakończenia generowania ścieżki SAW na skończonej kracie. Są trzy wartości wpływające na wielkość N add : 1. Liczba krawędzi potrzebna do połączenia pętli otwartych i wolnych końców tak, aby powstała poprawna SAW. 2. Liczba krawędzi potrzebna, by SAW doszła do górnego i dolnego brzegu pasa. 3. Liczba krawędzi potrzebna, by SAW zajmowała pas o długości L K. Jeśli spełniona będzie nierówność N cur + N add > N max, wówczas można bieżącą konfigurację odrzucić, gdyż uzyskalibyśmy zbyt długą ścieżkę.

55 4.3. Pruning algorithm 55 Nowy algorytm zawiera także inne ulepszenia. Pierwsze to wykorzystanie symetrii, których nie uwzględniono w algorytmie CEG. Po ukończeniu obliczeń dla pewnej kolumny częściowa funkcja tworząca dla konfiguracji cięcia σ x = { } jest identyczna jak dla konfiguracji σ y = { }: f σ x(u) = f σ y(u). Inna cenna modyfikacja to ulepszone zarządzanie pamięcią. Pamiętanych jest pierwszych N max (N cur + N add ) składników funkcji tworzących. Badanie złożoności tego algorytmu jest nieco trudniejsze niż algorytmu CEG. Obliczono ją dopiero na podstawie wyników działania programu, badając liczbę wygenerowanych konfiguracji σ dla różnych wartości N max. Okazało się, że złożoność nowego algorytmu jest gorsza niż CEG i wynosi około ( ) n (1.3335) n. A zatem zliczanie długich ścieżek wykone zostanie szybciej i przy użyciu mniejszej pamięci przez algorytm z 1993 r. Natomiast dla małych N max algorytm Jensena jest znacznie efektywniejszy. Dla porównania, obliczenia dla n = 51 przy użyciu CEG wymagają 10GB pamięci, a przy użyciu algorytmu pruningu niecałe 150MB Zrównoleglenie algorytmu Zrównoleglenie pruning algorithm bazuje na tym samym inwariancie, który określono dla algorytmu CEG. Obliczenia wykonano na klastrze serwerów HP AlphaServer SC45 3 w APAC 4 (Australian Partnership for Advanced Computing). Ponieważ liczba ścieżek dla n 45 przekracza zakres 64-bitowego słowa maszynowego, używa się arytmetyki modularnej [40]. Obliczenia wykonuje się modulo liczby pierwsze p i, a później rekonstruuje się końcowy wynik. Liczby p i nazywa się moduli i muszą być wzajemnie pierwsze. Autorzy użyli dwóch moduli p 0 = 2 62 oraz p 1 = Zapotrzebowanie na pamięć RAM sięgnęło wartości 100GB. Największe wymagania pojawiły się przy szerokościach kraty z zakresu [24, 29] i każdy z tych przypadków wymagał godzin przy użyciu 128 procesorów. 3 Klaster składa się ze 127 serwerów HP ES45 zawierających po cztery procesory 1GHz, co najmniej 4GB (łącznie klaster posiada 696GB) pamięci RAM oraz co najmniej 72GB pojemności dyskowej (łącznie ponad 10TB). Klaster jest obecnie na 164 miejscu rankingu Top500 ( 4

56

57 5. Algorytm łączenia kwadratów W niniejszym rozdziale opiszemy pewien nowy algorytm dla problemu zliczania ścieżek wolnych od przecięć na dwuwymiarowej kracie kwadratowej, który daje się łatwo zrównoleglić. Pomysł przyspieszenia zliczania SAWs polega na rozbiciu kraty Z 2 na indeksowane liczbami całkowitymi i, j podkraty K i,j, z których każda zawiera w w wierzchołków o współrzędnych (i w + k, j w l), 0 k, l < w. Stała w jest pewną niewielką liczbą naturalną stanowiącą parametr algorytmu. W dalszej części pracy podkraty K i,j nazywane będą kwadratami o boku w. Przykładowy fragment rozbicia kraty Z 2 na kwadraty K i,j przedstawiono na rys Następnie, dla każdej ścieżki wolnej od przecięć P na kracie Z 2, obserwujemy miejsca przejść P przez granicę każdego z kwadratów K i,j oraz obliczamy sumaryczną długość fragmentów P w każdym z kwadratów. Punkty przejść oraz długości fragmentów P w poszczególnych kwadratach nazywać będziemy śladem ścieżki. Idea algorytmu polega na tym, by systematycznie przeglądać wszystkie poprawne ślady i dla każdego kolejno wygenerowanego śladu S odczytywać z wcześniej przygotowanej bazy danych liczbę ścieżek P ze śladem S. Stąd algorytm składa się z dwóch części: fazy wstępnej (ang. precomputing), w której tworzona jest baza danych, oraz fazy głównej, w której generuje się w pewien systematyczny sposób wszystkie ślady. Rysunek 5.1. Podział kraty na podkraty K i,j Ponieważ nawet dla małych wielkości w, liczba śladów ścieżek długości n jest bardzo duża, stąd w tworzonej podczas pierwszej fazy bazie danych nie pamięta się kompletnych śladów, lecz jedynie ich lokalne fragmenty odnoszące się do poszczególnych kwadratów. Następnie, w fazie głównej generuje się kompletne ślady ścieżek, bazując

58 58 5. Algorytm łączenia kwadratów na ich lokalnych fragmentach. Dla dokładniejszego wyjaśnienia, użyjmy następującej notacji. Niech S oznacza ślad ścieżki SAW, t.j. niech S = i,j Z σ i,j, (5.1) gdzie σ i,j koduje w pewien ustalony sposób: (1) punkty wejścia/wyjścia SAW do/z kwadratu K i,j, oraz (2) długość fragmentów SAW w K i,j. Dokładny sposób tego kodowania omówimy w następnym podrozdziale. Celem fazy pierwszej jest obliczenie wielkości L(σ i,j ), którą definiujemy jako liczbę wszystkich różnych fragmentów ścieżek wolnych od przecięć ze śladem σ i,j. W fazie głównej obliczamy sumy częściowe: S = i,j L σi,j, (5.2) z których wyliczamy c n = S S. (5.3) 5.1. Faza wstępna (precomputing) Na rys. 5.2 pokazano sześć różnych fragmentów SAW mających jednakowe ślady lokalne, dla pewnego kwadratu o boku w = 5: jedno wejście na ścianie północnej (trzecie od lewej); jedno wyjście na ścianie wschodniej (trzecie od góry); długość fragmentu równa 5. Zauważmy, że długość fragmentu SAW w kwadracie definiowana jest jako liczba wierzchołków w danym kwadracie, przez które fragment SAW przechodzi. Zadaniem fazy wstępnej jest, dla zadanego śladu lokalnego σ i,j kwadratu K i,j, zliczenie wszystkich fragmentów SAW mających ślad σ i,j. Jak podaliśmy wcześniej, wielkości te oznaczamy poprzez L(σ i,j ). Zwróćmy uwagę, że zadanie to nie zależy od indeksów i, j: dla wszystkich par liczb całkowitych (i, j) oraz (i, j ) z równości σ i,j = σ i,j wynika L(σ i,j ) = L(σ i,j ). Stąd problem obliczania funkcji L zredukować można do dowolnego kwadratu K. Nazwijmy, podobnie jak w poprzednim rozdziale, pętlą otwartą taki fragment SAW, którego oba końce przekraczają granicę kwadratu. Niech ponadto wolnym końcem będzie nazwany taki fragment SAW, którego tylko jeden z końców przekracza granice kwadratu, drugi zaś znajduje sie wewnątrz kwadratu. Ślad lokalny σ kodujemy jako trójkę (border, perm, in length), gdzie: border koduje miejsca przejść ścieżki przez granice kwadratu; perm: dla danego kodu border, perm określa pary zakończeń pętli otwartych i zakończenia wolnych końców; in length koduje liczbę wierzchołków, poprzez które fragmenty SAW przechodzą w danym kwadracie. Całkowita długość kompletnej SAW równa się więc i,j in length Ki,j 1, gdzie in length Ki,j oznacza omawianą wielkość dla kwadratu K i,j. Dla danego border oznaczmy dodatkowo przez border length liczbę wejść/wyjść do/z kwadratu (border length [0; 4w]).

59 5.1. Faza wstępna (precomputing) 59 Oznaczmy boki kwadratu kierunkami geograficznymi: N, E, S, W. Border definiujemy jako czwórkę (N,E,S,W), która koduje wejścia do kwadratu w sposób następujący: kolejnym jednostkowym odcinkom kraty Z 2 przecinającym boki kwadratu, przypisujemy etykietę 1, jeżeli przechodzi przez nie SAW, a 0 w przeciwnym razie. Dla ścian N i S etykiety czytamy od lewej do prawej, dla ścian E i W od góry do dołu. Przykładowy kod ściany N dla kwadratu o w = 5, przez którą przechodzi SAW na pierwszej i czwartej pozycji wygląda następująco: Taki kod traktujemy jako liczbę binarną i odwołujemy się do niego jako do liczby naturalnej: = Na rysunku 5.2 przedstawiono wszystkie możliwe fragmenty SAW dla śladu lokalnego σ zakodowanego jako ((N=4, E=4, S=0, W=0), perm=(s 1, t 1 ), 5), gdzie (s 1, t 1 ) oznacza, że kwadrat zawiera jedną pętlę otwartą o początku w s 1 i końcu w t 1. Dla tego śladu mamy więc: L(σ) = 6. W pracy będziemy często utożsamiać ślad, z jego kodem. Cel fazy wstępnej można przedstawić zatem także jako obliczenie dla każdej trójki ((N, E, S, W ), perm, in length) wielkości L((N, E, S, W ), perm, in length). Szczegóły dotyczące kodowania dla perm zostaną podane w kolejnych podrozdziałach. Rozpatrzymy przy tym osobno przypadki, kiedy liczba wejść/wyjść do/z kwadratu, a więc wielkość border length, jest parzysta i oddzielnie, kiedy liczba ta jest nieparzysta Parzysta liczba przejść Dla parzystej wartości border length można wyróżnić dwa przypadki: 1. kwadrat nie zawiera fragmentu SAW, który jest wolnym końcem, 2. kwadrat zawiera dokładnie dwa wolne końce. Zwróćmy uwagę, że dla poprawnych SAWs nie istnieje kwadrat, który zawiera więcej niż dwa wolne końce oraz, że istnieją w sumie co najwyżej dwa kwadraty zawierające fragmenty SAW będące wolnymi końcami. Rozpatrzmy teraz sytuację (1.). Rysunek 5.2. Wszystkie ślady typu I o określonym border i in length=5 Rysunek 5.3. Permutacja wejść i wyjść dla kwadratu b) to (s 1, s 2, t 1, s 3, t 2, t 3 ), a dla kwadratu d) ma postać (s 1, t 1, t 2, s 2, t 3, s 3 ) Będziemy rozpatrywać tylko takie sytuacje, gdy poszczególne fragmenty SAW nie przecinają się wewnątrz kwadratu. Przyjmijmy pewne skierowania fragmentów SAW w rozważanym kwadracie. Niech zapis s i t i oznacza fragment SAW z początkiem w s i i wyjściem w t i, (1 i border length 2). Sformułujmy pytanie:

60 60 5. Algorytm łączenia kwadratów Pytanie Czy dla danego śladu o określonym border istnieje k rozłącznych fragmentów SAW takich, że s 1 t 1, s 2 t 2,..., s k t k, gdzie k = border length 2? Rysunki 5.3a i 5.3b pokazują, że odpowiedź nie zawsze jest twierdząca oraz, że zależy ona od położenia wejść s i i wyjść t i względem siebie. Uzasadnienie, że w przypadku b) odpowiedź jest negatywna znajdujemy w prosty sposób: każdy fragment SAW startując w s 1 i dochodząc do t 1 odcina s 2, uniemożliwiając tym samym dojście z s 2 do t 2. Odpowiedź negatywna dla przypadku a) wymaga jednak argumetacji innego typu: każda próba łączenia po kolei wejść i wyjść ze sobą, doprowadza do zapełnienia wnętrza kwadratu, tak, że na połączenie ostatniej pary brakuje wolnych odcinków. Dowolny układ wejść i wyjść w śladzie o ustalonym border, zapisywać będziemy jako permutacje ciągu (s 1, s 2,..., s k, t 1, t 2..., t k ), który reprezentuje kolejne wejścia/wyjścia kwadratu czytane zgodnie z ruchem wskazówek zegara, począwszy od lewego górnego wierzchołka kwadratu. Przedstawiony na rys. 5.3b układ wejść/wyjść opisuje ciąg (s 1, s 2, t 1, s 3, t 2, t 3 ). Zauważmy, że dla tego układu niemożliwe jest znalezienie k rozłącznych dróg, co pokazane jest na rys. 5.3c niezależnie od przebiegu dróg s 1 t 1 oraz s 3 t 3, nie ma możliwości połączenia s 2 z t 2. Naturalnymi są więc nastepujące pytania: Pytanie Jakie układy wejść/wyjść dopuszczają istnienie k rozłącznych dróg s i t i? Pytanie Jaka jest liczba różnych układów, o które pytamy w pyt ? Łatwo zauważyć, że warunkiem koniecznym, który spełniać muszą układy o jakie pytamy w jest następujący warunek: jeżeli w ciągu (p 1,..., p 2k ) reprezentującym układ wejść/wyjść istnieją takie j 1, j 2, j 3, że 1 j 1 < j 2 < j 3 k oraz dla pewnych i, i zachodzi p j1 = s i, p j2 = s i oraz p j3 = t i to pomiędzy j 1 a j 3 musi istnieć indeks j 4 taki, że p j4 = t i. Dla uniknięcia zliczania w fazie wstępnej tych samych fragmentów SAW wielokrotnie, musimy wprowadzić pewne dodatkowe ograniczenia na układy wejść/wyjść. Nietrudno zauważyć, że z ustalonego układu wejść/wyjść możemy otrzymać inny układ wejść/wyjść, który opisuje te same układy fragmentów SAW poprzez: 1. zamianę końców ścieżek (rys. 5.4), 2. zamianę indeksów końców ścieżek (rys. 5.5). Dla wyeliminowania powtórzeń pierwszego typu należy wprowadzić ograniczenie s i musi poprzedzać t i albo ograniczenie t i musi poprzedzać s i. Określenie s i poprzedza t i oznacza, że w permutacji, która reprezentuje układ wejść/wyjść, s i występuje wcześniej niż t i. W pracy przyjęto pierwsze ograniczenie. Powtórzenia drugiego typu można wyeliminować wprowadzając warunek s i musi poprzedzać s j, dla i < j. Stąd dla wygenerowania wszystkich układów wejść/wyjść, opisujących różne układy fragmentów SAW, należy wygenerować wszystkie takie permutacje ciągu (s 1,..., s k, t 1,..., t k ), które dla 1 i < j border length 2 spełniają następujące warunki: 1. s i musi poprzedzać s j,

61 5.1. Faza wstępna (precomputing) s i musi poprzedzać t i, 3. jeżeli pomiędzy s i a t i znajduje się s j, to pomiędzy s i a t i musi znajdować się także t j. Przykładowo, dla border length=4, permutacje spełniające te warunki to: (s 1, s 2, t 2, t 1 ) (s 1, t 1, s 2, t 2 ). Rysunek 5.4. Powtórzenia typu (1.) Permutacja s 1, s 2, t 2, t 1 opisuje ten sam układ fragmentów SAW, co permutacja t 1, t 2, s 2, s 1 Rysunek 5.5. Powtórzenia typu (2.) Permutacja s 1, s 2, t 2, t 1 opisuje tę samą ścieżkę, co permutacja s 2, s 1, t 1, t 2 Zmienna perm kodować będzie permutacje spełniające warunki (1.)-(3.). Algorytm generowania i zliczania wszystkich układów fragmentów SAWs z ustaloną parzystą liczbą wejść/wyjść (border length) oraz z zadanym border, można przedstawić w sposób następujący. Algorytm Wejście: długość boku kwadratu w; Wyjście: dla każdej z poprawnych wartości border, in length obliczamy kw[border,in length ]= perm L(border,perm,in length ). 1: Dla każdego border o parzystym border length : 2: Zainicjuj in length =0, oraz w czasie generowania fragmentów SAW, aktualizuj odpowiednio in length. 3: Weź pierwsze wolne wejście i oznacz je jako s i. 4: Generuj ścieżkę w kwadracie od aktualnego s i. 5: Po dojściu do dowolnego wejścia/wyjścia, sprawdź, czy może to być t i, tzn. czy pomiędzy t i a s i znajduje się parzysta liczba wolnych wejść/wyjść. 6: Jeżeli nie, przejdź do 4. 7: Jeżeli tak, zapamiętaj, że s i i t i są już połączone ze sobą i oznacz odpowiednie wejście/wyjście jako zajęte. 8: Jeśli istnieją jeszcze wolne wejścia/wyjścia, idź do 3. 9: Zwiększ licznik w tablicy kw[border,in length ]. Jest to algorytm z rekurencyjnym wywołaniem ukrytym w mechanizmie generowania ścieżki w kroku 4. Algorytm nie generuje i nie zapamiętuje permutacji perm. Gwarancją spełnienia warunków (1.)-(3.) dla permutacji perm jest sposób, w jaki permutacje te są tworzone: kolejne wejścia s i pobierane są jako pierwsze wolne wejście/wyjście idąc zgodnie z ruchem wskazówek zegara od lewego górnego rogu kwadratu. Niektóre algorytmy użyte w fazie głównej (opisane w dalszej części pracy) wymagają wprost informacji o perm. Zanim przedstawiony zostanie algorytm generujący permutacje perm opisujące połączenia wejść, omówione zostanie pewne spostrzeżenie, przydatne w jego implementacji. Generowanie prawidłowych permutacji można przed-

62 62 5. Algorytm łączenia kwadratów stawić jako problem generowania poprawnego ciągu k par nawiasów. Za poprawny ciąg nawiasów rozumiemy tutaj taki ciąg, jaki mógłby wystąpić w wyrażeniu algebraicznym. Mamy zatem do wygenerowania k par nawiasów na 2k pozycjach. Spostrzeżenie to pozwala nam również na kodowanie permutacji perm, przy pomocy dwóch znaków: nawiasu otwierającego ( oraz nawiasu zamykającego ). Taki sposób kodowania przyjęto w dalszej części pracy. Ciągi nawiasów można generować przy użyciu następującej funkcji rekurencyjnej: function gen (l, r) { for(j=l+1; j r; j+=2) { out(l, ( ); gen(l+1, j-1) out(j, ) ); gen(j+1, r) } } gdzie l oraz r oznaczają skrajne pozycje rozpatrywanego przedziału miejsc, na które wpisujemy nawiasy w bieżącym wywołaniu funkcji gen(l,r), dla l, r [1, 2k]; j określa pozycję nawiasu zamykającego. Funkcja out drukuje na pozycji podanej jako pierwszy argument nawias, który jest drugim argumentem funkcji out. Wynik generowania rozstawień nawiasów dla k=3 oraz przykładowe, odpowiadające im fragmenty SAW, przedstawiono na rys Wygenerowane w ten sposób ciągi nawiasów reprezentują warunek konieczny, aby połączenia wejść i wyjść nie przecinały się wzajemnie wewnątrz kwadratu. Dygresja: Dla większej czytelności zapisu nawiasowej reprezentacji permutacji można generować k par różnych nawiasów. Wówczas odpowiednia funkcja generująca ciągi nawiasów ma postać: function gen (k1, k2, l, r) { for(j=l+1; j r; j=j+2) { out(l, otw[k1]); gen(k1+1, k1+(r-l-1)/2, l+1, j-1) out(j, zam[k1]); gen(k1+(j-l-1)/2+1, k2, j+1, r) } } gdzie tablica otw przechowuje nawiasy otwierające, a tablica zam odpowiednie nawiasy zamykające; k1 oraz k2 oznaczają indeksy par nawiasów (k1, k2 [1, k]). W tabeli 5.1 zestawiono wygenerowaną liczbę permutacji dla k par nawiasów, k [1, 14]. Otrzymane wyniki stanowią ciąg liczb Catalana (znany także pod nazwą ciągu liczb Segnera). Otrzymujemy w ten sposób odpowiedź na pytanie Wyrazy

63 5.1. Faza wstępna (precomputing) 63 Rysunek 5.6. Permutacje nawiasów opisujące możliwe połączenia 6 wejść/wyjść w kwadracie (border length=6) ciągu Catalana można wyliczyć ze wzoru: ( ) 2n n G n = n + 1 = (2n)! (n + 1)n! 2 = (2n)! (n + 1)!n! oraz wzoru rekurencyjnego: (5.4) G n = 2(2n 1) n + 1 G n 1. (5.5) Więcej informacji o liczbach Catalana i ich licznych zastosowaniach można znaleźć w [30], [75], [76], [77], [78] i [79]. Tabela 5.1. Liczba permutacji w zależności od liczby par wejść/wyjść; k - liczba par, n k - liczba permutacji k n k k n k Inną dodatkową informacją wymaganą w fazie głównej algorytmu jest informacja o końcach SAWs. W tym celu wprowadzamy klasyfikację śladów ze względu na zawartość końców ścieżki. Rozróżniamy cztery typy śladów. W naszej implementacji będziemy pamiętać wielkość L(border, perm, in length) w polach counter1, counter2, counter3, counter4, w zależności od typu śladu. Kwadraty, które rozważaliśmy dotychczas nie zawierały ani jednego fragmentu SAW, który jest wolnym końcem. Ślady dla takich kwadratów będziemy nazywać śladami typu I. Możliwa jest także sytuacja, że kwadrat opisany śladem o parzystym border length może zawierać dwa wolne końce. Taki ślad nazywamy śladem typu IV, a przykład przedstawiony jest na rys Generowanie śladów typu IV dla border length= 2k + 2 polega na wygenerowaniu śladów typu I o border length= 2k, a następnie dogenerowaniu dwóch fragmentów SAW, które swój jeden koniec mają w środku kwadratu, a drugi

64 64 5. Algorytm łączenia kwadratów ich koniec dochodzi do wejścia kwadratu. Robimy zastrzeżenie, że jeden z fragmentów musi mieć koniec o współrzędnych w kwadracie równych (0, 0) powód tego założenia podany jest w podrozdziale Permutacja wejść/wyjść dla śladów typu IV oprócz znaków ( i ) zawiera także dwa znaki na oznaczenie wejść, do których dochodzą dogenerowane kawałki Nieparzysty border length Sytuacja, gdy border length jest nieparzysty występuje, gdy kwadrat zawiera wolny koniec. Rozpatrujemy takie kwadraty analogicznie jak kwadraty zawierające dwa wolne końce (czyli ze śladem typu IV). Generowanie śladów o border length= 2k+1 polega na wygenerowaniu śladów typu I o border length= 2k, a następnie dogenerowaniu jednego fragmentu SAW, który tylko wchodzi do kwadratu i z niego nie wychodzi (czyli jeden z jego końców jest wewnątrz kwadratu). Należy tu jednak wyróżnić kwadraty zawierające początek i koniec globalnej SAW, ponieważ w przeciwnym razie dopuścilibyśmy w fazie głównej do generowania ścieżek SAW identycznych względem przesunięcia. Problem ten przedstawiony jest na rys W tym celu określamy współrzędne wewnątrz kwadratów, w których rozpoczynać się będzie globalna SAW. Ze względu na inne aspekty algorytmu opisane w dalszej części pracy (symetria) przyjmujemy, że tymi współrzędnymi będą (0, 0), czyli wierzchołek w lewym górnym rogu kwadratu. Ślady dla kwadratów z końcem SAW w (0, 0) nazywamy śladami typu II i mogą być one użyte zarówno dla początku globalnej ścieżki SAW jak i jej końca. Ślady o nieparzystym border length posiadające fragment SAW kończący się w wierzchołku innym niż (1, 1) będziemy nazywać śladami typu III i mogą być one użyte tylko jako zakończenie globalnej ścieżki SAW. Permutacje wejść/wyjść dla obydwóch typów śladów zawierać będą oprócz znaków ( i ) jeden znak. Przykład jest na rysunku 5.7. Rysunek 5.7. Przykłady śladów różnych typów wraz z permutacjami wejść Rysunek 5.8. Ścieżki identyczne względem przesunięcia powstały po ułożeniu różnych zestawów śladów takie sytuacje należy eliminować Permutacje wejść/wyjść i język Motzkina Na początku przedstawimy w oparciu o [55], [56] i [66] kilka niezbędnych definicji. Definicja Język D nazywamy językiem Dycka, jeżeli należą do niego tylko te słowa nad alfabetem {x, y} które spełniają następujące własności. Dla danego słowa w = w 1 w 2... w m o długości m, spełnione są warunki:

65 5.1. Faza wstępna (precomputing) w x = w y 2. 1 j m w 1 w 2... w j x w 1 w 2... w j y, gdzie w α oznacza liczbę wystąpień litery α w słowie w. Z warunku (1.) definicji wynika, że słowa w języku D mają parzystą długość. Definicja Słowem Dycka nazywamy słowo należące do języka D zdefiniowanego w definicji Wniosek Liczba słów długości 2n w D jest liczbą Catalana G n. Lemat Język D jest językiem algebraicznym (bezkontekstowym). Dowód. Słowo Dycka w można zdefiniować rekurencyjnie. Niepuste słowo w zbudowane jest następująco: rozpoczyna się literą x, po której występuje słowo Dycka, następnie jest litera y, a na końcu jeszcze jedno słowo Dycka. Stąd D jest rozwiązaniem prostego systemu z = 1 + xzyz, oraz D + = D 1 jest rozwiązaniem systemu algebraicznego z = x(z + 1)y(z + 1) = xy + xyz + xz y + xz yz. (5.6) Z 5.6 wynika, że D jest językiem algebraicznym. Ze względu na możliwość wyrażenia wielu problemów wyliczeniowych za pomocą języka D, język ten jest jednym z najważniejszych języków algebraicznych. Definicja Język M nazywamy językiem Motzkina, jeżeli należą do niego tylko słowa nad alfabetem {x, y, a, b} o następującej własności. Dla danego słowa w o długości m, w = w 1 w 2... w m spełnione są warunki: 1. w x = w y 2. 1 j m w 1 w 2... w j x w 1 w 2... w j y. Definicja Słowem Motzkina nazywamy słowo należące do języka M zdefiniowanego w definicji Wniosek Po usunięciu ze słowa Motzkina wszystkich liter a i b otrzymujemy słowo Dycka. Nietrudno zauważyć, że permutacje nawiasów dla śladów typu I są słowami Dycka, a dla śladów typu II-IV są słowami Motzkina. We wszystkich przypadkach słowo ma długość border length Algorytm generowania permutacji wejść Na stronie 62 podana została funkcja gen() generująca napisy składające się z k nawiasów otwierających i k nawiasów zamykających, gdzie k =border length 2. Wygenerowane napisy reprezentują połączenia wejść w śladach typu I. Opiszemy teraz sposób generowania napisów reprezentujących połączenia wejść dla śladów pozostałych typów. Napisy te będą zawierały jeden znak dla śladów typu II i III oraz dwa znaki dla śladów typu IV. Dla każdej wielkości border length=m, wygenerowane ciągi znaków będziemy przechowywać w tablicach uloz(m) oraz miesz(m).

66 66 5. Algorytm łączenia kwadratów Rysunek 5.9. Generowanie tablic miesz(m). Kolorem czerwonym zaznaczono ciągi, które należy odrzucić ze względu na powtórzenia Dla każdej wartości m, w tablicy uloz(m) znajdują się ciągi reprezentujące połączenia dla śladów typu I, II i III. W tablicach miesz(m) pamiętane są ciągi dla śladów typu IV. W tym przypadku m oznacza również border length, ale z oczywistych względów tablice miesz(m) nie istnieją dla nieparzystych m. Wspomniana funkcja gen() generuje zatem tablice uloz(m) dla parzystych m. Liczba elementów w tablicy dla śladów typu I jest liczbą Catalana dla połowy długości ciągu, czyli G m. Wstawiając znak na każdej możliwej pozycji na początku, końcu oraz pomiędzy znaki we wszystkich ciągach tablicy uloz(m) otrzymujemy tablice 2 uloz(m+1). Liczba elementów w tablicy uloz(m+1) wynosi zatem (m + 1)G m. 2 Generowanie tablic miesz(m) odbywa się analogicznie, choć jest nieco bardziej złożone. Tablicą wejściową jest uloz(m), gdzie m jest nieparzyste. Wstawiając drugi znak należy wykluczyć wygenerowanie dwóch jednakowych ciągów. Taka sytuacja może powstać w dwóch przypadkach. Pierwszy to wstawienie drugiego znaku najpierw po lewej, a potem po prawej stronie pierwszego podkreślenia. Można to łatwo wyeliminować przyjmując, że drugi znak dostawiamy zawsze z prawej strony. Drugi przypadek to uzyskanie jednakowego ciągu z dwóch różnych ciągów wejściowych. Na przykład ( )() uzyskamy z dodania na pierwszej pozycji ciągu ( )() oraz na trzeciej pozycji ciągu ()(). W celu jednokrotnego generowania ciągów wykorzystujemy fakt, że tablica uloz(m) jest zbudowana w taki sposób, że dla tego samego korpusu nawiasowego np. ()(), znak dodawany był w kolejności od lewej do prawej. To znaczy, najpierw jest ciąg ()(), potem ( )(), a na samym końcu jest ()(). Pozycja znaku mówi nam, ile pierwszych wygenerowanych ciągów z dwoma podkreśleniami należy odrzucić. Szczegółowo pokazane jest to na rysunku 5.9. Liczba elementów w tablicy miesz(m) równa się G m 2 m 1 i=1 i. 2 Tabela 5.2 przedstawia liczbę elementów tablic uloz(m) i miesz(m) dla border length [1, 28]. Po wygenerowaniu wszystkich ciągów tablice są sortowane rosnąco algorytmem QuickSort, przyjmując porządek < ( < ). Sortowanie wykonuje się w celu zastosowania algorytmu wyszukiwania binarnego przy generowaniu śladów.

67 5.1. Faza wstępna (precomputing) 67 Tabela 5.2. Liczby ciągów wygenerowane w tablicach uloz(m) i miesz(m) m uloz(m) miesz(m)

68 68 5. Algorytm łączenia kwadratów 5.2. Faza główna Zdefiniujmy macierz kwadratową M, która symbolizować będzie kwadraty K i,j i której elementy będą opisywać ślady lokalne σ i,j dla poszczególnych kwadratów: n w M = [a r,s ] m m, m = w. (5.7) Przyjmujemy, że a 1,1 oznacza lewy górny róg macierzy M, a m,m oznacza prawy dolny róg macierzy M, pierwsza współrzędna oznacza numer wiersza, a druga współrzędna numer kolumny. Element a r,s macierzy M o współrzędnych m m (r, s) = ( i + + 1, j + + 1) 2 2 symbolizuje kwadrat K i,j, a wartością tego elementu będzie jeden z lokalnych śladów σ i,j dla kwadratu K i,j, które wygenerowano w fazie wstępnej. Naszym celem jest tak dobierać ślady lokalne, aby dały one w efekcie kompletny ślad SAWs. Dla ułatwienia opisu konstrukcji takiego śladu będziemy mówić w skrócie, że położyliśmy ślad σ i,j na pozycji (r, s), mając na myśli nadanie zmiennej a r,s wartości σ i,j. Dwa ślady mogą być położone obok siebie, jeżeli układ ich wejść/wyjść jest zgodny, co jest dość proste do sprawdzenia. Przyjęto bowiem odczytywać ściany poziome od lewej do prawej strony, a pionowe od góry do dołu. Wystarczy więc tylko sprawdzić czy np. S σi,j = N σi 1,j. Rozmieszczanie śladów rozpoczynamy od środkowej komórki macierzy, czyli a m 2, m 2, w której dozwolone jest położenie tylko śladów typu II lub typu IV. Następnie tworzona jest kolejka komórek macierzy M, w których będziemy umieszczać ślady. Do kolejki wpisujemy współrzędne (r, s) tych sąsiadów właśnie położonego śladu, które muszą być ułożone, aby połączyć fragmenty ścieżki w jedną ścieżkę SAW o zadanej długości n. W momencie, gdy sumaryczna długość fragmentów zawartych w położonych kwadratach równa się n, a kolejka jest pusta, następuje obliczenie sumy częściowej, czyli liczby ścieżek wygenerowanych przez ułożone ślady lokalne. Odbywa się to według wzoru (5.2): S = i,j L σi,j. Po rozpatrzeniu wszystkich poprawnych ułożeń śladów S otrzymujemy wynik: c n = C S. W procesie układania śladow należy dbać o to, by połączone ślady lokalne utworzyły poprawny kompletny ślad dla SAWs długości n. W szczególności z ułożonych śladów lokalnych nie powinniśmy otrzymać śladu dla sytuacji, w której powstał jeden SAW krótszej długości i kilka cykli lub kilka krótszych ścieżek (zob. rysunki 5.10 i 5.11). W tym celu opracowano algorytm eliminacji cykli i błędnych ścieżek Algorytm eliminacji cykli i błędnych ścieżek Jeden z pomysłów opiera się na zliczaniu wejść/wyjść z kwadratów. W procesie układania śladów, sumuje się wartości border length. Obliczoną sumę oznaczamy przez

69 5.2. Faza główna 69 P. Po ułożeniu SAW należy przejść po ścieżce, licząc ile razy przechodzi ona z jednego kwadratu do innego, co oznaczamy przez R. Jeżeli P 2R > 0, wówczas powstał cykl lub inne odłączone fragmenty ścieżki i uzyskaną konfigurację należy odrzucić 1. Jednak taki sposób wydaje się być nieefektywny, dlatego opracowano inne rozwiązanie tego problemu. Każdemu wejściu/wyjściu położonego śladu przypisywany jest unikalny w skali całej macierzy M identyfikator id N. Sprawdzając połączenia zarówno wewnątrz kwadratów jak i pomiędzy kwadratami, tworzymy listy wejść należących do jednego fragmentu SAW. Algorytm ma 2 warianty: wariant A najpierw bada połączenia wewnątrz kwadratu, a później na zewnątrz, natomiast wariant B robi to w odwrotnej kolejności. Po wykryciu, że dwa wejścia łączą się ze sobą, listy zawierające ich identyfikatory są łączone w jedną listę. Jeżeli okaże się, że listy do połączenia są tą samą listą, oznacza to, że wystąpił cykl i bieżąca konfiguracja kwadratów jest zła. Przykład wykrycia przez algorytm cyklu przedstawiono na rys Sprawdzenie połączeń wewnątrz kwadratu odbywa się według prostego algorytmu ze stosem, badającego ciąg znaków reprezentujących układ wejść w kwadracie (opisane wcześniej ciągi perm): Algorytm : Czytaj znaki z ciągu od lewej do prawej. 2: Jeżeli napotkasz ( zapamiętaj na stosie indeks i o tego znaku ) odczytaj indeks i z tego znaku odczytaj ze stosu indeks i o ostatnio położonego znaku ( (i o, i z ) tworzy parę połączonych ze sobą wejść nic nie rób 3: Jeżeli są jeszcze znaki w ciągu, to odczytaj następny znak i idź do 2, w przeciwnym wypadku idź do 4. 4: Koniec. Po wykonaniu algorytmu 5.2.1, na podstawie indeksu wejścia w ciągu perm możemy odczytać id wejścia. Sprawdzenie połączeń zewnętrznych polega na odczytaniu id odpowiednich pozycji przylegających ścian. Innym problemem jest wykrywanie sytuacji, gdy ułożono kilka ścieżek SAW o łącznej długości n. Jest to jednak bardzo proste do wykrycia. Pierwszy sposób, wykorzystujący struktury danych budowane dla algorytmu eliminacji cykli, polega na sprawdzeniu liczby list po ułożeniu śladów jeżeli jest ona większa od 1, wówczas powstało kilka krótkich ścieżek SAW i taka konfiguracja jest odrzucana. Drugie rozwiązanie sprawdza, czy kolejka komórek macierzy M do obsłużenia jest pusta jeżeli nie, to znaczy, że ścieżka nie jest kompletna. W konsekwencji możemy sprawdzać wartość otw oznaczającą liczbę otwartych (niepołączonych) wejść. Jeżeli otw > 0, to oznacza to, że otrzymaliśmy więcej niż jedną ścieżkę. Jako czwarte rozwiązanie, zastosowane w implementacji algorytmu, możemy sprawdzać, czy otw > n - dl biezaca, gdzie dl biezaca jest sumą in length wszystkich śladów obecnie ułożonych w macierzy. Pozwala to na wcześniejsze wykrycie niepożądanej sytuacji, a także na wcześniejsze skończenie procesu układania kwadratów, co opisane jest w punkcie Ponieważ cykl na pewno nie będzie zawierać wierzchołka startowego, algorytm taki na pewno się skończy.

70 70 5. Algorytm łączenia kwadratów Rysunek Algorytm wykrywania cyklu w wersji B Rysunek Zadana długość SAW wynosi 7 krawędzi, czyli musi być zajętych 8 wierzchołków. Chociaż kwadraty pasują do siebie i osiągnięto zadaną długość, to nie możemy takiej sytuacji zliczać. Algorytm eliminacji cykli wykrywa to, gdyż powstały dwie listy wejść: 1,2,3,4,5 oraz 6,7. Druga metoda sprawdzi, że kolejka komórek nie jest pusta znajduje się na niej kwadrat A. Trzecie podejście wykryje, że otw=3, a czwarte, że 3 > 8 8 = Symetrie W punkcie opisano możliwe symetrie dla dwuwymiarowej kraty kwadratowej. W tym algorytmie zliczania ścieżek wykorzystano symetrię obrotową. Jako początek ścieżki SAW przyjmujemy współrzędną (0, 0) wewnątrz kwadratu i określamy, że pierwszy krok, jaki ścieżka wykona, ma być w kierunku N. Nakładamy więc ograniczenie na sposób położenia śladu początkowego: ściana północna musi być postaci 1(0 + 1) w 1 co oznacza, że jej wartości w systemie dziesiętnym są z zakresu [2 w 1, 2 w 1]. Liczbę ścieżek otrzymanych w ten sposób mnożymy na koniec przez 4. Konsekwencją wyboru współrzędnej (0, 0) jako początku ścieżki oraz nakaz wykonania pierwszego kroku na północ, jest przymusowe położenie przynajmniej dwóch śladów nie trzeba więc zliczać ścieżek SAW, które całkowicie zawierałyby się w jednym kwadracie.

71 5.3. Implementacja Wybór śladów początkowych Śladami początkowymi mogą być ślady typu II i IV. Można jednak nałożyć pewien dodatkowy warunek wyboru śladów, tak aby zmniejszyć ilość zbędnych poszukiwań. Każde z wejść/wyjść w kwadracie początkowym wymusza konieczność położenia fragmentu ścieżki SAW o długości co najmniej 2. Oczywiste jest więc, że nie ma sensu rozpatrywanie takich śladów początkowych, dla których border length> n 2. Sprawa nieco się komplikuje dla kwadratów o parzystej długości boku. Istnieją wówczas takie ścieżki, które przechodzą przez dwa wejścia, zajmując tylko jeden wierzchołek taka sytuacja dotyczy rogów kwadratów. Problemem są przypadki, w których ścieżka nie oddala się od granicy kwadratu nawet na jeden krok oraz przechodzi przez wierzchołek narożny dla dwóch przyległych wejść. Można ten problem rozwiązać na kilka sposobów. Pierwszy polegałby na modyfikacji warunku do postaci border length> n+3 2, gdyż problem może dotyczyć maksymalnie 3 rogów. Pozwolilibyśmy jednak tym samym na rozpatrywanie pewnych śladów początkowych, które nie muszą być rozpatrywane, co zmniejszyłoby korzyści wynikające z wprowadzenia warunku. Można więc zmodyfikować fazę wstępną tak, aby zapisywała informację o tym, ile jest podwójnych rogów dla danego border. Wówczas warunek miałby postać: border length> n+l podw rogow 2. Ale to rozwiązanie nakłada dodatkowe wymagania na pamięć. Trzecim rozwiązaniem, zastosowanym w implementacji algorytmu, jest pozostawienie warunku w pierwotnej postaci, dopuszczając odrzucenie tym samym sytuacji, które odrzucone być nie powinny. Okazuje się jednak, że łatwo naprawić ten błąd. Wystarczy dodać do końcowego wyniku wartość 4 dla wybranych długości n. Na przykład, dla w = 4 długościami SAW (liczonymi jako liczba krawędzi), które należy zmodyfikować w ten sposób są: 8, 10, 12, 14, 15, 17, 19, 21, 22, 24, 26. W dalszej części pracy pokażemy, jaki ilościowy wpływ na działanie algorytmu ma zastosowanie opisanego warunku Obcinanie rekursji Warunkiem końcowym układania kolejnych kwadratów w macierzy M jest uzyskanie odpowiedniej sumarycznej długości fragmentów zawartych we wszystkich położonych kwadratach, którą oznaczymy przez dl biezaca. Oczywisty jest więc warunek, że dalsze układanie nie ma sensu, jeżeli dl biezaca> n. Można jednak nałożyć bardziej restrykcyjny warunek. Oznaczmy przez otw liczbę wejść/wyjść do/z kwadratów w całej macierzy M, które są otwarte, czyli wymagają postawienia kolejnych śladów lokalnych, które je połączą. Wówczas można przerwać budowanie ścieżki, w przypadku gdy otw > n dl biezaca, ponieważ zamknięcie każdego z wejść wymaga zajęcia co najmniej jednego wierzchołka grafu. Należy jeszcze tylko wziąć poprawkę na fakt, że wierzchołki grafu leżące w rogu kwadratu, mogą mieć kontakt z dwoma wejściami pochodzącymi od dwóch kwadratów. W takiej sytuacji te dwa wejścia należy policzyć jako otw= 1, gdyż oba są zamykane jednym i tym samym wierzchołkiem Implementacja Algorytm zaimplementowano w języku ANSI C i skompilowano na dwóch komputerach. Pierwszym był jednoprocesorowy komputer klasy PC, z procesorem Intel Pentium IV 1400MHz i pamięcią RAM o pojemności 512MB, z kompilatorem firmy Borland. Drugim był komputer równoległy ze wspólną pamięcią (ang. shared-memory) SunFire 15K z kompilatorem cc dostarczonym przez firmę SUN. Kompilacja wykonywana była

72 72 5. Algorytm łączenia kwadratów dla architektury 64-bitowej działającej pod systemem Solaris 9. Program uruchamiany był pod domeną z dostępnymi 64 procesorami UltraSPARC III+ 900Mhz i 64GB fizycznej pamięci RAM. Zrównoleglenie obliczeń wykonano przy pomocy biblioteki OpenMP. Podstawową reprezentacją ścian śladów jest liczba naturalna będąca odpowiednikiem liczby w systemie dwójkowym powstałej w wyniku zakodowania układu wejść i wyjść. W ten sposób przejrzenie wszystkich możliwych border realizowane jest przez wykonanie czterech pętli: for (N=0; N<2 w ; N++) for (E=0; E<2 w ; E++) for (S=0; S<2 w ; S++) for (W=0; W<2 w ; W++) W fazie głównej korzystamy także z innej reprezentacji, w której każda ściana jest wektorem identyfikatorów id wejść, np. N=[3;0;4]. Jak już pisaliśmy w opisie algorytmu, identyfikatory są unikalne dla całej macierzy M. Wartość zero oznacza, że dla tej krawędzi nie ma wejścia do kwadratu. Ważnym aspektem kodowania border jest kierunek odczytywania etykiet. Przyjmujemy, że ściany N i S odczytujemy od lewej strony do prawej, a ściany E i W od góry do dołu. W ten sposób bardzo łatwo można sprawdzić, czy kwadraty do siebie pasują wystarczy porównać dwie zmienne. Ponadto dla każdego śladu pamiętany jest wektor (o długości border length) identyfikatorów id wszystkich wejść/wyjść do/z kwadratu. Kolejność nadawania identyfikatorów jest zgodna z ruchem wskazówek zegara i zaczyna się od lewego końca ściany N. Przykładowa wartość wektora dla border length= 6 wynosi [4;5;6;7;8;9]. Identyfikatory zawarte w wektorze pozwalają na szybkie uzyskanie informacji o tym, jakie są nadane id wejściom reprezentowanym przez odpowiadające sobie nawiasy ( i ) w ciągu perm. Wykorzystuje się to w algorytmie wykrywania cykli, w którym należy sprawdzić, czy identyfikatory połączonych wejść są na jednej liście. Ułożenie wejść/wyjść zawierające informację o ich połączeniach wewnątrz kwadratu reprezentowane jest przez ciąg znaków długości border length składający się z liter (, ) oraz, przy czym: jeżeli border length jest nieparzysty, to liczba wystąpień litery musi wynosić 1, jeżeli border length jest parzysty, to liczba wystąpień litery musi wynosić 0 lub 2, niezależnie od border length liczba ( musi równać się liczbie ). Szkielet całego algorytmu przedstawia się następująco: Algorytm Wejście: długość SAWs n, długość boku kwadratu w Wyjście: liczba SAWs c n Przygotowanie struktur danych: Alokacja tablicy kw i jej wyczyszczenie (wpisanie do wszystkich komórek NULL). Wygeneruj tablice uloz(m). Wygeneruj tablice miesz(m). Posortuj zawartość tablic uloz(m) i miesz(m). Faza wstępna: Dla każdego border o parzystym border length: Weź pierwsze wejście i generuj ścieżkę w kwadracie. Jak dojdziesz do dowolnego wejścia/wyjścia, to sprawdź, czy to może być wyjście. Jeżeli nie, to generuj dalej. Jeżeli tak, to zapamietaj, które wejścia są połączone wygenerowanym fragmentem SAW, weź następne wolne wejście i generuj w ten sam sposób.

73 5.3. Implementacja 73 A: Gdy już wszystkie wejścia będą połączone z wyjściami, zapisz wynik w tablicy kw (ślad typu I). Zwiększ border length o 1 i na podstawie znalezionego śladu typu I, wygeneruj wszystkie możliwe ślady typu II i III i zapisz je w tablicy kw. Dla każdego znalezionego śladu typu II lub III zwiększ border length o 1 i wygeneruj wszystkie ślady typu IV i zapisz je w kw. Następnie wróć do poziomu A i szukaj następnych możliwych śladów typu I dla początkowej wartości border. Scalanie tablic kw: Przekopiuj wszystkie struktury wew_kw ze wszystkich kopii tablic kw do jednej kw, która zostanie przekazana na wejście fazy głównej. Faza główna: Dla każdego śladu początkowego: Układaj ślady aż powstanie konfiguracja dająca kompletny ślad dla ścieżek SAWs o zadanej długości n. Oblicz iloczyn liczników w położonych śladach i dodaj go do końcowego wyniku. Wypisz wynik, zniszcz struktury danych. Rysunek Główna struktura danych fazy wstępnej. Wartość N w tablicy wsk na miesz oznacza wartość NULL. Tablice uloz(m) i miesz(m) są jeszcze nieposortowane Na rysunku 5.12 przedstawiono strukturę danych dla fazy wstępnej, której wynikiem jest tablica kw. Tablica ta jest indeksowana parametrem border oraz in length, a jej elementy przechowują wskaźniki do listy jednokierunkowej struktur wew kw. Elementy na liście rozróżniane są przez ulozenie, które wskazuje ciąg reprezentujący połączenia wewnętrzne wejść kwadratu (perm). Do jednego ciągu znajdującego się w tablicy uloz(m) lub miesz(m) mogą być odwołania, z kilku różnych struktur wew kw przypisanych śladom o różnym border, ale jednakowym border length. Ten fakt został wykorzystany przy zrównoleglaniu algorytmu.

74 74 5. Algorytm łączenia kwadratów 5.4. Zrównoleglenie algorytmu Zrównoleglenie faz wstępnej i głównej odbywa się podobnie. Różnice wynikają z odmiennego charakteru zadań wykonywanych w tych fazach Faza wstępna Do wykonania fazy wstępnej tworzonych jest 2 w wątków, ponieważ zrównolegleniu podlega pętla for (N=0; N<2 w ; N++). Kążdy z wątków generuje ślady dla wartości border o innym składniku N (ściana północna). Ponieważ znajdowanie kolejnych śladów odbywa się bardzo szybko, operacja zapisu śladu do tablicy kw wykonywana jest bardzo często. Aby zapewnić bezpieczny dostęp do danych należy kontrolować operację zapisu do współdzielonych struktur danych. Przykładowo można zdefiniować ją jako sekcję krytyczną, tzn. tylko jeden wątek może się znaleźć w takiej sekcji. Jednak takie rozwiązanie bardzo negatywnie wpłynęłoby na efektywność, doprowadzając nawet do sytuacji, gdy program równoległy wykonuje się dłużej niż program sekwencyjny. Przeprowadzono więc analizę, w wyniku której okazało się, że jest możliwy taki podział struktur danych, aby każdy wątek zapisywał znalezione kwadraty tylko do swojej części struktur. Na koniec obliczeń należy wykonać scalanie danych, aby faza główna otrzymała jedną, kompletną strukturę. Podział danych Dla każdego początkowego border, tzn. wartościowania zmiennych N, E, S i W, generowane są ścieżki wewnątrz kwadratu i w efekcie otrzymujemy dane do zapisania w strukturze wew kw. Należy zatem zbadać, czy można tak podzielić zadania pomiędzy wątki, aby nie zachodziła konieczność zapisywania danych przez dwa wątki do jednej struktury. Jak łatwo zobaczyć, dla zadań generowania ścieżek dla różnych startowych wartości border: wartości border śladów typu I nie pokrywają sie, ponieważ są one takie, jak wartości startowe, wartości border śladów typu II i III mogą się pokrywać, co pokazane jest na rysunku 5.13, wartości border śladów typu IV również mogą się pokrywać, co pokazane jest na rysunku Ślady typu I nie stanowią zatem żadnego problemu przy podziale zadań. Jednakże dla śladów typu II-IV, dwa różne wątki mogą wygenerować struktury dla identycznych wartości border. Zwróćmy jednak uwagę, że w takich przypadkach struktury te będą opisane przez inne ciągi nawiasowe (ciśgi perm). Wątki te wygenerują zatem listy struktur wew kw, które poźniej zostaną połączone w jedną listę. Taki jest właśnie cel scalania danych. Scalanie danych Każdy wątek ma swoją kopię tablicy kw, do której zapisuje struktury. Scalanie ma na celu skopiowanie zawartości wszystkich kopii do jednej, głównej tablicy. Ponieważ struktury przechowywane są w dynamicznie tworzonej liście, ich połączenie polega na podłączaniu początków list do końca odpowiedniej listy. Również ten etap można

75 5.4. Zrównoleglenie algorytmu 75 Rysunek Oba kwadraty mają taki sam border: N=4, E=6, S=2, W=2. Ciąg nawiasów dla kwadratu a) to ()(), dla kwadratu b) (() ). Kwadrat a) został wygenerowany na podstawie border N=4, E=6, S=2, W=0, kwadrat b) na podstawie border N=4, E=6, S=0, W=2 Rysunek Oba kwadraty mają taki sam border: N=6, E=2, S=10, W=2. Ciąg nawiasów dla kwadratu a) to () (), dla kwadratu b) ()(). Kwadrat a) został wygenerowany na podstawie border N=6, E=0, S=10, W=0, kwadrat b) na podstawie border N=0, E=2, S=10, W=2 wykonywać równolegle. Na rysunku 5.15 pokazano schemat scalania dla kwadratów o boku w = 4. Równoległe kopiowanie wykonuje się log 2 2 w = w razy. Rysunek Scalanie tablicy kw dla w = Faza główna Zrównoleglenie fazy głównej odbywa się poprzez przydzielenie różnym wątkom różnych śladów startowych. Zadania wątków są całkowicie niezależne od siebie. Struktury danych wygenerowane przez fazę wstępną wykorzystwane są w fazie głównej tylko do odczytu, a zatem nie występują problemy z dostępem do nich i mogą być efektywnie współdzielone. W trakcie badań empirycznych okazało się, że wielkość zadań jest bardzo mocno zróżnicowana. W celu minimalizacji dysproporcji pomiędzy wielkościami zadań, wprowadzono bardzo małe ziarno zadań jedno zadanie to jeden początkowy border. Pomimo tego zabiegu różnice nadal były bardzo duże. Na przykład, dla pewnych danych wejściowych po jednej minucie policzyły się wszystkie zadania oprócz dziesięciu, które liczyły się jeszcze równolegle dwadzieścia trzy minuty. W tym czasie pozostałe wątki nie wykonywały żadnej pracy. Badania pokazały, że zróżnicowanie wielkości zadań jest ściśle i bezpośrednio związane z poziomem rekurencji, do którego dochodzi algorytm dla danego śladu początkowego (tzn. położonego jako pierwszy w konfiguracji). Zadania, które wpływają na złą skalowalność, osiągają najwyższy poziom rekurencji spośród wszystkich zadań. Ich cechą charakterystyczną jest, że ślady początkowe mają mały border length: z przedziału [1, 3].

76 76 5. Algorytm łączenia kwadratów 5.5. Uzyskane wyniki Fazę wstępną policzono dla kwadratów o boku w [3, 5]. Otrzymane czasy działania tej fazy na dwóch komputerach i dla różnych danych wejściowych podane są w tabeli 5.3. Dla wersji równoległej dodatkowo podany jest czas scalania danych. Widzimy, że wraz ze zwiększaniem wielkości kwadratów czas działania rośnie bardzo szybko. Wynika to z bardzo dużej liczby śladów generowanych przez algorytm, co ma także odzwierciedlenie w wielkości wykorzystanej pamięci. Zapotrzebowanie na pamięć wynosi: 33MB dla w = 3, 492MB dla w = 4, 25GB dla w = 5 w wersji sekwencyjnej i 28GB dla w = 5 w wersji równoległej. Ze względu na wadę alokatora pamięci mtmalloc (opisana w punkcie 7.5.1) ostatecznie rzeczywiste zapotrzebowanie na pamięć dla w = 5 wyniosło 48GB, jednak była ona tylko częściowo wykorzystywana przez program z uwagi na nieoptymalnie działający alokator. Dodatkowo niefektywność alokatora wydłużyła podany w tabeli czas działania fazy wstępnej o 60%. Niewykluczone, że po zastosowaniu innego alokatora (np. Hoard, zob ) nie tylko zredukowana zostanie pamięć alokowana dla programu, ale również skróci się czas działania podany w tabeli 5.3. Tabela 5.3. Czasy działania fazy wstępnej (hh:mm:ss) w PC Pilgrim - sekwencyjnie Pilgrim - równolegle 3 00:00:00 00:00:00 00:00:00+00:00: :00:46 00:00:40 00:00:15+00:00: :48:27 02:27:20+00:30:00 W tabelach 5.4, 5.5 i 5.6 podane są czasy działania fazy głównej dla uruchomień na komputerze PC oraz Pilgrim. Wykonano dwa uruchomienia w środowisku równoległym, z wykorzystaniem 5 i 40 wątków. Okazuje się, że ze względu na niekorzystną dysproporcję wielkości zadań faza główna nie jest dobrze skalowalna. Niezależnie od stopnia zrównoleglenia obserwujemy wykładniczy wzrost czasu działania, z podstawą około 3. W połączeniu z dużą stałą wynikającą ze złożonych struktur danych jest to złożoność, która nie pozwala na uzyskanie zadowalających wyników, tzn. policzenia ścieżek SAW dla długości 30 < n < 50 w czasie krótszym niż przy użyciu algorytmu brute-force. Analizę tłumaczącą otrzymane wyniki przedstawiamy w podrozdziale 5.6. Tabela 5.4. Czasy działania fazy głównej na PC (hh:mm:ss) Tabela 5.5. Czasy działania fazy głównej na Pilgrimie dla 5 wątków (hh:mm:ss) Tabela 5.6. Czasy działania fazy głównej na Pilgrimie dla 40 wątków (hh:mm:ss) n w = 3 w = :00:04 00:00: :00:13 00:00: :00:46 00:02: :02:34 00:07: :08:11 00:22: :26:21 01:12: :21:47 03:41: :11:39 11:30:20 w = 3 w = 4 w = 5 00:00:02 00:00:04 00:01:00 00:00:04 00:00:12 00:02:29 00:00:14 00:00:35 00:05:08 00:00:46 00:01:55 00:24:53 00:02:27 00:06:02 00:49:14 00:07:51 00:18:45 02:04:49 00:24:09 00:57:51 05:33:09 01:14:20 02:48:03 16:57:29 w = 3 w = 4 w = 5 00:00:01 00:00:04 00:00:55 00:00:04 00:00:12 00:02:08 00:00:14 00:00:37 00:05:46 00:00:45 00:01:55 00:14:25 00:02:27 00:05:57 00:41:27 00:07:46 00:18:34 01:55:34 00:24:10 00:56:50 05:24:20 01:14:15 02:52:17 15:11:26

77 5.6. Analiza algorytmu Analiza algorytmu W tym punkcie pokażemy pewne dane ilościowe dotyczące działania algorytmu i na ich podstawie wytłumaczymy, dlaczego algorytm nie działa tak szybko, jak się spodziewaliśmy przystępując do jego opracowania Tempo zliczania Wykonano badania mające na celu sprawdzenie, z jakich i ilu wartości otrzymywany jest ostateczny wynik c n. Dla przypomnienia, liczbę SAW o zadanej długości uzyskujemy sumując częściową liczbę ścieżek S generowanych przez poszczególne konfiguracje kwadratów: c n = S S. Szybkie tempo zliczania osiąga się w przypadku, gdy dla wielu składników sumy zachodzi związek S 1. Gdyby składniki S były dużymi liczbami, wówczas szybko uzyskalibyśmy wynik końcowy gdyż gwarantuje to istnienie małej liczby składników sumy. W praktyce okazało się, że tak nie jest. W tabeli 5.7 przedstawiamy, ile razy (dolne wiersze) wystąpiły poszczególne wartości S (górne wiersze) dla w = 3 i n = 13. Największa składnik sumy, S, jaki się pojawił w całym sumowaniu miał wartość 180. Liczba c 13 uzyskana była zatem poprzez sumowanie liczb z zakresu [1, 180]. Okazuje się jednak, że zdecydowana większość składników sumy miała bardzo małe wartości, możemy przyjąć, że z zakresu [1, 10]. Składniki z drugiego przedziału o wartościach [11, 30] wystąpiły średnio często, ale składniki najbardziej nas interesujące, tj. o dużych wartościach prawie wogóle nie pojawiły się. Można zatem stwierdzić, że podobnie jak w algorytmie brute-force, gdzie wynik końcowy uzyskuje się z dodawania do siebie wartości jeden, tutaj wynik końcowy uzyskuje się z dodawania małych wartości niewiele większych od jeden. Operacja dodawania wykonywana była razy (suma wartości dolnych wierszy), a ponieważ c 13 = , to średnia wartość S wynosi w przybliżeniu Rysunek 5.16 zawiera wykres dla danych z tabeli 5.7. Na rysunku 5.17 przedstawiamy analogiczny wykres dla n = 15. Na obu wykresach wyraźnie widać koncentrację składników sumy przy małych wartościach. Skoro przeważająca liczba S jest małymi wartościami, zastanawiające jest, ile jest śladów o danych wartościach licznika L σi,j? Tabela 5.8 udziela odpowiedzi na to pytanie dla w = 3. Zdecydowanie najwięcej jest śladów o małych wartościach licznika. Co więcej, wraz ze wrostem licznika, liczba śladów bardzo szybko maleje. Badanie wykonano także dla w = 4, ale ze względu na wielkość tabeli 5.9 nie zamieszczamy jej w pracy w pełnej postaci, tylko wybrane wiersze. Czym spowodowany jest niekorzystny rozkład wartośći L σi,j? Główną przyczyną jest fakt, że najwięcej jest śladów o dużym border length jest dużo więcej permutacji długich ciągów nawiasowych niż krótkich ciągów. A to właśnie dla śladów o dużej wartości border length jest najmniej możliwości przeprowadzenia ścieżki SAW na różne sposoby. Dodatkowo dla małych kwadratów, a takim mianem należy określić kwadraty o bokach w [3, 5], stosunek liczby wejść do wierzchołków wewnątrz kwadratu jest bardzo niekorzystny. Ponadto każde wejście wymaga, aby ścieżka przeszła przez co najmniej jeden wierzchołek. Pozostaje więc niewiele wierzchołków, po których można przeprowadzić fragmenty łączące wejścia z wyjściami. Również podział śladów na cztery typy wpłynął na zmniejszenie wartości liczników L σi,j.

78 78 5. Algorytm łączenia kwadratów Tabela 5.7. Liczby wystąpień sum częściowych [1..180], które powstały dla w = 3, n =

79 5.6. Analiza algorytmu 79 Rysunek Liczniki składników sumy o poszczególnych wielkościach dla w = 3, n = 13 Rysunek Liczniki składników sumy o poszczególnych wielkościach dla w = 3, n = 15

80 80 5. Algorytm łączenia kwadratów Tabela 5.8. Liczba śladów lokalnych z podziałem na wielkość licznika (w = 3) licznik typ I typ II typ III typ IV SUMA SUMA Tabela 5.9. Liczba śladów lokalnych z podziałem na wielkość licznika (w = 4) licznik typ I typ II typ III typ IV SUMA SUMA

81 5.6. Analiza algorytmu Głębokość rekurencji algorytmu W niniejszym podrozdziale omówimy głębokość rekurencji fazy właściwej algorytmu. Położenie jednego śladu lokalnego w pewnej konfiguracji odpowiada jednemu poziomowi rekurencji. Mówiąc inaczej, pytanie dotyczy liczby śladów wchodzących w skład jednej konfiguracji. Przeprowadzone badania pokazały, że wraz ze wzrostem długości zliczanych ścieżek, rośnie liczba śladów początkowych generujących najwyższe poziomy rekurencji. Dla kwadratów o boku w = 3 wyniki badania umieszczone są w tabeli 5.10, dla w = 4 w tabeli 5.11, a dla w = 5 w tabeli O zależności pomiędzy głębokością rekurencji poszczególnych zadań (dla przypomnienia, jedno zadanie zawiera ułożenie wszystkich konfiguracji dla jednego śladu początkowego), a skalowalnością algorytmu napisaliśmy w punkcie Wpływ selekcji kwadratów początkowych Pokażemy teraz, jak zastosowanie warunku opisanego w punkcie wpłynęło na liczbę śladów początkowych rozpatrywanych przez fazę główną. Zastosowanie warunku border length> n 2 skróciło czas obliczeń o około 5-10%, w zależności od długości zliczanych ścieżek. W tabeli 5.13 pokazane jest, dla ilu śladów początkowych algorytm rozpoczynał poszukiwania (tzn. ile było zadań do wykonania), przy czym dodatkowo pokazujemy, do jakiego poziomu rekurencji doszedł algorytm. Poziom rekurencji równa się maksymalnej liczbie śladów wchodzących w skład jednej konfiguracji. Liczba w ostatniej kolumnie mówi, jaki był największy border length ze wszystkich rozpatrywanych śladów początkowych. Jeżeli w jednej komórce tabeli są dwie liczby, to górna odnosi się do wersji algorytmu bez zastosowania warunku border length> n 2, a dolna do wersji z tymże warunkiem. Zauważamy, że zysk z warunku selekcji jest dla śladów, dla których poziom rekurencji był niski. Ponadto, przy zastosowaniu warunku selekcji, dla zwiększającego się n rośnie liczba zadań (przedostatnia kolumna). Dla ścieżek dłuższych niż te, dla których wykonano badania, warunek w końcu przestanie mieć jakiekolwiek znaczenie, a liczba rozpatrywanych śladów początkowych będzie niezależna od stosowania warunku selekcji. Wynika to z faktu, że n0 n n0 max bl < n 2, gdzie max bl jest maksymalnym border length, jaki może się pojawić dla danej długości w boku kwadratu Złożoność obliczeniowa algorytmu Nie możemy na podstawie wyników uzyskanych dla w = 3 i w = 4 szacować złożoności obliczeniowej algorytmu. Faktycznie, dla parametru w o tak małych wartościach, algorytm ma złożoność O(3 n ), co pokazaliśmy i wyjaśniliśmy w poprzednich punktach. Główną przyczyną wysokiej złożoności jest niewielka liczba wierzchołków wewnątrz małych kwadratów, w związku z czym algorytm nie wykorzystuje zalet opracowanych t(n) t(n 1) struktur danych. Na wykresie 5.18 widzimy wartości ilorazów, gdzie przez t(n) oznaczamy czas działania algorytmu dla SAWs o długości n, dla w = 4 i implementacji sekwencyjnej. Można jednak przypuszczać, że dla w 5 algorytm będzie działać znacznie efektywniej. Przy obecnej implementacji i dostępnych zasobów komputera nie jesteśmy w stanie sprawdzić zachowania się algorytmu dla parametru w > 5. Na wykresie 5.19 przedstawiamy współczynniki przyrostu czasu działania algorytmu dla w = 5 i implementacji równoległej dla 4 procesorów (dla małej liczby procesorów uzyskujemy dobrą skalowalność). Na wykresie zaznaczono także dolne i górne ograniczenie dla stałej µ

82 82 5. Algorytm łączenia kwadratów Tabela Liczba śladów początkowych, dla których algorytm doszedł do określonego poziomu rekurencji (w = 3) Poziom rekurencji n = 9 n = 10 n = 11 n = 12 n = 13 n = 14 n = Suma Tabela Liczba śladów początkowych, dla których algorytm doszedł do określonego poziomu rekurencji (w = 4) Poziom rekurencji n = 9 n = 10 n = 11 n = 12 n = 13 n = 14 n = Suma Tabela Liczba śladów początkowych, dla których algorytm doszedł do określonego poziomu rekurencji (w = 5) Poziom rekurencji n = 9 n = 10 n = 11 n = 12 n = 13 n = 14 n = Suma

83 5.7. Wnioski 83 Tabela Zyski z wprowadzonego ograniczenia na wybór kwadratów początkowych dla kwadratów o boku w = 3 n=9 n=10 n=11 n=12 n=13 n=14 n=15 Rekurencja Liczba Max kw. począt. border length (connective constant). Widzimy, że współczynniki przyrostu czasu zachowują się bardzo niestabilnie. Ich wartość związana jest z liczbą śladów początkowych rozważanych przez algorytm. Zauważmy, że największe przyrosty czasu występują dla tych n, dla których liczba śladów początkowych gwałtownie rosła (ostatni wiersz tabeli 5.12). Niestabilność wywołana jest więc przez warunek selekcji śladów początkowych. Jednocześnie większość współczynników ma wartość mniejszą niż dolne ograniczenie µ. Widzimy więc, że dla w = 5 złożoność algorytmu jest znacznie lepsza niż dla w = 4. Wysuwamy zatem hipotezę, że dla w > 5 iloraz t(n) t(n 1) będzie mniejszy od µ. Rysunek Współczynnik przyrostu czasu obliczeń dla w = 4 (implementacja 1 wątkowa) 5.7. Wnioski Chociaż początkowo autor miał duże nadzieje na uzyskanie przyspieszenia względem algorytmu Brute Force SAW stosując omówiony algorytm, to okazało się to

84 84 5. Algorytm łączenia kwadratów Rysunek Współczynnik przyrostu czasu obliczeń dla w = 5 (implementacja 4 wątkowa) być niemożliwe. Opracowany algorytm układa konfiguracje kwadratowych obszarów płaszczyzny, w których znajdują się fragmenty ścieżki. Jedna konfiguracja reprezentuje kilka ścieżek SAWs. Bezpośrednią przyczyną długiego czasu działania jest częsty udział śladów o małym liczniku przejść ścieżek przez kwadrat. Wydawało się, że ślady o dużych licznikach będą na tyle często wykorzystywane, że zrekompensują koszt obsługi złożonych struktur danych. Zachęcające było to, że licznik ścieżek c n był sumą iloczynów liczników L σi,j. Wysuwamy jednak hipotezę, że dla większych kwadratów złożoność algorytmu jest mniejsza niż O(µ n ). Szansą na uzyskanie lepszych wyników byłoby także opracowanie algorytmu bazującego na opisanym podejściu, ale z eliminacją sytuacji, które w małym stopniu powiększają wartość c n. Należałoby zastąpić je kilkoma prostymi operacjami, aby kosztowny proces układania konfiguracji z kwadratów wykonywany był wyłącznie w sytuacjach opisujących bardzo dużo globalnych ścieżek SAWs. Takie podejście pozwoliłoby na szybkie obliczenie przybliżonej liczby SAWs. Uzyskane wyniki pozwalają wysnuć wniosek, że w modelu SAW zdecydowanie najwięcej jest ścieżek, które tworzą kłębki, tzn. obszary z wieloma nawrotami i spiralami, w których stosunek wierzchołków zajętych przez ścieżkę do niezajętych jest wysoki. Zainspirowany wnioskiem na temat istnienia wielu ścieżek w postaci kłębków, autor pracy opracował inne podejście do problemu zliczania, opisane w następnym rozdziale.

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

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

Bardziej szczegółowo

Algorytmy Równoległe i Rozproszone Część X - Algorytmy samostabilizujące.

Algorytmy Równoległe i Rozproszone Część X - Algorytmy samostabilizujące. Algorytmy Równoległe i Rozproszone Część X - Algorytmy samostabilizujące. Łukasz Kuszner pokój 209, WETI http://www.sphere.pl/ kuszner/ kuszner@sphere.pl Oficjalna strona wykładu http://www.sphere.pl/

Bardziej szczegółowo

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

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

Bardziej szczegółowo

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

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

Bardziej szczegółowo

Matematyczne Podstawy Informatyki

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

Bardziej szczegółowo

Wprowadzenie do złożoności obliczeniowej

Wprowadzenie do złożoności obliczeniowej problemów Katedra Informatyki Politechniki Świętokrzyskiej Kielce, 16 stycznia 2007 problemów Plan wykładu 1 2 algorytmów 3 4 5 6 problemów problemów Plan wykładu 1 2 algorytmów 3 4 5 6 problemów problemów

Bardziej szczegółowo

Analiza korespondencji

Analiza korespondencji Analiza korespondencji Kiedy stosujemy? 2 W wielu badaniach mamy do czynienia ze zmiennymi jakościowymi (nominalne i porządkowe) typu np.: płeć, wykształcenie, status palenia. Punktem wyjścia do analizy

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

OSTASZEWSKI Paweł (55566) PAWLICKI Piotr (55567) Algorytmy i Struktury Danych PIŁA

OSTASZEWSKI Paweł (55566) PAWLICKI Piotr (55567) Algorytmy i Struktury Danych PIŁA OSTASZEWSKI Paweł (55566) PAWLICKI Piotr (55567) 16.01.2003 Algorytmy i Struktury Danych PIŁA ALGORYTMY ZACHŁANNE czas [ms] Porównanie Algorytmów Rozwiązyjących problem TSP 100 000 000 000,000 10 000 000

Bardziej szczegółowo

Obliczenia inspirowane Naturą

Obliczenia inspirowane Naturą Obliczenia inspirowane Naturą Wykład 01 Modele obliczeń Jarosław Miszczak IITiS PAN Gliwice 05/10/2016 1 / 33 1 2 3 4 5 6 2 / 33 Co to znaczy obliczać? Co to znaczy obliczać? Deterministyczna maszyna Turinga

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

Optymalizacja ciągła

Optymalizacja ciągła Optymalizacja ciągła 5. Metoda stochastycznego spadku wzdłuż gradientu Wojciech Kotłowski Instytut Informatyki PP http://www.cs.put.poznan.pl/wkotlowski/ 04.04.2019 1 / 20 Wprowadzenie Minimalizacja różniczkowalnej

Bardziej szczegółowo

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

Struktury danych i złożoność obliczeniowa Wykład 5. Prof. dr hab. inż. Jan Magott Struktury danych i złożoność obliczeniowa Wykład 5 Prof. dr hab. inż. Jan Magott DMT rozwiązuje problem decyzyjny π przy kodowaniu e w co najwyżej wielomianowym czasie, jeśli dla wszystkich łańcuchów wejściowych

Bardziej szczegółowo

Metody numeryczne Wykład 4

Metody numeryczne Wykład 4 Metody numeryczne Wykład 4 Dr inż. Michał Łanczont Instytut Elektrotechniki i Elektrotechnologii E419, tel. 4293, m.lanczont@pollub.pl, http://m.lanczont.pollub.pl Zakres wykładu Metody skończone rozwiązywania

Bardziej szczegółowo

Spacery losowe generowanie realizacji procesu losowego

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

Bardziej szczegółowo

Tomasz Tobiasz PLAN WYNIKOWY (zakres podstawowy)

Tomasz Tobiasz PLAN WYNIKOWY (zakres podstawowy) Tomasz Tobiasz PLAN WYNIKOWY (zakres podstawowy) klasa 3. PAZDRO Plan jest wykazem wiadomości i umiejętności, jakie powinien mieć uczeń ubiegający się o określone oceny na poszczególnych etapach edukacji

Bardziej szczegółowo

TEORETYCZNE PODSTAWY INFORMATYKI

TEORETYCZNE 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ół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

1. Potęgi. Logarytmy. Funkcja wykładnicza

1. Potęgi. Logarytmy. Funkcja wykładnicza 1. Potęgi. Logarytmy. Funkcja wykładnicza Tematyka zajęć: WYMAGANIA EDUKACYJNE NA POSZCZEGÓLNE OCENY KL. 3 POZIOM PODSTAWOWY Potęga o wykładniku rzeczywistym powtórzenie Funkcja wykładnicza i jej własności

Bardziej szczegółowo

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

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

Bardziej szczegółowo

W rachunku prawdopodobieństwa wyróżniamy dwie zasadnicze grupy rozkładów zmiennych losowych:

W rachunku prawdopodobieństwa wyróżniamy dwie zasadnicze grupy rozkładów zmiennych losowych: W rachunku prawdopodobieństwa wyróżniamy dwie zasadnicze grupy rozkładów zmiennych losowych: Zmienne losowe skokowe (dyskretne) przyjmujące co najwyżej przeliczalnie wiele wartości Zmienne losowe ciągłe

Bardziej szczegółowo

WYMAGANIA EDUKACYJNE Z MATEMATYKI 2016/2017 (zakres podstawowy) klasa 3abc

WYMAGANIA EDUKACYJNE Z MATEMATYKI 2016/2017 (zakres podstawowy) klasa 3abc WYMAGANIA EDUKACYJNE Z MATEMATYKI 2016/2017 (zakres podstawowy) klasa 3abc 1, Ciągi zna definicję ciągu (ciągu liczbowego); potrafi wyznaczyć dowolny wyraz ciągu liczbowego określonego wzorem ogólnym;

Bardziej szczegółowo

Ćwiczenia nr 7. TEMATYKA: Krzywe Bézier a

Ćwiczenia nr 7. TEMATYKA: Krzywe Bézier a TEMATYKA: Krzywe Bézier a Ćwiczenia nr 7 DEFINICJE: Interpolacja: przybliżanie funkcji za pomocą innej funkcji, zwykle wielomianu, tak aby były sobie równe w zadanych punktach. Poniżej przykład interpolacji

Bardziej szczegółowo

Porównanie czasów działania algorytmów sortowania przez wstawianie i scalanie

Porównanie czasów działania algorytmów sortowania przez wstawianie i scalanie Więcej o sprawności algorytmów Porównanie czasów działania algorytmów sortowania przez wstawianie i scalanie Załóżmy, że możemy wykonać dane zadanie przy użyciu dwóch algorytmów: jednego o złożoności czasowej

Bardziej szczegółowo

Statystyka. Wykład 9. Magdalena Alama-Bućko. 24 kwietnia Magdalena Alama-Bućko Statystyka 24 kwietnia / 34

Statystyka. Wykład 9. Magdalena Alama-Bućko. 24 kwietnia Magdalena Alama-Bućko Statystyka 24 kwietnia / 34 Statystyka Wykład 9 Magdalena Alama-Bućko 24 kwietnia 2017 Magdalena Alama-Bućko Statystyka 24 kwietnia 2017 1 / 34 Tematyka zajęć: Wprowadzenie do statystyki. Analiza struktury zbiorowości miary położenia

Bardziej szczegółowo

Testowanie hipotez statystycznych.

Testowanie hipotez statystycznych. Bioinformatyka Wykład 9 Wrocław, 5 grudnia 2011 Temat. Test zgodności χ 2 Pearsona. Statystyka χ 2 Pearsona Rozpatrzmy ciąg niezależnych zmiennych losowych X 1,..., X n o jednakowym dyskretnym rozkładzie

Bardziej szczegółowo

Funkcja kwadratowa. f(x) = ax 2 + bx + c,

Funkcja kwadratowa. f(x) = ax 2 + bx + c, Funkcja kwadratowa. Funkcją kwadratową nazywamy funkcję f : R R określoną wzorem gdzie a, b, c R, a 0. f(x) = ax 2 + bx + c, Szczególnym przypadkiem funkcji kwadratowej jest funkcja f(x) = ax 2, a R \

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

Data Mining Wykład 9. Analiza skupień (grupowanie) Grupowanie hierarchiczne O-Cluster. Plan wykładu. Sformułowanie problemu

Data Mining Wykład 9. Analiza skupień (grupowanie) Grupowanie hierarchiczne O-Cluster. Plan wykładu. Sformułowanie problemu Data Mining Wykład 9 Analiza skupień (grupowanie) Grupowanie hierarchiczne O-Cluster Plan wykładu Wprowadzanie Definicja problemu Klasyfikacja metod grupowania Grupowanie hierarchiczne Sformułowanie problemu

Bardziej szczegółowo

TEORETYCZNE PODSTAWY INFORMATYKI

TEORETYCZNE PODSTAWY INFORMATYKI 1 TEORETYCZNE PODSTAWY INFORMATYKI 16/01/2017 WFAiS UJ, Informatyka Stosowana I rok studiów, I stopień Repetytorium złożoność obliczeniowa 2 Złożoność obliczeniowa Notacja wielkie 0 Notacja Ω i Θ Rozwiązywanie

Bardziej szczegółowo

Układy stochastyczne

Układy stochastyczne Instytut Informatyki Uniwersytetu Śląskiego 21 stycznia 2009 Definicja Definicja Proces stochastyczny to funkcja losowa, czyli funkcja matematyczna, której wartości leżą w przestrzeni zdarzeń losowych.

Bardziej szczegółowo

5. Rozwiązywanie układów równań liniowych

5. Rozwiązywanie układów równań liniowych 5. Rozwiązywanie układów równań liniowych Wprowadzenie (5.1) Układ n równań z n niewiadomymi: a 11 +a 12 x 2 +...+a 1n x n =a 10, a 21 +a 22 x 2 +...+a 2n x n =a 20,..., a n1 +a n2 x 2 +...+a nn x n =a

Bardziej szczegółowo

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

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

Bardziej szczegółowo

3. FUNKCJA LINIOWA. gdzie ; ół,.

3. FUNKCJA LINIOWA. gdzie ; ół,. 1 WYKŁAD 3 3. FUNKCJA LINIOWA FUNKCJĄ LINIOWĄ nazywamy funkcję typu : dla, gdzie ; ół,. Załóżmy na początek, że wyraz wolny. Wtedy mamy do czynienia z funkcją typu :.. Wykresem tej funkcji jest prosta

Bardziej szczegółowo

xx + x = 1, to y = Jeśli x = 0, to y = 0 Przykładowy układ Funkcja przykładowego układu Metody poszukiwania testów Porównanie tabel prawdy

xx + x = 1, to y = Jeśli x = 0, to y = 0 Przykładowy układ Funkcja przykładowego układu Metody poszukiwania testów Porównanie tabel prawdy Testowanie układów kombinacyjnych Przykładowy układ Wykrywanie błędów: 1. Sklejenie z 0 2. Sklejenie z 1 Testem danego uszkodzenia nazywa się takie wzbudzenie funkcji (wektor wejściowy), które daje błędną

Bardziej szczegółowo

Stabilność. Krzysztof Patan

Stabilność. Krzysztof Patan Stabilność Krzysztof Patan Pojęcie stabilności systemu Rozważmy obiekt znajdujący się w punkcie równowagi Po przyłożeniu do obiektu siły F zostanie on wypchnięty ze stanu równowagi Jeżeli po upłynięciu

Bardziej szczegółowo

Zajęcia nr. 3 notatki

Zajęcia nr. 3 notatki Zajęcia nr. 3 notatki 22 kwietnia 2005 1 Funkcje liczbowe wprowadzenie Istnieje nieskończenie wiele funkcji w matematyce. W dodaktu nie wszystkie są liczbowe. Rozpatruje się funkcje które pobierają argumenty

Bardziej szczegółowo

G. Wybrane elementy teorii grafów

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

Bardziej szczegółowo

Programowanie liniowe

Programowanie liniowe Programowanie liniowe Maciej Drwal maciej.drwal@pwr.wroc.pl 1 Problem programowania liniowego min x c T x (1) Ax b, (2) x 0. (3) gdzie A R m n, c R n, b R m. Oznaczmy przez x rozwiązanie optymalne, tzn.

Bardziej szczegółowo

Algorytm. Krótka historia algorytmów

Algorytm. Krótka historia algorytmów Algorytm znaczenie cybernetyczne Jest to dokładny przepis wykonania w określonym porządku skończonej liczby operacji, pozwalający na rozwiązanie zbliżonych do siebie klas problemów. znaczenie matematyczne

Bardziej szczegółowo

1. Liczby naturalne, podzielność, silnie, reszty z dzielenia

1. Liczby naturalne, podzielność, silnie, reszty z dzielenia 1. Liczby naturalne, podzielność, silnie, reszty z dzielenia kwadratów i sześcianów przez małe liczby, cechy podzielności przez 2, 4, 8, 5, 25, 125, 3, 9. 26 września 2009 r. Uwaga: Przyjmujemy, że 0 nie

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 Algorytm 1. Termin algorytm jest używany w informatyce

Bardziej szczegółowo

Aproksymacja funkcji a regresja symboliczna

Aproksymacja funkcji a regresja symboliczna Aproksymacja funkcji a regresja symboliczna Problem aproksymacji funkcji polega na tym, że funkcję F(x), znaną lub określoną tablicą wartości, należy zastąpić inną funkcją, f(x), zwaną funkcją aproksymującą

Bardziej szczegółowo

TEORIA GRAFÓW I SIECI

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

1 Automaty niedeterministyczne

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

Bardziej szczegółowo

Elementy teorii grafów Elementy teorii grafów

Elementy teorii grafów Elementy teorii grafów Spis tresci 1 Spis tresci 1 Często w zagadnieniach praktycznych rozważa się pewien zbiór obiektów wraz z zależnościami jakie łączą te obiekty. Dla przykładu można badać pewną grupę ludzi oraz strukturę

Bardziej szczegółowo

WYMAGANIA EDUKACYJNE Z MATEMATYKI DLA KLASY 7SP. V. Obliczenia procentowe. Uczeń: 1) przedstawia część wielkości jako procent tej wielkości;

WYMAGANIA EDUKACYJNE Z MATEMATYKI DLA KLASY 7SP. V. Obliczenia procentowe. Uczeń: 1) przedstawia część wielkości jako procent tej wielkości; WYMAGANIA EDUKACYJNE Z MATEMATYKI DLA KLASY 7SP Liczby. TEMAT Rozwinięcia dziesiętne liczb wymiernych. Zaokrąglanie liczb. Szacowanie wyników. Dodawanie i odejmowanie liczb dodatnich. Mnożenie i dzielenie

Bardziej szczegółowo

Struktury danych i złozoność obliczeniowa. Prof. dr hab. inż. Jan Magott

Struktury danych i złozoność obliczeniowa. Prof. dr hab. inż. Jan Magott Struktury danych i złozoność obliczeniowa Prof. dr hab. inż. Jan Magott Formy zajęć: Wykład 1 godz., Ćwiczenia 1 godz., Projekt 2 godz.. Adres strony z materiałami do wykładu: http://www.zio.iiar.pwr.wroc.pl/sdizo.html

Bardziej szczegółowo

Zad. 3: Układ równań liniowych

Zad. 3: Układ równań liniowych 1 Cel ćwiczenia Zad. 3: Układ równań liniowych Wykształcenie umiejętności modelowania kluczowych dla danego problemu pojęć. Definiowanie właściwego interfejsu klasy. Zwrócenie uwagi na dobór odpowiednich

Bardziej szczegółowo

EGZAMIN MATURALNY W ROKU SZKOLNYM 2014/2015

EGZAMIN MATURALNY W ROKU SZKOLNYM 2014/2015 EGZAMIN MATURALNY W ROKU SZKOLNYM 0/0 FORMUŁA OD 0 ( NOWA MATURA ) MATEMATYKA POZIOM PODSTAWOWY ZASADY OCENIANIA ROZWIĄZAŃ ZADAŃ ARKUSZ MMA-P CZERWIEC 0 Egzamin maturalny z matematyki nowa formuła Klucz

Bardziej szczegółowo

Przedmiotowe zasady oceniania i wymagania edukacyjne z matematyki dla klasy drugiej gimnazjum

Przedmiotowe zasady oceniania i wymagania edukacyjne z matematyki dla klasy drugiej gimnazjum Przedmiotowe zasady oceniania i wymagania edukacyjne z matematyki dla klasy drugiej gimnazjum I. POTĘGI I PIERWIASTKI oblicza wartości potęg o wykładnikach całkowitych liczb różnych od zera zapisuje liczbę

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

I. Potęgi. Logarytmy. Funkcja wykładnicza.

I. Potęgi. Logarytmy. Funkcja wykładnicza. WYMAGANIA EDUKACYJNE Z MATEMATYKI DLA KLASY TRZECIEJ LICEUM OGÓLNOKSZTAŁCĄCEGO ZAKRES PODSTAWOWY I. Potęgi. Logarytmy. Funkcja wykładnicza. dobrą, bardzo - oblicza potęgi o wykładnikach wymiernych; - zna

Bardziej szczegółowo

Katalog wymagań programowych na poszczególne stopnie szkolne. Matematyka. Poznać, zrozumieć

Katalog wymagań programowych na poszczególne stopnie szkolne. Matematyka. Poznać, zrozumieć Katalog wymagań programowych na poszczególne stopnie szkolne Matematyka. Poznać, zrozumieć Kształcenie w zakresie podstawowym. Klasa 3 Poniżej podajemy umiejętności, jakie powinien zdobyć uczeń z każdego

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

TEORIA GRAFÓW I SIECI

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

Bardziej szczegółowo

Wymagania edukacyjne z matematyki - klasa III (poziom rozszerzony) wg programu nauczania Matematyka Prosto do matury

Wymagania edukacyjne z matematyki - klasa III (poziom rozszerzony) wg programu nauczania Matematyka Prosto do matury STEREOMETRIA Wymagania edukacyjne z matematyki - klasa III (poziom rozszerzony) wskazać płaszczyzny równoległe i prostopadłe do danej płaszczyzny wskazać proste równoległe i prostopadłe do danej płaszczyzny

Bardziej szczegółowo

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

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

Bardziej szczegółowo

Informacja w perspektywie obliczeniowej. Informacje, liczby i obliczenia

Informacja w perspektywie obliczeniowej. Informacje, liczby i obliczenia Informacja w perspektywie obliczeniowej Informacje, liczby i obliczenia Cztery punkty odniesienia (dla pojęcia informacji) ŚWIAT ontologia fizyka UMYSŁ psychologia epistemologia JĘZYK lingwistyka nauki

Bardziej szczegółowo

MATEMATYKA Z PLUSEM DLA KLASY VII W KONTEKŚCIE WYMAGAŃ PODSTAWY PROGRAMOWEJ. programowej dla klas IV-VI. programowej dla klas IV-VI.

MATEMATYKA Z PLUSEM DLA KLASY VII W KONTEKŚCIE WYMAGAŃ PODSTAWY PROGRAMOWEJ. programowej dla klas IV-VI. programowej dla klas IV-VI. MATEMATYKA Z PLUSEM DLA KLASY VII W KONTEKŚCIE WYMAGAŃ PODSTAWY PROGRAMOWEJ TEMAT LICZBA GODZIN LEKCYJNYCH WYMAGANIA SZCZEGÓŁOWE Z PODSTAWY PROGRAMOWEJ UWAGI. LICZBY I DZIAŁANIA 6 h Liczby. Rozwinięcia

Bardziej szczegółowo

Wymagania kl. 3. Zakres podstawowy i rozszerzony

Wymagania kl. 3. Zakres podstawowy i rozszerzony Wymagania kl. 3 Zakres podstawowy i rozszerzony Temat lekcji Zakres treści Osiągnięcia ucznia 1. RACHUNEK PRAWDOPODOBIEŃSTWA 1. Reguła mnożenia reguła mnożenia ilustracja zbioru wyników doświadczenia za

Bardziej szczegółowo

Hierarchiczna analiza skupień

Hierarchiczna analiza skupień Hierarchiczna analiza skupień Cel analizy Analiza skupień ma na celu wykrycie w zbiorze obserwacji klastrów, czyli rozłącznych podzbiorów obserwacji, wewnątrz których obserwacje są sobie w jakimś określonym

Bardziej szczegółowo

Przykładowe zadania z teorii liczb

Przykładowe zadania z teorii liczb Przykładowe zadania z teorii liczb I. Podzielność liczb całkowitych. Liczba a = 346 przy dzieleniu przez pewną liczbę dodatnią całkowitą b daje iloraz k = 85 i resztę r. Znaleźć dzielnik b oraz resztę

Bardziej szczegółowo

Rachunek wektorowy - wprowadzenie. dr inż. Romuald Kędzierski

Rachunek wektorowy - wprowadzenie. dr inż. Romuald Kędzierski Rachunek wektorowy - wprowadzenie dr inż. Romuald Kędzierski Graficzne przedstawianie wielkości wektorowych Długość wektora jest miarą jego wartości Linia prosta wyznaczająca kierunek działania wektora

Bardziej szczegółowo

Wymagania edukacyjne z matematyki klasa II technikum

Wymagania edukacyjne z matematyki klasa II technikum Wymagania edukacyjne z matematyki klasa II technikum Poziom rozszerzony Obowiązują wymagania z zakresu podstawowego oraz dodatkowo: 1. JĘZYK MATEMATYKI I FUNKCJE LICZBOWE Uczeń otrzymuje ocenę dopuszczającą

Bardziej szczegółowo

ZŁOŻONOŚĆ OBLICZENIOWA ALGORYTMÓW

ZŁOŻONOŚĆ OBLICZENIOWA ALGORYTMÓW ZŁOŻONOŚĆ OBLICZENIOWA ALGORYTMÓW NIEDETERMINISTYCZNE MASZYNY TURINGA Bartosz Zieliński Katedra Fizyki Teoretycznej i Informatyki Zima 2011-2012 NIEDETERMINISTYCZNE MASZYNY TURINGA DEFINICJA: NIEDETERMINISTYCZNA

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

Funkcje wymierne. Funkcja homograficzna. Równania i nierówności wymierne.

Funkcje wymierne. Funkcja homograficzna. Równania i nierówności wymierne. Funkcje wymierne. Funkcja homograficzna. Równania i nierówności wymierne. Funkcja homograficzna. Definicja. Funkcja homograficzna jest to funkcja określona wzorem f() = a + b c + d, () gdzie współczynniki

Bardziej szczegółowo

13. Równania różniczkowe - portrety fazowe

13. Równania różniczkowe - portrety fazowe 13. Równania różniczkowe - portrety fazowe Grzegorz Kosiorowski Uniwersytet Ekonomiczny w Krakowie rzegorz Kosiorowski (Uniwersytet Ekonomiczny 13. wrównania Krakowie) różniczkowe - portrety fazowe 1 /

Bardziej szczegółowo

istocie dziedzina zajmująca się poszukiwaniem zależności na podstawie prowadzenia doświadczeń jest o wiele starsza: tak na przykład matematycy

istocie dziedzina zajmująca się poszukiwaniem zależności na podstawie prowadzenia doświadczeń jest o wiele starsza: tak na przykład matematycy MODEL REGRESJI LINIOWEJ. METODA NAJMNIEJSZYCH KWADRATÓW Analiza regresji zajmuje się badaniem zależności pomiędzy interesującymi nas wielkościami (zmiennymi), mające na celu konstrukcję modelu, który dobrze

Bardziej szczegółowo

166 Wstęp do statystyki matematycznej

166 Wstęp do statystyki matematycznej 166 Wstęp do statystyki matematycznej Etap trzeci realizacji procesu analizy danych statystycznych w zasadzie powinien rozwiązać nasz zasadniczy problem związany z identyfikacją cechy populacji generalnej

Bardziej szczegółowo

Elementy statystyki wielowymiarowej

Elementy statystyki wielowymiarowej Wnioskowanie_Statystyczne_-_wykład Spis treści 1 Elementy statystyki wielowymiarowej 1.1 Kowariancja i współczynnik korelacji 1.2 Macierz kowariancji 1.3 Dwumianowy rozkład normalny 1.4 Analiza składowych

Bardziej szczegółowo

Algorytmika Problemów Trudnych

Algorytmika Problemów Trudnych Algorytmika Problemów Trudnych Wykład 9 Tomasz Krawczyk krawczyk@tcs.uj.edu.pl Kraków, semestr letni 2016/17 plan wykładu Algorytmy aproksymacyjne: Pojęcie algorytmu aproksymacyjnego i współczynnika aproksymowalności.

Bardziej szczegółowo

WYMAGANIE EDUKACYJNE Z MATEMATYKI W KLASIE II GIMNAZJUM. dopuszczającą dostateczną dobrą bardzo dobrą celującą

WYMAGANIE EDUKACYJNE Z MATEMATYKI W KLASIE II GIMNAZJUM. dopuszczającą dostateczną dobrą bardzo dobrą celującą 1. Statystyka odczytać informacje z tabeli odczytać informacje z diagramu 2. Mnożenie i dzielenie potęg o tych samych podstawach 3. Mnożenie i dzielenie potęg o tych samych wykładnikach 4. Potęga o wykładniku

Bardziej szczegółowo

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

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

Bardziej szczegółowo

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

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

Bardziej szczegółowo

Matematyka dyskretna dla informatyków

Matematyka dyskretna dla informatyków Matematyka dyskretna dla informatyków Część I: Elementy kombinatoryki Jerzy Jaworski Zbigniew Palka Jerzy Szymański Uniwersytet im. Adama Mickiewicza Poznań 2007 4 Zależności rekurencyjne Wiele zależności

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

Równoległy algorytm wyznaczania bloków dla cyklicznego problemu przepływowego z przezbrojeniami

Równoległy algorytm wyznaczania bloków dla cyklicznego problemu przepływowego z przezbrojeniami Równoległy algorytm wyznaczania bloków dla cyklicznego problemu przepływowego z przezbrojeniami dr inż. Mariusz Uchroński Wrocławskie Centrum Sieciowo-Superkomputerowe Agenda Cykliczny problem przepływowy

Bardziej szczegółowo

Funkcje liniowe i wieloliniowe w praktyce szkolnej. Opracowanie : mgr inż. Renata Rzepińska

Funkcje liniowe i wieloliniowe w praktyce szkolnej. Opracowanie : mgr inż. Renata Rzepińska Funkcje liniowe i wieloliniowe w praktyce szkolnej Opracowanie : mgr inż. Renata Rzepińska . Wprowadzenie pojęcia funkcji liniowej w nauczaniu matematyki w gimnazjum. W programie nauczania matematyki w

Bardziej szczegółowo

ZESPÓŁ SZKÓŁ W OBRZYCKU

ZESPÓŁ SZKÓŁ W OBRZYCKU Matematyka na czasie Program nauczania matematyki w gimnazjum ZGODNY Z PODSTAWĄ PROGRAMOWĄ I z dn. 23 grudnia 2008 r. Autorzy: Agnieszka Kamińska, Dorota Ponczek ZESPÓŁ SZKÓŁ W OBRZYCKU Wymagania edukacyjne

Bardziej szczegółowo

1 Układy równań liniowych

1 Układy równań liniowych II Metoda Gaussa-Jordana Na wykładzie zajmujemy się układami równań liniowych, pojawi się też po raz pierwszy macierz Formalną (i porządną) teorią macierzy zajmiemy się na kolejnych wykładach Na razie

Bardziej szczegółowo

Modele i narzędzia optymalizacji w systemach informatycznych zarządzania

Modele i narzędzia optymalizacji w systemach informatycznych zarządzania Politechnika Poznańska Modele i narzędzia optymalizacji w systemach informatycznych zarządzania Joanna Józefowska POZNAŃ 2010/11 Spis treści Rozdział 1. Metoda programowania dynamicznego........... 5

Bardziej szczegółowo

Zajęcia nr 1 (1h) Dwumian Newtona. Indukcja. Zajęcia nr 2 i 3 (4h) Trygonometria

Zajęcia nr 1 (1h) Dwumian Newtona. Indukcja. Zajęcia nr 2 i 3 (4h) Trygonometria Technologia Chemiczna 008/09 Zajęcia wyrównawcze. Pokazać, że: ( )( ) n k k l = ( n l )( n l k l Zajęcia nr (h) Dwumian Newtona. Indukcja. ). Rozwiązać ( ) ( równanie: ) n n a) = 0 b) 3 ( ) n 3. Znaleźć

Bardziej szczegółowo

PRZEDMIOTOWY SYSTEM OCENIANIA PROSTO DO MATURY KLASA 1 ZAKRES PODSTAWOWY

PRZEDMIOTOWY SYSTEM OCENIANIA PROSTO DO MATURY KLASA 1 ZAKRES PODSTAWOWY PRZEDMIOTOWY SYSTEM OCENIANIA PROSTO DO MATURY KLASA 1 ZAKRES PODSTAWOWY Warszawa 2019 LICZBY RZECZYWISTE stosować prawidłowo pojęcie zbioru, podzbioru, zbioru pustego; zapisywać zbiory w różnej postaci

Bardziej szczegółowo

Algorytmy i struktury danych. Wykład 4

Algorytmy i struktury danych. Wykład 4 Wykład 4 Różne algorytmy - obliczenia 1. Obliczanie wartości wielomianu 2. Szybkie potęgowanie 3. Algorytm Euklidesa, liczby pierwsze, faktoryzacja liczby naturalnej 2017-11-24 Algorytmy i struktury danych

Bardziej szczegółowo

Matematyka dyskretna. Andrzej Łachwa, UJ, /10

Matematyka dyskretna. Andrzej Łachwa, UJ, /10 Matematyka dyskretna Andrzej Łachwa, UJ, 2018 andrzej.lachwa@uj.edu.pl 10/10 Podziały i liczby Stirlinga Liczba Stirlinga dla cykli (często nazywana liczbą Stirlinga pierwszego rodzaju) to liczba permutacji

Bardziej szczegółowo

Technologie informacyjne - wykład 12 -

Technologie informacyjne - wykład 12 - Zakład Fizyki Budowli i Komputerowych Metod Projektowania Instytut Budownictwa Wydział Budownictwa Lądowego i Wodnego Politechnika Wrocławska Technologie informacyjne - wykład 12 - Prowadzący: Dmochowski

Bardziej szczegółowo

Funkcja kwadratowa. f(x) = ax 2 + bx + c = a

Funkcja kwadratowa. f(x) = ax 2 + bx + c = a Funkcja kwadratowa. Funkcją kwadratową nazywamy funkcję f : R R określoną wzorem gdzie a, b, c R, a 0. f(x) = ax + bx + c, Szczególnym przypadkiem funkcji kwadratowej jest funkcja f(x) = ax, a R \ {0}.

Bardziej szczegółowo

komputery? Andrzej Skowron, Hung Son Nguyen Instytut Matematyki, Wydział MIM, UW

komputery? Andrzej Skowron, Hung Son Nguyen  Instytut Matematyki, Wydział MIM, UW Czego moga się nauczyć komputery? Andrzej Skowron, Hung Son Nguyen son@mimuw.edu.pl; skowron@mimuw.edu.pl Instytut Matematyki, Wydział MIM, UW colt.tex Czego mogą się nauczyć komputery? Andrzej Skowron,

Bardziej szczegółowo

Zaawansowane algorytmy i struktury danych

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

Bardziej szczegółowo

Optymalizacja. Przeszukiwanie lokalne

Optymalizacja. Przeszukiwanie lokalne dr hab. inż. Instytut Informatyki Politechnika Poznańska www.cs.put.poznan.pl/mkomosinski, Maciej Hapke Idea sąsiedztwa Definicja sąsiedztwa x S zbiór N(x) S rozwiązań, które leżą blisko rozwiązania x

Bardziej szczegółowo

Obliczenia inspirowane Naturą

Obliczenia inspirowane Naturą Obliczenia inspirowane Naturą Wykład 02 Jarosław Miszczak IITiS PAN Gliwice 06/10/2016 1 / 31 Czego dowiedzieliśmy się na poprzednim wykładzie? 1... 2... 3... 2 / 31 1 2 3 3 / 31 to jeden z pierwszych

Bardziej szczegółowo

MATeMAtyka 3. Propozycja przedmiotowego systemu oceniania wraz z określeniem wymagań edukacyjnych. Zakres podstawowy i rozszerzony

MATeMAtyka 3. Propozycja przedmiotowego systemu oceniania wraz z określeniem wymagań edukacyjnych. Zakres podstawowy i rozszerzony Agnieszka Kamińska, Dorota Ponczek MATeMAtyka 3 Propozycja przedmiotowego systemu oceniania wraz z określeniem wymagań edukacyjnych Zakres podstawowy i rozszerzony Wyróżnione zostały następujące wymagania

Bardziej szczegółowo

Algorytmy Równoległe i Rozproszone Część III - Układy kombinacyjne i P-zupełność

Algorytmy Równoległe i Rozproszone Część III - Układy kombinacyjne i P-zupełność Algorytmy Równoległe i Rozproszone Część III - Układy kombinacyjne i P-zupełność Łukasz Kuszner pokój 209, WETI http://www.kaims.pl/ kuszner/ kuszner@eti.pg.gda.pl Oficjalna strona wykładu http://www.kaims.pl/

Bardziej szczegółowo

OPTYMALIZACJA HARMONOGRAMOWANIA MONTAŻU SAMOCHODÓW Z ZASTOSOWANIEM PROGRAMOWANIA W LOGICE Z OGRANICZENIAMI

OPTYMALIZACJA HARMONOGRAMOWANIA MONTAŻU SAMOCHODÓW Z ZASTOSOWANIEM PROGRAMOWANIA W LOGICE Z OGRANICZENIAMI Autoreferat do rozprawy doktorskiej OPTYMALIZACJA HARMONOGRAMOWANIA MONTAŻU SAMOCHODÓW Z ZASTOSOWANIEM PROGRAMOWANIA W LOGICE Z OGRANICZENIAMI Michał Mazur Gliwice 2016 1 2 Montaż samochodów na linii w

Bardziej szczegółowo

PDM 3 zakres podstawowy i rozszerzony PSO

PDM 3 zakres podstawowy i rozszerzony PSO PDM 3 zakres podstawowy i rozszerzony PSO STEREOMETRIA wskazać płaszczyzny równoległe i prostopadłe do danej płaszczyzny wskazać proste równoległe i prostopadłe do danej płaszczyzny odróżnić proste równoległe

Bardziej szczegółowo

Wokół Problemu Steinhausa z teorii liczb

Wokół Problemu Steinhausa z teorii liczb Wokół Problemu Steinhausa z teorii liczb Konferencja MathPAD 0 Piotr Jędrzejewicz Wydział Matematyki i Informatyki Uniwersytetu Mikołaja Kopernika w Toruniu Celem referatu jest przedstawienie sposobu wykorzystania

Bardziej szczegółowo

Wykład nr 1 Techniki Mikroprocesorowe. dr inż. Artur Cichowski

Wykład nr 1 Techniki Mikroprocesorowe. dr inż. Artur Cichowski Wykład nr 1 Techniki Mikroprocesorowe dr inż. Artur Cichowski ix jy i j {0,1} {0,1} Dla układów kombinacyjnych stan dowolnego wyjścia y i w danej chwili czasu zależy wyłącznie od aktualnej kombinacji stanów

Bardziej szczegółowo

Notacja Denavita-Hartenberga

Notacja Denavita-Hartenberga Notacja DenavitaHartenberga Materiały do ćwiczeń z Podstaw Robotyki Artur Gmerek Umiejętność rozwiązywania prostego zagadnienia kinematycznego jest najbardziej bazową umiejętność zakresu Robotyki. Wyznaczyć

Bardziej szczegółowo