Здесь работает жадный подход? - PullRequest
1 голос
/ 07 января 2012

Предположим, есть N групп людей и M таблиц.Мы знаем размер каждой группы и вместимость каждой таблицы.Как сопоставить людей с таблицами так, чтобы за одним столом не сидели два человека из одной группы?

Работает ли жадный подход для решения этой проблемы?(Жадный подход работает следующим образом: для каждой таблицы старайтесь «заполнить» ее людьми из разных групп).

Ответы [ 3 ]

4 голосов
/ 07 января 2012

Предполагая, что группы и таблицы могут иметь разный размер, я не думаю, что жадный подход, как описано, работает (по крайней мере, без дополнительных спецификаций). Предположим, у вас есть таблица из 2 T1 и таблица из 3 T2, а также 3 группы {A1}, {B1, B2} и {C1, C2}. Если я буду следовать вашему алгоритму, T1 получит {A1, B1}, и теперь у вас останутся T2 и {B2, C1, C2}, которые не работают. Тем не менее, существует решение T1 {B1, C1}, T2 {A1, B2, C2}.

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

2 голосов
/ 08 января 2012

Матиас:

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

Действительно. И небольшая вариация аргумента Тклечека доказывает это.

Предположим, что есть решение. Мы должны доказать, что алгоритм находит решение в этом случае.

Это неверно верно, если число групп равно 0.

Для этапа индукции мы должны показать, что, если есть какое-либо решение, есть одно, где один член самой большой группы сидит за каждой из (размер самой большой группы) самых больших таблиц.

Условие L: Для всех пар (T1, T2) таблиц, если T1

Пусть S1 - решение. Если S1 удовлетворяет L, мы закончили. В противном случае существует пара (T1, T2) таблиц с T1 T1, существует группа, в которой член находится в точке T2, но нет члена в точке T1 (или в точке T2 есть свободное место). Таким образом, эти двое могут поменяться местами (или член самой большой группы может переместиться на свободное место в Т2), и мы получаем решение S2 с меньшим количеством пар таблиц, нарушающих L. Поскольку после конечного числа шагов существует только конечное количество таблиц мы нашли решение Sk, удовлетворяющее L.

Гипотеза об индукции: для всех созвездий N групп и всех чисел M таблиц, если решение найдено, алгоритм найдет решение.

Теперь рассмотрим совокупность (N + 1) групп и M таблиц, в которых существует решение. С учетом вышеизложенного также существует решение, в котором члены самой большой группы размещаются в соответствии с алгоритмом. Разместите их так. Это сводит проблему к разрешимому созвездию из N групп и таблиц M ', что решается алгоритмом согласно индукционной гипотезе.

1 голос
/ 08 января 2012

Работает следующий жадный подход:

Повторяйте следующие шаги, пока не останется места:

  1. Выберите самую большую группу и самый большой стол
  2. Соответствиеодин человек из выбранной группы к выбранной таблице
  3. Уменьшите размер группы и размер таблицы на 1.

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

Нам просто нужно доказать, что после выполненияодним шагом мы все еще можем найти оптимальное решение.

Давайте назовем любого члена крупнейшей группы крутым парнем.Предположим, что существует другое оптимальное решение, при котором ни один крутой парень не сидит за самым большим столом.Давайте выберем любого человека, сидящего за самым большим столом в этом решении, и назовем его хромым парнем.Он должен принадлежать к группе размеров не больше, чем классная группа.Так что есть еще один стол, за которым сидит крутой парень, но не хромой парень.Мы можем смело менять местами хромого и крутого парня, что также приводит к оптимальному решению.

...