Матиас:
Я подозреваю, что работает следующий жадный подход: начиная с самой большой группы, берите каждую группу и распределяйте по одному человеку из этой группы за столом, выбирая первые столы с наибольшим количеством свободных мест.
Верно. И небольшая вариация рассуждения Тклечека доказывает это.
Допустим есть решение. Нам нужно доказать, что алгоритм находит решение в этом случае.
Это беспочвенно верно, если количество групп равно 0.
Для шага индукции мы должны показать, что если есть какое-либо решение, то есть такое, в котором один член самой большой группы сидит за каждым из (размер самой большой группы) самых больших столов.
Условие L: Для всех пар (T1,T2) столов, если T1 ‹ T2 и член самой большой группы сидит за T1, то другой член самой большой группы сидит за T2.
Пусть S1 — решение. Если S1 соответствует L, мы закончили. В противном случае существует пара (T1,T2) таблиц с T1 ‹ T2, такая, что член самой большой группы сидит в T1, но ни один член самой большой группы не сидит в T2. Поскольку T2 > T1, существует группа, в которой есть участник, сидящий в T2, но ни один в T1 (или есть свободное место в T2). Таким образом, эти двое могут поменяться местами (или член самой большой группы может переместиться на свободное место в T2), и мы получим решение S2 с меньшим количеством пар столов, нарушающих L. Так как существует только конечное число столов, после конечного числа шагов мы нашли решение Sk, удовлетворяющее L.
Гипотеза индукции: для всех созвездий N групп и всех чисел M таблиц, если есть решение, алгоритм найдет решение.
Теперь рассмотрим созвездие из (N+1) групп и M таблиц, для которых существует решение. В соответствии с вышеизложенным также существует решение, в котором члены наибольшей группы размещаются в соответствии с алгоритмом. Разместите их так. Это сводит задачу к разрешимому созвездию из N групп и M' таблиц, которое решается алгоритмом в соответствии с предположением индукции.
person
Daniel Fischer
schedule
08.01.2012