• Nie Znaleziono Wyników

3. Klasyfikacja spektralna Coxetera porządków dodatnich 51

3.6. Algorytmiczne generowanie porządków dodatnich

Niniejszy podrozdział poświęcony jest omówieniu algorytmu3.52, który stanowi rozwiązanie problemu generowania wszystkich, z dokładnością do izomorfizmu, dodatnich (w sensie definicji1.51) zbiorów częściowo uporządkowanych. Algorytm3.52umożliwia przygotowanie listy takich porządków 𝐼 wielkości 1 ⩽ |𝐼| ⩽ 𝑛, gdzie 𝑛 ⩾ 2 jest ustaloną liczbą naturalną. Algorytm ten stanowi niezbędny element dowodu twierdzenia3.61a stąd klasyfikacji spektralnej Coxetera przedstawionej w twierdzeniu3.17.

Liczba wszystkich spójnych nieizomorficznych zbiorów częściowo uporządkowanych 𝐼 wielkości 1 ⩽ |𝐼| ⩽ 16 wyznaczona została algorytmicznie w pracy [18].

8Precyzyjniej: dla każdej Gl(𝑛; ℤ)𝐷-orbity macierzowych morsyfikacji (por. uwaga3.24) diagramu Dynkina 𝐷 ∈ {𝔸𝑛, 𝔻𝑛, 𝔼6, 𝔼7, 𝔼8}, por. [92,93,112–116].

Algorytmiczne generowanie porządków dodatnich 81

Tabela 3.50. Liczba spójnych nieizomorficznych porządków wielkości 1 ⩽ |𝐼| ⩽ 16

𝑛 #𝐼 𝑛 #𝐼 𝑛 #𝐼 𝑛 #𝐼

1 1 5 44 9 163 341 13 32 664 984 238

2 1 6 238 10 2 360 719 14 1 303 143 553 205

3 3 7 1650 11 43 944 974 15 66 900 392 672 168

4 10 8 14 512 12 1 055 019 099 16 4 413 439 778 321 689

W dysertacji rozważamy porządki 𝐼, które są dodatnie lub nieujemne korangi crk𝐼∈ {1, 2}(w sensie definicji1.51). Stanowią one niewielki odsetek wszystkich nieizomorficznych porządków (patrz tabela3.55oraz tabela4.33) i dlatego na potrzeby generowania wszystkich

dodatnich (nieujemnych) zbiorów częściowo uporządkowanych 𝐼 ustalonej wielkości 𝑛 =

|𝐼| ⩾ 2używamy dedykowanych algorytmów.

Przypomnijmy, że każdy 𝑛-elementowy zbiór częściowo uporządkowany 𝐼 = (𝐼, ⪯) można jednoznacznie zakodować w postaci macierzy kwadratowej stopnia 𝑛, tzw. macierzy

incydencji 𝐶𝐼 ∈ 𝕄𝑛(ℤ)(fakt1.38(b)). Macierz 𝐶𝐼 = [𝑐𝑖𝑗] ∈ 𝕄𝑛(ℤ)jest macierzą binarną zdefiniowaną następująco: 𝑐𝑖𝑗 = 1, jeśli 𝑖 ⪯ 𝑗, lub 0, jeśli 𝑖  𝑗. Z drugiej strony, każda macierz binarna 𝐴 = [𝑎𝑖𝑗] ∈ 𝕄𝑛(ℤ), 𝑎𝑖𝑗∈ {0, 1}dla 1 ⩽ 𝑖, 𝑗 ⩽ 𝑛, która spełnia warunki:

• (zwrotność) 𝑎𝑖𝑖= 1dla każdego 1 ⩽ 𝑖 ⩽ 𝑛,

