Полиномиальные сводимости и NP-полные задачи. Классы NP, coNP, NPC/Задачи/Порядок закачек — NPC

Материал из DISCOPAL
Перейти к: навигация, поиск

Представим распределенный сервис стриминга видеофильмов. Центральный сервер с полной БД фильмов получает от периферийных кеширующих узлов запросы на требуемые фильмы и ориентировочные сроки, когда люди собираются их посмотреть.

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

Конкретно, узел контроля планирования получает n-заданий вида:

  • «начать_не_раньше, закончить_не_позже, размер_фильма»i, 1<=i<=n
  • максимальная пропускная способность не больше МаксКанал

И говорит «OK» (или «Паника-Паника!» в противном случае), если существует такое расписание из n команд отгрузки, соответствующих заданию (1<=i<=n ):

  • «время_начала, время_окончания, ширина_канала»i,
  • время_началаi >= начать_не_раньшеi
  • время окончанияi <= закончить_не_позжеi
  • ширина_каналаi <= МаксКанал
  • ширина_канала*(время_окончания — время_начала)i >= размер_фильмаi

Докажите NP-полноту задачи.

Hint: Можно через «Рюкзак-выполнимость» или «SUBSET-SUM»
решение, предложенное Дыкало Андреем

Как известно, задача «разбиения» на два равных по весу множества NP-полная. Возможность сведения задачи «разбиения» к задаче «мультипотоковое расписание», сформулированной в условии, означает NP-полноту второй задачи.

Сведение:

Пусть на входе задачи «разбиение» мы имеем n-натуральных чисел, интерпретируемых как веса предметов: A={a(1),a(2),..,a(n)}.

Обозначение: C=0.5 * [Σi {a(i) + (a(i)+1 mod 2)} + (Σi {a(i) + (a(i)+1 mod 2)} + 1 mod 2)]. (Четное число)

Для каждого i-ого предмета составим систему ограничений, i из {1,2,3,..,n}:

начать_не_раньше(i) = 1;

закончить_не_позже(i) = C;

размер_фильма(i) = a(i) + (a(i)+1 mod 2); (Если четное, то прибавить 1, иначе - прибавить 0.)

Далее, если Σi {a(i) + (a(i)+1 mod 2)} - нечетная, то добавим еще один фильм размера 1.

Стас Фомин 02:38, 22 December 2011 (MSK): Нет, мы не можем этого делать! Прочитайте внимательно условие — мы ограничиваем только ширину всего канала, мы не имеем права в постановке задач ограничивать пропускную способность для каждой отдельной закачки! Это решатель задачи о закачках нам выдает полосы для каждой задачи!
Дыкало Андрей 22:32, 22 December 2011 (MSK): Окей, переформулирую вход и "пересведу" задачу. Полагаю, что закачиваться могут несколько фалов одновременно с ограничением Σширина_канала(i) не больше МаксКанал в любой момент времени.


Стас Фомин 23:19, 22 December 2011 (MSK): «размер_фильма(i) = a(i) + (a(i) mod 2);» — без шансов. Вот задача «A=[2,3,5]» с очевидным решением. У вас это превратится в задачу передать фильмы по [2,4,6] (12 условных гигабайт), за 5 часов × 2 гига/час = 10 гигов, что нерешаемо
Дыкало Андрей 09:00, 23 December 2011 (MSK): Размеры фильмов были написаны с опечаткой.
Стас Фомин 13:41, 23 December 2011 (MSK): Все равно не поможет. Берем «A=[2,4,6]» с очевидным решением, вы получаете фильмы [3,5,7], гиг с задачей прокачать суммарных 15 гиг по каналу 2 за шесть часов. — нерешаемо
.
Дыкало Андрей 15:00, 23 December 2011 (MSK): Решение исправлено. Изменилось определение не только количество фильмов, но и параметр C


Стас Фомин 01:47, 29 December 2011 (MSK):

Определение

 C=0.5 * [Σi {a(i) + (a(i)+1 mod 2)} + (Σi {a(i) + (a(i)+1 mod 2)} + 1 mod 2)]

вынесло мне мозг, но насколько я понял, для

входа 4,6,8,2 мы получим [5,7,9,3], а С=½*(12+16)=14. ???
Дыкало Андрей 17:25, 29 December 2011 (MSK): Правильно. То есть если сумма [Σi {a(i) + (a(i)+1 mod 2)} нечетная, то добавть фильм размера один

Получили условия задачи о расписании. Дополним их заданием «МаксКанал»:

МаксКанал = 2;

Таким образом, вход задачи о «разбиении» полиномиально сведен ко входу задачи о расписании, т. к. каждому предмету соответствует O(1) операций формирования условия задачи о расписании.

Доказательства однозначности ответов:

Утверждение 1: Если расписание существует, то ни одна из загрузок не осуществляется с шириной_канала = МаксКанал = 2.

   Пусть при сформулированных условиях задачи о расписании нашлось расписание
такое, что хотя бы одна загрузка производится с шириной канала 2.
Пусть номер этой загрузки 1 (предположил, не умаляя общности). В силу
условий преобразования входов задачи все загрузки имеют нечетный размер.
На закачку номер 1 выделена ширина 2 и время t(1) >= (a(1) + [a(1)
mod 2])/2 + 1. Время на закачки
T >= t(1) + ({a(2)+[a(2)+1mod2]}+{a(3)+[a(3)+1mod2]}+...+{a(n)+[a(n)+1mod2]})/2 > C. Таким образом, T>C, но T<=C.
Получили противоречие, доказывающее справедливость утверждения.
   Вопрос задачи: существует ли расписание такое, что все загрузки осуществляемы им?
   Или формально с учетом УТВЕРЖДЕНИЯ 1: существует ли разбиение задач на два 
множества таких, что суммарное время на выполнение каждого множества задач не превосходит С.
   Или аналитически:

Существует ли S—подмножество весов A, удовлетворяющее условию:

                        max{ΣSa{i}, ΣA/Sa{i}} <= C.

Утверждение 2: если выполняется max{Σs a{i}, ΣA/S a{i}} <= 0.5 * ΣA a(i), то ΣS a{i} = ΣA/Sa{i}.

Доказательство:

x = Σsa{i}, z = ΣA/Sa{i}, C = 0.5 * ΣA a(i), тогда

z = 2C — x

неравенство переписывается в виде:

max{x, 2C-x} <= C оно имеет единственное решение при x = C.

То есть если решение существует, то существует S и Σs a{i} = ΣA/S a{i}.

Таким образом, если ответ задачи «расписания» ДА, то и ответ задачи «разбиение» ДА.

Если же ответ первой «НЕТ», то не существует такого множества S, для которого

выполняется: Σs a{i} = ΣA/S a{i}.

Ч.Т.Д.

[ Хронологический вид ]Комментарии

(нет элементов)

Войдите, чтобы комментировать.