Підрахунок перестановок, елементи яких не є точно їх індексом ± M


13

Мене нещодавно задали цю проблему в алгоритмічному інтерв'ю і не змогли її вирішити.

Враховуючи два значення N і M, ви повинні порахувати кількість перестановок довжиною N (використовуючи числа від 1 до N) таким чином, що абсолютна різниця між будь-яким числом перестановки та його положенням у перестановці не дорівнює М.

Приклад - Якщо N = 3 і M = 1, то 1 2 3 і 3 2 1 є дійсними перестановками, але 1 3 2 є недійсним, оскільки число 3 знаходиться в положенні 2 і їх різниця = M.

Я спробував програмування NxM Dynamic, але не вдалося сформувати повтор, який не враховує повторень.


Можливо, ви можете отримати формулу за допомогою включення-виключення. Випадок класично відомий як дерангування . M=0
Yuval Filmus

1
Це особливий приклад підрахунку ідеальних відповідностей у двосторонніх графах, проблема, яка є -повною. Звичайно, цей конкретний випадок міг бути простішим. #P
Yuval Filmus

Я вже спробував включити виключення, але не досяг успіху.
Гена

Ви можете спробувати адаптувати методи підрахунку деранжувань . Я не знаю, чи це вас візьме кудись. Ви також можете спробувати виправити M = 1 (скажімо), обчисливши число для малих значень N (N = 1,2,3,4,5,6,7,8) за допомогою грубої сили, а потім шукати відповідну послідовність в OEIS, сподіваючись, що ви знайдете щось корисне.
DW

Яку рекурсію ви встановили? Що ви маєте на увазі під «підрахунком повторів»?
Рафаель

Відповіді:


2

Перше, про що я запитав би, коли це було б

Ви хочете поліноміальний алгоритм часу?

і тоді я сподіваюся, що відповідь - «ні». Я підозрюю, що ця проблема є важкою для NP, з наступної причини:

Природним підходом до цієї проблеми є розгляд розміщення першого числа та отримання рекурсивної формули для розміщення інших. Це добре підходить для випадку (тобто підрахунку кількості дерангувань), оскільки не має значення, на якій позиції ви поставили перший номер, оскільки існує лише одне "незаконне" положення кожного числа. Іншими словами, такий підхід призводить до незалежних підпроблем.M=0

Для це не так просто, оскільки зараз ми можемо мати 2 незаконні позиції для деяких чисел. Яка з цих позицій залишається в підпрограмі, тепер має відношення до рішення підпрограми. Тільки врахування кількості "незаконних" позицій недостатньо, оскільки "ланцюги" чисел, які поділяють незаконну позицію, необхідні для визначення структури підпрограм цієї підпрограми. Отже, такий підхід по суті призводить до такої підпроблеми:M>02

Враховуючи множину , множину B N як розміром не більше N, так і натуральним числом M , порахуйте кількість досконалих відповідностей на двопартійному графіку ( A , B , E ) , де ( a , b ) E якщо і тільки якщо | а - б | M .ANBNNM(A,B,E)(a,b)E|ab|M

Ця проблема виглядає важко. Єдиний підхід до цієї проблеми, який я бачу, - це включення / виключення, яке не призведе до поліноміального алгоритму часу.

Ми можемо розглянути підходи, які не покладаються на ітераційне розміщення чисел, але я не маю поняття, як би ви це зробили. (особливо під час інтерв'ю!)

Звичайно, все це лише міркування, і все ж можливо, що розумний трюк може дати поліноміальне рішення, але я сподіваюся, що я висловив переконливий аргумент, що цей трюк повинен бути дуже розумним.

Можливо, можна виявити твердість NP, зменшивши цю проблему до # 2-SAT ("ланцюги" чисел, які діляться незаконними позиціями, здаються нетривіальним вибором, який може бути узгоджений з вибором значення істини), але Я досі не бачив очевидного способу зробити це.


У випадку, якщо інтерв'юер насправді буде задоволений експоненціальним алгоритмом часу, я б просто створив усі можливі рішення, адаптувавши алгоритм рекурсивного зворотного відстеження для створення перестановки для виключення цього конкретного випадку.


Я сказав, що я можу дати алгоритм експоненціального часу, але мене попросили розв'язати поліном часу, який працює, коли N <= 1000.
Гена,

1
Ну, якщо ви неправильно запам’ятали / неправильно трактували питання, як підказує відповідь від PPenguin, я думаю, що це питання задають або дуже вимогливі інтерв'юери, інтерв'юери, які самі неправильно зрозуміли це питання, або, можливо, навіть як питання, яке вони не очікують, що хтось вирішить. . Навіть якщо це питання виявиться не обчислювально складним, воно, швидше за все, є важким для інтерв'ю.
Дискретна ящірка

Здається, що M = 1, ймовірно, можна виконати (а отже, можливо, і інші), тому щось ми пропустили. Чи можете ви допомогти мені зрозуміти / оцінити випадок M = 1? Я поставив для нього окреме запитання cs.stackexchange.com/questions/74674/…
PPenguin

2

Чи можливо ви пам’ятали конкретні деталі неправильно чи неправильно трактували питання?

В описі, елемент в положенні б обмежена в - Ь ± M . Але якщо вони просто означали, що різниця обмежена: a - b M , тоді проблема видається простежуваною.abab±M
abM


Я розробив цю простішу проблему, і спробував узагальнити таким чином, що, сподіваючись, міг би дати трохи свободи в розробці більшої проблеми. Але це якраз прояснило для мене, чому рекурсивний підхід дуже неправдоподібний, про що я обговорюю наприкінці.

Розглянемо функцію яка дає кількість перестановок списку елементів, позначених від 1 до N , де елемент a в положенні b (перша позиція 1) задовольняє a - b M , і b - P .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

Для зручності, коли щоб не було обмежень перестановок, визначте g ( N , M ) = f ( N , M , P ) . Аналогічно, g ( N , P ) = f ( N , M , P ), коли M N, так що він не обмежує перестановки.PNg(N,M)=f(N,M,P)g(N,P)=f(N,M,P)MN

У спеціальному випадку обмеження з 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=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

Це звичайна рекурсивна формула дезорганізації.

Поки я не можу собі уявити , хто придумує це на місці, також виявляється існує замкнута форма вирішення для цього (див психозу вікі - статті для більш докладної інформації).

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

Однак на цьому ми повинні закінчитися. Оскільки з цим методом немає шляху вперед.


ab±M

f(N,M,P)

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

AB

Отже, ми хочемо, щоб функція, що приймає цей графік обмежень, і виводила кількість перестановок, що задовольняють обмеженням.

M+PN

0<MP<NNN!

Оскільки існує так багато можливих підграфів, коли ланцюги дозволені, я дійсно не бачу, як це можна вирішити звичайними рекурсивними методами, якщо не існує розумного відношення, яке говорить про те, як неізоморфні графіки обмежень якимось чином еквівалентні кількості перестановок.

Я думаю, що, швидше за все, питання було трактовано неправильно. Можливо, навіть інтерв'юер (який, можливо, забув самі деталі відповіді).


Чому спрямований ваш графік обмежень? Що означають напрямки?
Дискретна ящірка

@Discretelizard Два напрямки (a-> b vs b-> a) розрізняють, звідки виникло обмеження (версія '+' або '-' обмеження). Це насправді не потрібно, оскільки це не має значення походження обмеження, я просто полегшив мені уявити, що відбувається.
PPenguin
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.