• (przechodniość) jeśli 𝑎𝑖𝑗= 1oraz 𝑎𝑗𝑘= 1, to 𝑎𝑖𝑘= 1dla dowolnych 1 ⩽ 𝑖, 𝑗, 𝑘 ⩽ 𝑛, • (antysymetryczność) jeśli 𝑎𝑖𝑗= 1, to 𝑎𝑗𝑖= 0dla dowolnych 1 ⩽ 𝑖, 𝑗 ⩽ 𝑛,

jest macierzą incydencji pewnego zbioru częściowo uporządkowanego. Dlatego problem generowania wszystkich (z dokładnością do izomorfizmu) 𝑛-elementowych porządków dodatnich będziemy rozumieć następująco: jak, spośród 2𝑛2

macierzy binarnych stopnia 𝑛, wybrać macierze incydencji nieizomorficznych porządków dodatnich?

Aby zmniejszyć przestrzeń przeszukiwań, złożoną z 2𝑛2

binarnych macierzy kwadrato-wych stopnia 𝑛, będziemy używać następujących obserwacji.

• Elementy każdego porządku 𝐼 można ponumerować topologicznie (patrz fakt1.44(b)) i dlatego, bez zmniejszenia ogólności rozważań, możemy założyć, że każda macierz incydencji 𝐶𝐼∈ 𝕄𝑛(ℤ)jest górnotrójkątna.

• W każdym 𝑛-elementowym porządku 𝐼 można znaleźć element minimalny 𝑎 ∈ 𝐼 i stąd 𝐼 = 𝐽 ∪ {𝑎}, gdzie |𝐽| = 𝑛 − 1. Ponadto, jeśli porządek 𝐼 jest dodatni, to porządek 𝐽 również jest dodatni (patrz fakt3.27(a)).

Stąd, aby wygenerować listę wszystkich dodatnich zbiorów częściowo uporządkowanych wielkości 𝑛 + 1, będziemy rozważać wszystkie jednopunktowe rozszerzenia dodatnich zbiorów wielkości 𝑛 o wierzchołek minimalny.

Uwaga 3.51. Rozważmy następujący 6-elementowy dodatni zbiór częściowo

uporząd-kowany. H(𝐼) ∶ 1 2 3 4 5 6 H(𝐽) ∶ 2 3 4 5 6, gdzie 𝐽 ∶= 𝐼 ∖ {1}

82 Algorytmiczne generowanie porządków dodatnich

Konstrukcja 6-elementowego porządku 𝐼 metodą rozszerzania o element minimalny po-rządku 5-elementowego wymaga rozważenia niespójnego popo-rządku 𝐽. Stąd w algoryt-mie3.52generującym wszystkie spójne porządki dodatnie musimy także rozważać po-rządki niespójne.

Algorytm 3.52. Wejście Liczba całkowita 𝑛 ⩾ 1.

Wynik Skończone zbiory posit[𝑖], 1 ⩽ 𝑖 ⩽ 𝑛, zawierające wszystkie nieizomorficzne

spójne porządki dodatnie wielkości 1 ⩽ 𝑖 ⩽ 𝑛, zakodowane w postaci macierzy incydencji.

Krok 1 Inicjalizujemy zbiór posit[1], wstawiając do niego macierz [ 1 ] ∈ 𝕄1(ℤ).

Krok 2 Dla każdego 𝑚 = 1, … , 𝑛 − 1:

Krok 2.1 candidatem= { }.

Krok 2.2 Dla każdego porządku 𝐽 ∈ posit[𝑚 − 1], tworzymy listę wszystkich

możliwych rozszerzeń 𝐽 o nowy punkt minimalny, do porządku o wielkości 𝑚. Innymi słowy, generujemy listę 𝑊𝐽∋ 𝑤złożoną ze wszystkich takich wektorów 𝑤 = [𝑤2, … , 𝑤𝑚] ∈ {0, 1}𝑚−1, że macierz 𝐶𝐽𝑤= 1 𝑤 0 𝐶𝐽 ⎡ ⎢ ⎢ ⎣ ⎤ ⎥ ⎥ ⎦ = [𝑐𝑖𝑗] ∈ 𝕄𝑚(ℤ)

