Это основано на статье, которую я читал о головоломках и интервью с вопросами, заданными крупными компаниями-разработчиками программного обеспечения, но у него есть твист...
Общий вопрос:
Что такое алгоритм для размещения людей в кинотеатре, чтобы они сидели прямо рядом со своими друзьями, но не рядом с их врагами.
Технический вопрос:
Учитывая сетку N на M, заполните сетку элементами N * M - 1. Каждый элемент имеет логическое значение ассоциации для каждого из других элементов N * M - 2. В каждой строке N элементы непосредственно рядом с другими элементами должны иметь положительное значение ассоциации для другого. Столбцы, однако, не имеют значения, т.е. Элемент может быть "врагом" с элементом перед ним. Примечание: Если элемент A имеет положительное значение ассоциации для B, то это означает, что B также имеет положительное значение ассоциации для A. Он работает одинаково для отрицательных значений ассоциации. Элемент гарантированно имеет положительную связь, по крайней мере, с одним другим предметом. Также у вас есть доступ ко всем элементам и значениям их ассоциации, прежде чем вы начнете размещать их в сетке.
Комментарии:
Я изучал эту проблему и думал об этом со вчерашнего дня, из того, что нашел, это напоминает мне проблему с упаковкой бинов с некоторыми добавленные требования. В свободное время я попытался ее реализовать, но большие группы "врагов" сидели рядом. Я уверен, что в большинстве ситуаций должно быть по крайней мере одна пара врагов, сидящих рядом друг с другом, но мое решение было далеко не оптимальным. На самом деле это выглядело так, как будто я просто рандомизировал его.
Что касается моей реализации, я сделал N = 10, M = 10, количество элементов = 99 и имел массив размером 99 для элемента EACH, у которого было рандомизированное логическое значение, которое ссылалось на дружбу соответствующий номер товара. Это означает, что каждый элемент имел значение дружбы, которое соответствовало их самости, я просто проигнорировал это значение.
Я планирую попытаться повторно реализовать это позже, и я отправлю код. Может ли кто-нибудь понять "хороший" способ сделать это, чтобы минимизировать столкновения между врагами?