Продаж блоків часових інтервалів


27

Враховуючи часових інтервалів, які бажають придбати людей. Особа має значення для кожного часового проміжку . Кожна людина може придбати лише один послідовний блок часових інтервалів, який може бути порожнім.nnkkiih(i,j)0h(i,j)0jj

Чи існує алгоритм поліноміального часу для обчислення максимального значення, яке може досягти продавець?

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

Відповіді:


9

Дано 3CNF з пунктами про змінні . Припустимо, і і відображаються у формулі не більше, ніж разів відповідно.ϕ1,,ϕkϕ1,,ϕkx1,,xnx1,,xnxixi¯xixi¯¯¯¯¯kiki

Ми розробляємо кольоровий DAG , вершини якого складаються з трьох частин:GG

  • Вершини "призначення" і , , . Колір з "кольором" , і з .vi(j)vi(j)ˉvi(j)v¯i(j)1in1in1jki1jkivi(j)vi(j)xi(j)xi(j)ˉvi(j)v¯i(j)¯xi(j)xi¯¯¯¯¯(j)
  • Вершини "пункту"wi(j)wi(j) , 1 i k , j = 1 , 2 , 3 . Колір w i ( j ) з кольором x i ( j ) (або ¯ x i ( j ) ), якщо ¯ x i (або x i , відповідно) є j -ми буквами пункту ϕ i 1ikj=1,2,3wi(j)xi(j)xi¯¯¯¯¯(j)xi¯¯¯¯¯xijϕi, і це j -й пункт, що містить цей літерал.j
  • "Вирізати" вершини s = s 0 , s 1 , ... , s n , s n + 1 , ... s n + k = t . Розфарбуйте їх різними кольорами, які відрізняються зверху.s=s0,s1,,sn,sn+1,sn+k=t

Краї включають:

  • s i - 1 v i ( 1 ) , v i ( j ) v i ( j + 1 ) , v i ( k i ) s i ;si1vi(1)vi(j)vi(j+1)vi(ki)si
  • s i - 1 ˉ v i ( 1 ) , ˉ v i ( j ) ˉ v i ( j + 1 ) , ˉ v i ( k i ) s i ;si1v¯i(1)v¯i(j)v¯i(j+1)v¯i(ki)si
  • і s n + i - 1 w i ( j ) , w i ( j ) s n + i .sn+i1wi(j)wi(j)sn+i

Наприклад, із 3CNF ( x 1x 2¯ x 3 ) ( x 1¯ x 2x 3 ) будується наступний графік (напрямки ребер - зліва направо). (x1x2x3¯¯¯¯¯)(x1x2¯¯¯¯¯x3)введіть тут опис зображення

Тепер не важко побачити, що оригінальний 3CNF є задоволеним тоді і лише за наявності у G s - t шляху з різними кольорами вершин .stG

(До речі, це побічний продукт, що наявність s - t шляху з різними вершинними кольорами в кольорі DAG є важким NP . Я не знайшов багато літератур про цю проблему в обчислювальній перспективі. Якщо ви знаєте, будь ласка коментар!)stNP-hard

Отже, яке співвідношення між проблемою G та OP? Інтуїтивно те, що ми будемо робити, - це створити матрицю h , щоб кожен колір був відображений у рядок (який є особою), а краї відображалися у послідовних стовпцях (часові проміжки). Тому максимальний графік, який в основному йде зліва направо в матриці, відповідає s - t шляху.Ghst