jest macierzą incydencji zbioru częściowo uporządkowanego (tzn. macierzą speł-niającą następujący warunek: jeśli 𝑐𝑖𝑗= 1oraz 𝑐𝑗𝑠 = 1, to 𝑐𝑖𝑠 = 1, dla dowolnych 1 ⩽ 𝑖, 𝑗, 𝑠 ⩽ 𝑛).

Krok 2.3 Dla każdego porządku 𝐽 ∈ posit[𝑚 − 1] oraz każdego wektora 𝑤 ∈

𝑊𝐽, konstruujemy macierz 𝐶𝐽𝑤 ∈ 𝕄𝑚(ℤ)i dodajemy 𝐽𝑤 do listy candidatem, jeśli macierz symetryczna ̂𝐺𝐽𝑤 ∶= 𝐶𝐽𝑤+ 𝐶𝑡𝑟𝐽

𝑤 jest dodatnio określona (dodatnią określoność macierzy można sprawdzić przy pomocy algorytmu2.7).

Krok 2.4 Konstruujemy zbiór posit[𝑚], wybierając z listy candidatemporządki

nieizomorficzne (aby sprawdzić, czy porządki 𝐼 oraz 𝐽 są izomorficzne, wystarczy zweryfikować izomorfizm kołczanów Hasse H(𝐼) oraz H(𝐽), np. przy pomocy biblioteki igraph:www.igraph.org).

Krok 3 Z każdego zbioru posit[𝑖], gdzie 1 ⩽ 𝑖 ⩽ 𝑛, usuwamy porządki niespójne

(spój-ność 𝐼 ∈ posit[𝑖] można sprawdzić np. stosując do kołczanu Hasse9H(𝐼)algorytm przeszukiwania grafu wszerz, patrz np. [85]).

Krok 4 Zwracamy zbiory posit[𝑖], 1 ⩽ 𝑖 ⩽ 𝑛, jako wynik.

Przedstawiony algorytm opiera się na klasycznej metodzie wyczerpującego przeszu-kiwania przestrzeni rozwiązań. Konstrukcja sugeruje, że jest to algorytm wykładniczy: w kroku 2.2dla każdego 𝑛 elementowego 𝐼 generujemy listę 𝑊𝐼⊆ {0, 1}𝑛rozszerzeń 𝐼 do 𝑛 + 1 elementowego 𝐼𝑤. Wyniki eksperymentalne potwierdzają zarówno wykładniczą złożoność obliczeniową, jak i wykładniczą liczbę dodatnich zbiorów częściowo uporząd-kowanych 𝐼 wielkości |𝐼| ⩽ 14 (patrz tabela3.55oraz rysunek3.56).

Uwaga 3.53. Obliczenia, których wyniki prezentowane są w dysertacji,

przeprowadzo-ne zostały na komputerze wyposażonym w procesor AMD FX-8120 taktowany zegarem 4,0 GHz, wyposażonym w 16 GB pamięci RAM. Ponadto, wszystkie algorytmy prezen-towane w rozprawie zostały zaimplemenprezen-towane w języku Python 2.7 (www.python.org). Jako środowisko uruchomieniowe wybrany został interpreter PyPy (www.pypy.org), który

Algorytmiczne generowanie porządków dodatnich 83 wykorzystuje technikę just-in-time compilation (precyzyjniej: tracing JIT10). PyPy automa-tycznie, w trakcie wykonywania programu, wykrywa często wykonywane fragmenty kodu i kompiluje związane z nimi instrukcje do wydajnego kodu maszynowego. Pozwala to na znaczące przyspieszenie programu. Dla przykładu, w tabeli3.54przedstawione zostały czasy obliczeń kroku 2algorytmu3.52przy pomocy interpreterów PyPy oraz CPython (standardowy interpreter, który można pobrać ze stronywww.python.org).

