Zliczanie permutacji, których elementy nie mają dokładnie swojego indeksu ± M


13

Ostatnio zostałem zapytany o ten problem w wywiadzie algorytmicznym i nie udało mi się go rozwiązać.

Biorąc pod uwagę dwie wartości N i M, musisz policzyć liczbę permutacji o długości N (używając liczb od 1 do N), tak aby absolutna różnica między dowolną liczbą w permutacji a jej pozycją w permutacji nie była równa M.

Przykład - jeśli N = 3 i M = 1, wówczas 1 2 3 i 3 2 1 są prawidłowymi permutacjami, ale 1 3 2 jest nieprawidłowy, ponieważ liczba 3 znajduje się w pozycji 2, a ich różnica wynosi = M.

Próbowałem programowania dynamicznego NxM, ale nie udało mi się utworzyć powtarzalności, która nie liczy powtórzeń.


Być może możesz uzyskać formułę za pomocą włączenia-wykluczenia. Przypadek jest klasycznie znany jako odstępstwa . M=0
Yuval Filmus

1
Jest to szczególny przypadek zliczania idealnych dopasowań w grafach dwustronnych, co jest problemem -kompletnym. Oczywiście ten konkretny przypadek może być łatwiejszy. #P
Yuval Filmus

Próbowałem już włączyć wykluczenie, ale nie zrobiłem żadnego postępu.
Gena,

Możesz spróbować dostosować metody liczenia odstępstw . Nie wiem, czy to cię gdzieś zaprowadzi. Możesz także spróbować ustalić M = 1 (powiedzmy), obliczając liczbę dla małych wartości N (N = 1,2,3,4,5,6,7,8) metodą brutalną, a następnie sprawdzając odpowiednią sekwencję w OEIS w nadziei, że znajdziesz coś przydatnego.
DW

Jaka jest ustawiona rekursja? Co rozumiesz przez „liczenie powtórzeń”?
Raphael

Odpowiedzi:


2

Pierwszą rzeczą, o którą chciałbym zapytać, kiedy otrzyma to pytanie, będzie

Czy chcesz algorytm wielomianowy?

i mam nadzieję, że odpowiedź brzmi „nie”. Podejrzewam, że ten problem jest trudny NP, z następującego powodu:

Naturalnym podejściem do tego problemu jest rozważenie umieszczenia pierwszej liczby i wyprowadzenie rekurencyjnej formuły w celu umieszczenia pozostałych. Działa to dobrze w przypadku (tj. Zliczanie liczby odchyleń), ponieważ nie ma znaczenia, jaką pozycję umieściłeś pierwszy numer, ponieważ jest tylko jedna „nielegalna” pozycja dla każdej liczby. Innymi słowy, takie podejście prowadzi do niezależnych podproblemów.M=0

Dla nie jest to takie proste, ponieważ teraz możemy mieć 2 nielegalne pozycje dla niektórych liczb. Która z tych pozycji pozostaje w podproblemie, jest teraz istotna dla rozwiązania podproblemu. Samo wzięcie pod uwagę liczby „nielegalnych” pozycji nie jest wystarczające, ponieważ „łańcuchy” liczb, które dzielą nielegalne pozycje, są wymagane do określenia struktury podproblemów tego podproblemu. Podejście to zasadniczo prowadzi do następującego podproblemu:M>02

Biorąc pod uwagę zbiór , zbiór B N zarówno wielkości co najwyżej N, jak i liczby naturalnej M , policz liczbę idealnych dopasowań na wykresie dwudzielnym ( A , B , E ) , gdzie ( a , b ) E jeśli i tylko jeśli | a - b | M .ANBNNM(A,B,E)(a,b)E|ab|M

Ten problem wygląda na trudny. Jedyne podejście do tego problemu, które widzę, to włączenie / wyłączenie, które nie doprowadzi do algorytmu wielomianowego czasu.

Możemy rozważyć podejścia, które nie opierają się na iteracyjnym rozmieszczeniu liczb, ale nie mam pojęcia, jak byś to zrobił. (szczególnie podczas wywiadu!)

Oczywiście wszystko to jest jedynie spekulacją i nadal możliwe jest, że sprytna sztuczka może dać rozwiązanie wielomianowe w czasie, ale mam nadzieję, że przedstawiłem przekonujący argument, że ta sztuczka musi być naprawdę bardzo sprytna.

Być może możliwe jest wykazanie twardości NP poprzez zredukowanie tego problemu do # 2-SAT („łańcuchy” liczb, które dzielą nielegalne pozycje, wydają się być trywialnym wyborem, który można by dopasować do wyboru wartości prawdy), ale Nie widziałem na razie oczywistego sposobu na zrobienie tego.


Gdyby osoba przeprowadzająca wywiad faktycznie była zadowolona z algorytmu wykładniczego czasu, po prostu wygenerowałabym wszystkie możliwe rozwiązania, dostosowując rekurencyjny algorytm cofania w celu wygenerowania permutacji wykluczającej ten konkretny przypadek.


