У меня есть проблема комбинаторной оптимизации, с которой я борюсь. Технические детали проблемы громоздки, поэтому я перевел что-то с точки зрения фиктивного сладкого дня рождения 16. Очевидно, подростки NP трудны, но это отдельно от реальной проблемы, которую я пытаюсь решить.«Frenemies», или Как сделать подростков счастливыми на вечеринке с днем рождения
Скажем, у меня есть сын, которому вот-вот исполнится 16 лет. Он приглашает всех своих друзей на свой день рождения, но не всех его друзей, как друг друга. На самом деле, у каждого друга моего сына есть хотя бы один человек, которого они не любят, а у некоторых больше. Эти «frenemies» отказываются сидеть за одним столом, если один или несколько присяжных «frenemy» сидят за одним столом. Мой сын предоставил мне список всех его приглашенных друзей, а также кому не нравится кто. Эта информация симметрична (если другу A не нравится друг B, друг B не любит друга A), но он НЕ транзитивен (если друг A не любит друга B, но любит друга C, друг C все еще свободно любить или не любить друга B). Мой вопрос: как определить минимальное количество таблиц, удовлетворяющих условию, что две «frenemies» не сидят за одной таблицей?
«Жадный» подход не будет обеспечивать оптимальное решение в целом: Предположим, что ABCD Если вы начинаете поиск в узле B и выбираете C (то, что в этот момент так же хорошо, как и выбор A) вы получите решение, требующее трех таблиц, но оптимальным решением будет группа A, B и C, D. – Reinhard
@ Reinhard: Вы правы. Я посмотрю, смогу ли я это исправить. – blubb
@ Reinhard: Я обновил свой ответ. Пожалуйста, дайте мне знать, если вы найдете проблему! – blubb