Tabela 3.54. Czas wykonywania kroku 2algorytmu3.52w zależności od interpretera: CPython oraz PyPy

𝑛 6 7 8 9 10 11 12 13

CPython 2.7.10 0,04 s 0,25 s 1,44 s 7,47 s 34,07 s 164,83 s 801,43 s 3966,48 s

PyPy 2.5 0,01 s 0,05 s 0,23 s 1,14 s 3,33 s 12,97 s 58,48 s 248,45 s

przyspieszenie 3,89 5,15 6,25 6,53 10,22 12,71 13,7 15,97

Ponieważ większość rozważanych w rozprawie problemów ma charakter wykładni-czy, użycie języka C czy Fortran do implementacji algorytmów w niewielkim stopniu wpłynęłoby na możliwość użycia ich do badania własności „dużych” zbiorów częściowo uporządkowanych i dlatego nie rozważamy takich implementacji, tylko używamy języka Python, który dostarcza bogatą bibliotekę standardową i zapewnia stabilne środowisko pracy.

Tabela 3.55. Liczba dodatnich zbiorów częściowo uporządkowanych 𝐼 wielkości |𝐼| ⩽ 14

𝑛 1 2 3 4 5 6 7 8 9 10 11 12 13 14

wszystkie 1 2 5 15 47 165 552 1 621 3 168 7 843 20 641 56 151 153 765 417 596

spójne 1 1 3 9 29 102 328 819 583 1 215 2 575 5 375 11 295 23 551

jednopiki 1 1 2 5 12 33 80 152 40 49 60 71 84 97

Fakt 3.56. Całkowita liczba dodatnich zbiorów częściowo uporządkowanych 𝐼 wielkości |𝐼| ⩽ 14

wynosi 661 572, w tym 45 886 spójnych oraz 687 jednopikowych. Informacje o liczbie dodatnich 𝐼 ustalonej wielkości |𝐼| = 𝑛 ⩽ 14 zostały przedstawione w tabeli3.55.

Dowód. Dowód ma charakter obliczeniowy. Przy pomocy algorytmu3.52, w którym pomijamy wykonanie kroku trzeciego, generujemy górnotrójkątne macierze incydencji 𝐶𝐼∈ 𝕄𝐼(ℤ)wszystkich dodatnich nieizomorficznych porządków 𝐼 wielkości 2 ⩽ |𝐼| ⩽ 14. Następnie, spośród nich wybieramy porządki:

• spójne (weryfikujemy spójność przy pomocy algorytmu BFS – przeszukiwania grafu wszerz, zastosowanego do kołczanu H(𝐼)),

• jednopikowe (wybierając macierze 𝐶𝐼∈ 𝕄𝐼(ℤ), których ostatnia kolumna złożona jest z samych jedynek)

i weryfikujemy tezę. Czas obliczeń oraz całkowita liczba wyznaczonych dodatnich porząd-ków przedstawione są na rysunku3.56(por. uwaga3.53).

10C. F. Bolz, A. Cuni, M. Fijalkowski i A. Rigo, „Tracing the Meta-level: PyPy’s Tracing JIT Compiler”, w: Proceedings of the 4th Workshop on the Implementation, Compilation, Optimization of Object-Oriented Languages

84 Dwuliniowa ℤ-równoważność: algorytm

Rysunek 3.56. Czas działania kroku 2algorytmu3.52 oraz całkowita liczba zbiorów częściowo uporządkowanych wielkości 𝑛

2 4 6 8 10 12 14 200 sek. 400 sek. 600 sek. 800 sek. 1000 sek. 0,0002s 0,0006s 0,002s 0,01s 0,049s 0,23s 1,445s 3,332s 12,97s 58,483s 248,445s 1085,192s 2 4 6 8 10 12 14 100tys. 200tys. 300tys. 400tys. 5 15 47 165 552 1621 3168 7843 20 641 56 151 153 7 65 2 417 596

Powiązane dokumenty