algorytm wielomianowy - prawdopodobnie przepływy

Permutacje. Kombinacje. Wariacje. Rozmieszczanie kul w urnach. Silnie i symbole Newtona. Przeliczanie zbiorów. Funkcje tworzące. Teoria grafów.
TrzyRazyCztery
Użytkownik
Użytkownik
Posty: 101
Rejestracja: 24 maja 2014, o 17:53
Płeć: Mężczyzna
Lokalizacja: Wro
Podziękował: 27 razy
Pomógł: 1 raz

algorytm wielomianowy - prawdopodobnie przepływy

Post autor: TrzyRazyCztery »

Witam mam takie zadanie:
Zbiór \(\displaystyle{ k}\) psów,\(\displaystyle{ k}\) kotów i \(\displaystyle{ k}\) chomików chcemy podzielić na trójki (pies,kot,chomik). o Kazdym psie wiemy z którymi kotami może być w trójce, i to samo o kocie. Musimy podac wielomianowy algorytm który stwierdza że można podzielić zwierzeta na k rozłącznych trójek lub że jest to niemożliwe.


Jedyne na co wpadlem to że moge zrobić z tego graf skierowany (krawedz skierowana pies -> kot jesli pies może byc w trojce z kotem) i to samo dla reszty i wtedy w jakis sposob oznaczyc maksymalnosc przeplywu na takiej krawedzi (ale nie wiem czy przez może \(\displaystyle{ 1}\)?) dodac wierzcholek \(\displaystyle{ v}\) jako źródło i dac krawedz do kazdego psa z nieskonczonym przepływem i tak samo od kazdego chomika krawedz do nowego wierzcholka \(\displaystyle{ u}\) który bedzie ujściem i wtedy użyć algorytmu np Forda i Fulkersona i sprawdzic czy przeplyw w takim grafie jest przynajmniej \(\displaystyle{ k}\), bo jesli tak to znaczy ze mamy przynajmniej k ścieżek wierzchołkowo rozłącznych z których każda ma przepływ \(\displaystyle{ 1}\). a jesli przepływ jest mniejszy niż \(\displaystyle{ k}\) to znaczy że sie nie da. Czy to dobre rozumowanie? jak to uściślić i opisać by bylo to algorytmem wielomianowym?
Pozdrawiam
Awatar użytkownika
arek1357
Użytkownik
Użytkownik
Posty: 5748
Rejestracja: 6 gru 2006, o 09:18
Płeć: Mężczyzna
Lokalizacja: blisko
Podziękował: 131 razy
Pomógł: 526 razy

algorytm wielomianowy - prawdopodobnie przepływy

Post autor: arek1357 »

Nie wiem ale na mój chłopski rozum bym zrobił macierz trójwymiarową:

\(\displaystyle{ i}\) -pies

\(\displaystyle{ j}\) - kot

\(\displaystyle{ l}\)- chomik

jeżeli i-ty pies może siedzieć a j-tym kotem , oraz z l-tym chomikiem to wartość:

\(\displaystyle{ a_{ijl}}\) - na przecięciu się\(\displaystyle{ i j l}\) dałbym jeden, w przeciwnym przypadku zero.

Otrzymałbym macierz trójwymiarową zero-jedynkową i starałbym się uogólnić twierdzenie Halla...

Czyli suma jedynek w każdym wierszu(wzdłużnym i wszerznym)(oraz w każdej kolumnie)

wynosi tyle samo macierz jest \(\displaystyle{ k \times k \times k}\)
norwimaj
Użytkownik
Użytkownik
Posty: 5101
Rejestracja: 11 mar 2011, o 16:31
Płeć: Mężczyzna
Lokalizacja: 52°16'37''N 20°52'45''E
Podziękował: 4 razy
Pomógł: 1001 razy

algorytm wielomianowy - prawdopodobnie przepływy

Post autor: norwimaj »

TrzyRazyCztery, Twój pomysł wymaga poprawki.

\(\displaystyle{ \begin{picture}(0,0)
\put(0,0){\circle*{3}}
\multiput(20,-20)(40,0){3}{\multiput(0,0)(0,40){2}{\circle*{3}}}
\put(120,0){\circle*{3}}
\put(-8,-3){$v$}
\put(14,-29){$P_2$}
\put(14,24){$P_1$}
\put(54,-29){$K_2$}
\put(54,24){$K_1$}
\put(94,-29){$C_2$}
\put(94,24){$C_1$}
\put(122,-3){$u$}
\put(0,0){\vector(1,-1){20}}
\put(0,0){\vector(1,1){20}}
\put(20,20){\vector(1,-1){40}}
\put(20,20){\vector(1,0){40}}
\put(60,20){\vector(1,0){40}}
\put(60,-20){\vector(1,0){40}}
\put(100,20){\vector(1,-1){20}}
\put(100,-20){\vector(1,1){20}}
\put(5,-18){$0$}
\put(5,12){$2$}
\put(36,24){$1$}
\put(36,-10){$1$}
\put(76,24){$1$}
\put(76,-16){$1$}
\put(109,-18){$1$}
\put(109,12){$1$}
\end{picture}}\)
TrzyRazyCztery
Użytkownik
Użytkownik
Posty: 101
Rejestracja: 24 maja 2014, o 17:53
Płeć: Mężczyzna
Lokalizacja: Wro
Podziękował: 27 razy
Pomógł: 1 raz

