Zrealizował: Przemysław Curzytek (4RI)
Listy wierzchołków połączonych przez dane hiperkrawędzie.
Przykładowo:
h_przykladowy([v8]). h_przykladowy(e1,[v1,v7]). h_przykladowy(e2,[v1,v2,v6]). h_przykladowy(e3,[v5,v6]). h_przykladowy(e4,[v3,v4,v5]).
Każde połączenie wiąże ze sobą węzeł i hiperkrawędź.
Przykładowo:
h_przykladowy(v8,[]). h_przykladowy(v1,e1). h_przykladowy(v7,e1). h_przykladowy(v1,e2). h_przykladowy(v2,e2). h_przykladowy(v6,e2). h_przykladowy(v5,e3). h_przykladowy(v6,e3). h_przykladowy(v3,e4). h_przykladowy(v4,e4). h_przykladowy(v5,e4).
W przeciwieństwie do zwykłych grafów, gdzie zarówno wiersze jak i kolumny reprezentowały węzły, w przypadku hipergrafów wiersze macierzy oznaczać będą krawędzie.
Przykładowo:
v1 | v2 | v3 | v4 | v5 | v6 | v7 | v8 | |
---|---|---|---|---|---|---|---|---|
e1 | 1 | 0 | 0 | 0 | 0 | 0 | 1 | 0 |
e2 | 1 | 1 | 0 | 0 | 0 | 1 | 0 | 0 |
e3 | 0 | 0 | 0 | 0 | 1 | 1 | 0 | 0 |
e4 | 0 | 0 | 0 | 1 | 1 | 1 | 0 | 0 |
Ze względu na trudności z generowaniem poprawnego pliku .tex bezpośrednio na podstawie stworzonej w Prologu bazy wiedzy na temat hipergrafu, generowałem w pierwszej kolejności plik .cpp, który po skompilowaniu tworzył interesujący nas od początku plik z macierzą koincydencji w Latexu.
Plik cgen.pl
Główny predykat tego plik (cGen/3) wymaga trzech argumentów:
Jego wywołanie dla przykładowego predykatu:
hiperg(v4,[]). hiperg(v1,e1). hiperg(v3,e1). hiperg(v1,e2). hiperg(v2,e2). hiperg(v1,e3). hiperg(v5,e3).
powoduje wygenerowanie pliku macierz.cpp
Po skompilowaniu tego pliku i uruchomieniu pliku wynikowego otrzymujemy gotowy do kompilacji plik macierz.tex
Aby uprościć cały proces przygotowałem skrypt unixowy skrypt.sh
Po jego uruchomieniu wystarczy podać nazwy plików wynikowych i cała reszta robi się automatycznie.
Efektem działania skryptu jest plik macierz.pdf z macierzą incydencji naszego hipergrafu.
Zrealizowana przeze mnie graficzna forma reprezentacji odpowiada drugiej z podanych w przykładach.
Stworzony predykat generuje plik .dot.
Plik dotgen_h.pl
Główny predykat tego plik (dotGenH/2) wymaga trzech argumentów:
Jego wywołanie dla przykładu:
ht(v8,[]). ht(v1,e1). ht(v7,e1). ht(v1,e2). ht(v2,e2). ht(v6,e2). ht(v5,e3). ht(v6,e3). ht(v3,e4). ht(v4,e4). ht(v5,e4).
powoduje wygenerowanie pliku graf.dot
Po jego skompilowaniu otrzymujemy taki oto rysunek:
Również tutaj przygotowałem dla uproszczenia procesu skrypt unixowy skrypt2.sh
Przygotował: Curzytek Przemysław