Наша матриця h має 2 n + 1 + i 2 k i + k стовпців, індекси починаються з 0 . У наступному constrcution X Y два значення задовольняють 1 « X « Y . Співвідношення X / 1 , Y / X можуть бути великими потужностями k і n . Нехай K i = 2 i + 2 i jh2n+1+i2ki+k0XY1XYX/1,Y/Xkn= 1 кi.Ki=2i+2ij=1ki

  • Для кожного s i , 0 i n , нехай h ( s i , K i ) = h ( s i , K i - k i - 1 ) = h ( s i , K i + k i + 1 + 1 ) = Y (якщо координата існує, те саме нижче).si0inh(si,Ki)=h(si,Kiki1)=h(si,Ki+ki+1+1)=Y
  • Для кожного x i ( j ) , нехай h ( x i ( j ) , K i - 1 + j ) = X ; Для кожного ¯ х я ( J ) , нехай ч ( ¯ х я ( J ) , К я - 1 + K я + 1 + J ) = Х .xi(j)h(xi(j),Ki1+j)=Xxi¯¯¯¯¯(j)h(xi¯¯¯¯¯(j),Ki1+ki+1+j)=X
  • Для кожного ϕ i , 1 i k та буквального x у пункті ϕ i , нехай h ( x , K n + i ) = 1 .ϕi1ikxϕih(x,Kn+i)=1
  • Усі інші записи - 0.

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

Тепер ми стверджуємо: вихідний 3CNF задовольняється тоді і лише тоді, коли максимальне значення дорівнює ( 2 n + 1 ) Y + i k i X + k .(2n+1)Y+ikiX+k

Розглянемо планування досягнення максимального значення. Оскільки в h є точні ( 2 n + 1 ) стовпців, що містять Y , їх слід охопити. Для стовпця K i + k i + 1, який має два варіанти Y , припустимо, що планування призначає його s s i . Оскільки стовпець K i повинен бути призначений s i , то послідовністю ми повинні втратити стовпці K i + 1 до K i + k(2n+1)hYKi+ki+1YsiKisiKi+1i . Те ж саме відбувається, якщо планування призначить стовпчик K i + k i + 1 до s i + 1 .Ki+kiKi+ki+1si+1

Тому, щоб мати значення i k i X , ми повинні вибрати всі інші наявні X у матриці, що відповідає призначенню змінних. Тож значення решти k досягається тоді і лише тоді, коли призначення відповідає кожному пункту.ikiXXk

На закінчення, відступали максимальне значення юридичного планування в NP-важкою . Можливо, тому всі наші попередні спроби знайти алгоритм зазнали невдачі.NP-hard


Але, у прикладі матриці, якщо я виберу ¯ x 1 ¯ x 2 та x 3, я все-таки можу досягти мети. Що я роблю неправильно? Також X у ¯ x 1 ( 1 ) має бути один стовпчик праворуч, а X у ¯ x 1 ( 2 ) - один стовпчик зліваx1¯¯¯¯¯ x2¯¯¯¯¯x3Xx1¯¯¯¯¯(1)Xx1¯¯¯¯¯(2)
rotia

@rotia Так, і це означає на лівій стороні ви повинні вибрати х 1 , х 2 , ¯ х 3 , щоб мати 4 X . Отже, це відповідає задовольняючому призначенню x 1 = x 2 = 1 , x 3 = 0 . x1,x2,x3¯¯¯¯¯4Xx1=x2=1,x3=0
Віллард Жан

Чи можете ви уточнити, що "Припустимо, k i більший з двох чисел появи літералів x i та ¯ x i ". засоби? Яка кількість появи літералу? Це щось про те, де воно відображається в пунктах / формулі, чи це скільки разів воно з’являється у формулі? Є чи K я буквальним або номер? kixixi¯¯¯¯¯ki
DW

@DW k i - це число. Мій вираз був справді зовсім не зрозумілий; Я це відредагував. ki
Віллард Жан

@WillardZhan Так. Але якщо я виберу ці змінні, я можу отримати значення, яке більше, ніж значення у формулі. Наприклад, я встановив Y = 60 і X = 7 , за формулою я повинен отримати лише 450 балів (припустимо, що k - кількість пунктів). Але, вибравши x 1 , x 2 , ¯ x 3, я можу дістатись до 452 балів, вибравши чотири праворучY=60X=7kx1,x2,x3¯¯¯¯¯
rotia

3

Це рішення має проблеми і незабаром буде видалено; дивіться коментар templatetypedef.