Powiedziałem, że mogę podać algorytm czasu wykładniczego, ale zostałem poproszony o rozwiązanie czasu wielomianowego, które działa, gdy N wynosi <= 1000.
Gena

1
Cóż, chyba że źle zapamiętałeś / zinterpretowałeś pytanie, jak sugeruje odpowiedź PPenguin, myślę, że pytanie to zadają albo bardzo wymagający ankieterzy, ankieterzy, którzy sami źle zrozumieli pytanie, a może nawet jako pytanie, którego nikt nie spodziewa się rozwiązać . Nawet jeśli to pytanie nie okaże się trudne obliczeniowo, najprawdopodobniej jest trudne.
Dyskretna jaszczurka

Wygląda na to, że M = 1 jest możliwe do wykonania (a zatem możliwe, że inne), więc coś przeoczyliśmy. Czy możesz mi pomóc zrozumieć / ocenić przypadek M = 1? Zadałem
PPenguin

2

Czy to możliwe, że źle zapamiętałeś konkretne dane lub źle zinterpretowałeś pytanie?

W opisie, element w pozycji B jest ograniczony do o - b ± M . Ale jeśli chodziło tylko o to, że różnica była ograniczona: a - b M , problem wydaje się możliwy do rozwiązania.abab±M
abM


Opracowałem ten prostszy problem i próbowałem uogólnić w sposób, który, jak miałem nadzieję, dałby trochę swobody w rozwiązywaniu większego problemu. Ale to właśnie wyjaśniło mi, dlaczego podejście rekurencyjne jest mało prawdopodobne, co omówię na końcu.

f(N,M,P)NababMbaP

MP

1 2 3 4 5  M=0, restricted values for each position
. . . . .  (positions in list)
1 2 3 4 5  P=0, restricted values for each position

3 4 5      M=2, restricted values for each position
. . . . .  (positions in list)
  1 2 3 4  P=1, restricted values for each position

PNg(N,M)=f(N,M,P)g(N,P)=f(N,M,P)MN

M=P=0MPfg

f(N,0,0)=g(N,0).

f(N,M,P)=f(N,P,M)

g(N,M)f(N,M,P)

M=0ijN1j

j(N2)j

  1. ig(N2,0)

  2. ijg(N1,0)

g(N,0)=(N1)[g(N2,0)+g(N1,0)]

g(1,0)=0,  g(2,0)=1

Jest to zwykła rekursywna formuła wykroczeń.

Chociaż nie mogę sobie wyobrazić, że ktoś nadchodzi z tym na miejscu, ale również okazuje nie jest zamkniętą formą rozwiązania tego (patrz rozstroju artykuł wiki szczegółów).

g(N,0)=n!e+12

MN

(MN)g(N,M)=N!

0<M<NMM

i

  1. i<Miig(N1,M1)

  2. i>=Miig(N1,M)

(0<M<N)g(N,M)=(M1)g(N1,M1)+(NM+1)g(N1,M)

g

M+PNNMNPM+PNg(N,M+PN)

(M+P)Nf(N,M,P)=g(N,M+PN)

0<M<N0<P<NM+P<Nf0<MP<N

PNMPM

MNMPP

Tutaj jednak musimy zakończyć. Ponieważ nie ma możliwości zastosowania tej metody.


ab±M

f(N,M,P)

2NN{A1,A2,...,AN}{B1,B2,...,BN}(Ai,Bj)ij=M(Bj,Ai)ji=MM0

AB

Chcemy więc funkcji, która pobiera jako dane wejściowe ten wykres ograniczeń i wyprowadza liczbę permutacji, które spełniają ograniczenia.

M+PN

0<MP<NNN!

Ponieważ istnieje tyle możliwych podgrafów po dopuszczeniu łańcuchów, naprawdę nie rozumiem, jak można to rozwiązać za pomocą zwykłych metod rekurencyjnych, chyba że istnieje sprytna relacja mówiąca, że ​​nieizomorficzne wykresy ograniczeń są w jakiś sposób równoważne liczbie permutacji.

Myślę, że najprawdopodobniej pytanie zostało źle zinterpretowane. Być może nawet przez ankietera (który mógł sam zapomnieć o szczegółach odpowiedzi).


Dlaczego jest tworzony wykres wiązań? Co oznaczają wskazówki?
Dyskretna jaszczurka

@Discretelizard Dwa kierunki (a-> b vs b-> a) rozróżniają, skąd pochodzi ograniczenie (wersja „+” lub „-” ograniczenia). Nie jest to naprawdę potrzebne, ponieważ nie ma znaczenia pochodzenie ograniczenia, po prostu ułatwiło mi wizualizację tego, co się działo.
PPenguin
Korzystając z naszej strony potwierdzasz, że przeczytałeś(-aś) i rozumiesz nasze zasady używania plików cookie i zasady ochrony prywatności.
Licensed under cc by-sa 3.0 with attribution required.