algorytm wielomianowy - prawdopodobnie przepływy

Post autor: TrzyRazyCztery »

norwimaj, tak też pomyslalem bo zdalem sobie sprawe pozniej ze otrzymam drogi krawędziowo rozłączne ew a to mnie nie urządza :/
norwimaj
Użytkownik
Użytkownik
Posty: 5101
Rejestracja: 11 mar 2011, o 16:31
Płeć: Mężczyzna
Lokalizacja: 52°16'37''N 20°52'45''E
Podziękował: 4 razy
Pomógł: 1001 razy

algorytm wielomianowy - prawdopodobnie przepływy

Post autor: norwimaj »

Możesz ograniczyć przepustowość krawędzi wychodzących z \(\displaystyle{ v,}\) ale to jeszcze nie będzie ostatnia poprawka w tym sposobie.

Jest też inny sposób. Skoro pytanie jest tylko o istnienie \(\displaystyle{ k}\) trójek, a nie o wyznacznie maksymalnej liczby trójek, to możesz problem podzielić na dwa niezależne: istnienie pełnego skojarzenia w grafie złożonym z psów i kotów oraz istnienie pełnego skojarzenia w grafie złożonym z kotów i chomików.
TrzyRazyCztery
Użytkownik
Użytkownik
Posty: 101
Rejestracja: 24 maja 2014, o 17:53
Płeć: Mężczyzna
Lokalizacja: Wro
Podziękował: 27 razy
Pomógł: 1 raz

algorytm wielomianowy - prawdopodobnie przepływy

Post autor: TrzyRazyCztery »

Masz na mysli jakiś algorytm który bierze graf złożony z psów i kotów a potem sprawdza czy suma stopni wierzchołków w każdym zbiorze psów o liczności \(\displaystyle{ l}\) jest \(\displaystyle{ \ge l}\) Bo to by oznaczało że wychodzi z niego conajmniej \(\displaystyle{ l}\) krawędzi (bo miedzy psami nie ma krawędzi) i po sprawdzeniu wszystkich \(\displaystyle{ l}\)-elementowych podzbiorów dla \(\displaystyle{ 1 \le l \le k}\) jesli we wszystkich warunek byłby spełniony to taki graf ma pełne skojarzenie? Czy tak sie interpretuje Twierdzenie Halla dla skojarzeń w grafie? i potem robie to samo z drugim grafem i jesli oba posiadają skojarzenia pełne to znaczy że mamy \(\displaystyle{ k}\) takich trójek?



Edit. Nabrałem wątpliwości co do algorytmu który by sprawdzał wszystkie 1,2,3....k elementowe podzbiory wierzchołków np psów. A raczej wątpliwości co do jego wielomianowości

Edit 2. Czy przerobienie takiego grafu dodając jednak wierzchołek źródlowy o krawędzi 1 do każdego psa i ujsciowy o krawędzi 1 od kazdego kota a potem zastosowanie algorytmu Forda-Fulkersona i sprawdzenie czy przepływ jest wiekszy równy k nie zda tu egzaminu? a jesli zda to czy jest konieczne rozbijanie tego na 2 grafy?
norwimaj
Użytkownik
Użytkownik
Posty: 5101
Rejestracja: 11 mar 2011, o 16:31
Płeć: Mężczyzna
Lokalizacja: 52°16'37''N 20°52'45''E
Podziękował: 4 razy
Pomógł: 1001 razy

algorytm wielomianowy - prawdopodobnie przepływy

Post autor: norwimaj »

Sprawdzenie, czy istnieje pełne skojarzenie w grafie dwudzielnym, można wykonać wielomianowo za pomocą algorytmu Forda-Fulkersona tak jak piszesz: przepustowości równe \(\displaystyle{ 1}\) na krawędziach od źródła do psów i od kotów do ujścia.

Rozbijanie na dwa grafy nie jest konieczne. Każdy sposób jest dobry, byle poprawny.
ODPOWIEDZ