Чи можливо ви пам’ятали конкретні деталі неправильно чи неправильно трактували питання?
В описі, елемент в положенні б обмежена в - Ь ≠ ± M .
Але якщо вони просто означали, що різниця обмежена: a - b ≠ M ,
тоді проблема видається простежуваною.аba−b≠±M
a−b≠M
Я розробив цю простішу проблему, і спробував узагальнити таким чином, що, сподіваючись, міг би дати трохи свободи в розробці більшої проблеми. Але це якраз прояснило для мене, чому рекурсивний підхід дуже неправдоподібний, про що я обговорюю наприкінці.
Розглянемо функцію яка дає кількість перестановок списку елементів, позначених від 1 до N , де елемент a в положенні b (перша позиція 1) задовольняє a - b ≠ M , і b - ≠ P .f(N,M,P)Naba−b≠Mb−a≠P
Щоб візуалізувати це, розділення його на два обмеження дозволяє і Р пересувати ці обмеження окремо.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
Для зручності, коли щоб не було обмежень перестановок, визначте g ( N , M ) = f ( N , M , P ) . Аналогічно, g ( N , P ) = f ( N , M , P ), коли M ≥ N, так що він не обмежує перестановки.P≥Ng(N,M)=f(N,M,P)g(N,P)=f(N,M,P)M≥N
У спеціальному випадку обмеження з M і P еквівалентні, тому їх можна ігнорувати, дозволяючи записати f через g :
f ( N , 0 , 0 ) = g ( N , 0 ) .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=0ijN−1j
j(N−2)j
ig(N−2,0)
≠ijg(N−1,0)
g(N,0)=(N−1)[g(N−2,0)+g(N−1,0)]
g(1,0)=0, g(2,0)=1
Це звичайна рекурсивна формула дезорганізації.
Поки я не можу собі уявити , хто придумує це на місці, також виявляється існує замкнута форма вирішення для цього (див психозу вікі - статті для більш докладної інформації).
g(N,0)=⌊n!e+12⌋
M≥N
(M≥N)⟹g(N,M)=N!
0<M<NMM
i
i<Miig(N−1,M−1)
i>=Miig(N−1,M)
(0<M<N)⟹g(N,M)=(M−1)g(N−1,M−1)+(N−M+1)g(N−1,M)
g
M+P≥NN−MN−PM+P−Ng(N,M+P−N)
(M+P)≥N⟹f(N,M,P)=g(N,M+P−N)
0<M<N0<P<NM+P<Nf0<M≤P<N
PN−M−PM
MN−M−PP
Однак на цьому ми повинні закінчитися. Оскільки з цим методом немає шляху вперед.
a−b≠±M
f(N,M,P)
2NN{A1,A2,...,AN}{B1,B2,...,BN}(Ai,Bj)i−j=M(Bj,Ai)j−i=MM≠0
AB
Отже, ми хочемо, щоб функція, що приймає цей графік обмежень, і виводила кількість перестановок, що задовольняють обмеженням.
M+P≥N
0<M≤P<NNN!
Оскільки існує так багато можливих підграфів, коли ланцюги дозволені, я дійсно не бачу, як це можна вирішити звичайними рекурсивними методами, якщо не існує розумного відношення, яке говорить про те, як неізоморфні графіки обмежень якимось чином еквівалентні кількості перестановок.
Я думаю, що, швидше за все, питання було трактовано неправильно. Можливо, навіть інтерв'юер (який, можливо, забув самі деталі відповіді).