Упорядочение элементов так, чтобы некоторые элементы не находились между другими

10

Дано целое число и множество триплетов различных целых чисел найдите алгоритм, который либо находит перестановку множества такую, что или правильно определяет, что такой перестановки не существует. Менее формально мы хотим изменить порядок номеров от 1 до ; каждая тройка в указывает, что должен появляться перед в новом порядке, но не должен появляться междуn

S{(i,j,k)1i,j,kn,ij,jk,ik},
π{1,2,,n}
(i,j,k)S(π(j)<π(i)<π(k))  (π(i)<π(k)<π(j))
n(i,j,k)Sikjiи .k

Пример 1

Предположим, что и . затемn=5S={(1,2,3),(2,3,4)}

  • π=(5,4,3,2,1) является не допустимым перестановок, так , а .(1,2,3)Sπ(1)>π(3)

  • π=(1,2,4,5,3) является не допустимым перестановок, так , а .(1,2,3)Sπ(1)<π(3)<π(5)

  • (2,4,1,3,5) является допустимой перестановкой.

Пример 2

Если и , допустимая перестановка отсутствует. Точно так же нет действительной перестановки, если и ( Я думаю, возможно, сделал ошибку здесь).n=5S={(1,2,3),(2,1,3)}n=5S={(1,2,3),(3,4,5),(2,5,3),(2,1,4)}

Бонус: Какие свойства определяют, существует ли возможное решение?S

Patrick87
источник
Почему бы не перефразировать второе условие как ? Тогда у вас есть прямая, более или менее, проблема удовлетворения ограничений. (Обратите внимание, что я упростил условие, основываясь на других предположениях.)(σmi,σmj,σmk)S(i>jj>k)
Дейв Кларк,
Кстати: какова мотивация для этой проблемы?
Дейв Кларк,
@DaveClarke Смотрите мои изменения. Эта проблема была абстрагирована от обсуждения, связанного с проблемой планирования, которую я обсуждал с некоторыми другими студентами в лаборатории. По сути, идея заключается в том, что у вас много заданий, некоторые из которых должны выполняться в определенном порядке. Однако вы не хотите, чтобы некоторые задания планировались между заданиями в последовательности, возможно, по очень тонким причинам.
Patrick87
3
Почему сигмы? Просто определите . Вложенные подписки заставляют младенца Иисуса плакать. Σ={1,2,,n}
Джефф
@JeffE Честно говоря, мне просто нравится оправдание, чтобы играть с уравнением. Есть что-то просто приятное в написании кода, который компилируется в эти маленькие . Не принимай это от меня, чувак. σ
Patrick87

Ответы:

3

Вот наивный алгоритм. В конечном счете, он опирается на грубую силу, но иногда может работать хорошо.

Каждое ограничение состоит из двух конъюнктов; давайте назовем их тип- , , и тип- , . Каждый тип -(σmi,σmj,σmk)Si<k¬(i<j<k)Ai<kB¬(i<j<k)Bi>jj>kij,jk

  1. AΘO(|S|)
  2. BΘΘBΘO(|S|2)
  3. BΘ|S|
    B
  4. AB

nxi[0,n1]

Дэйв Кларк
источник
1

Вот частичный ответ:

i<kNPi<k

Мухаммед Аль-Туркистани
источник