Ви можете вирішити це за багаточлен, використовуючи мінімальну витрату . Далі всі ребра мають місткість одиниці.

  • Створіть джерельну вершину s та цільову вершину t . Ми відправимо k одиниці потоку від s до t .stkst
  • Створіть n + 1 вершини v 0 , , v n, щоб представити часові точки між слотами та спрямований край v j v j + 1 для кожного 0 j < n із вартістю 0.n+1v0,,vnvjvj+10j<n
  • Для кожної людини я створіть наступне: i
    • Вершина під-джерела s i та вершина підтонувача t i .siti
    • Для кожного 0 j < n , ребро від s i до v j має вартість Σ j k = 1 год ( i , k ) (яке вважаємо рівним 0, якщо j = 0 ).0j<nsivjΣjk=1h(i,k)j=0
    • Для кожного 1 j n , ребра від v j до t i, що має вартість - Σ j k = 1 год ( i , k ) .1jnvjtiΣjk=1h(i,k)
    • Край s s i із вартістю 0.ssi
    • Край t i t із вартістю 0.tit

Потік мінімальних витрат у цій мережі матиме загальну вартість, рівну мінус найкращого можливого прибутку. (Ця вартість буде негативною, але це не проблема.) Існує оптимальне цілісне рішення, в якому кожна людина i має єдиний край, що залишає s i з потоком 1, і один край, що надходить на t i з потоком 1 , і всі інші краї, що трапляються на s i або t i мають 0 потік. Нехай ці потоки-1 для людини i будуть s i v j і v k t i : тоді k jisitisitiisivjvktikj, оскільки єдиними шляхами серед v -vertices є ті, що збільшують індекс. Якщо k = j , то людині i не виділяються часові проміжки; в іншому випадку людині i виділяється блок часових інтервалів j + 1 , , k .vk=jiij+1,,k

Інтуїтивно, кожна людина "отримує" 1 одиницю потоку з s і вибирає час початку (край) і час закінчення (край); ці краї початку та кінця є єдиними ребрами з ненульовою вартістю в мережі, і ми можемо представити значення блоку j + 1 , , k як різницю двох префіксних сум. Ємність одиниць на краях між v -vertices діє, щоб запобігти двом людям використовувати один і той же проміжок часу.sj+1,,kv

Цікаво, що ця рецептура буде працювати, навіть якщо значення h ( i , j ) можуть бути негативними.h(i,j)


3
Може це потерпіти невдачу , якщо якийсь - то людина я приймає маршрут від джерела до раковини іншої людини , і навпаки? i
templatetypedef

@templatetypedef: Я вважаю, ти маєш рацію; Незабаром я видалю цю відповідь. Що ж стосується цієї конструкції: натомість у нас є ті самі вершини та ребра, як і раніше, але зараз ми намагаємось "вивести" одну одиницю потоку через "трубопровід" людей (впорядкований шляхом збільшення i значення), видаливши всі ребра s s i за винятком s s 1 та всіх ребер t i t, за винятком t k t , і додавання краю t i s i + 1 з величезною негативною вартістю - M на кожен 1 i < kississ1tittkttisi+1M1i<k. - М и змусить одну одиницю потоку , щоб відвідати всі K - 1 з цих «трубопровідних» країв в будь-якому оптимальному рішенні. Mk1
j_random_hacker

@j_random_hacker, то ви змушуєте замовляти k людей. k
Чао Сю

@ChaoXu: Я не думаю, що так: при будь-якому призначенні блоків людям призначення можуть бути перераховані у порядку збільшення людини. (Зверніть увагу , що ніщо не забороняє людині я ' > я бути присвоєно блок , який закінчується на J ' < J , де J є першим блоком присвоюється людині I ) . Але у мене є відчуття , що близький родич проблеми , які зачіпають мій перший спроба також впливає на цю ...i>ij<jji
j_random_hacker

@j_random_hacker Вартість з я v J зажадає S я бути я й людина в оптимальному рішенні. sivjsii
Чао Сю
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.