Нет лучшего ответа на этот вопрос, потому что нет лучшего расположения сидений - на самом деле, я бы сказал, что расположение, которое вы говорите «ОК», вероятно, довольно плохое - если вы вынуждены использовать три стола, и вы можете Максимум 4 места за столом, вы, вероятно, должны сидеть по три за каждым столом, чтобы никто не сидел один. Это, однако, отнюдь не является основанием для вопроса.
Есть несколько алгоритмов, которые я могу представить.
Во-первых, вы можете рассматривать каждый «тег» как измерение в N-мерном пространстве (это звучит сложнее, чем есть). Например, в измерении региона вы можете назначить каждой стране целочисленное значение, и измерение для вашего регионального пространства будет иметь каждое из этих целых чисел в качестве потенциальных значений. Затем разместите каждого гостя как точку в этом N-мерном пространстве и выберите для каждого стола тех гостей, которые находятся ближе всего в этом пространстве. Вы можете поддерживать приоритеты, игнорируя некоторые особенности при построении пространства - например, если вы не хотите группировать по религии, не включаете религию при создании пространства или если вы активно хотите разделить людей с «единой» религией, вы Можно изменить расчет расстояния, чтобы иметь обратную зависимость в этом измерении. Этот алгоритм может иметь хорошую производительность в зависимости от количества функций (т. Е. Измерений) и количества точек - по сути, именно так они создают механизмы рекомендаций.
Если вы хотели что-то простое, но медленное, вы могли бы использовать алгоритм грубой силы: то есть для каждого гостя, посмотрите на каждый стол, на котором есть участники, если эти члены нежелательны с учетом ваших приоритетов, сядьте за свежий стол. Если свежих таблиц не существует, выберите таблицу с наименее нежелательными членами. Это, вероятно, так просто, как вы можете пойти!
Наконец, вы можете предварительно обработать своих гостей и посчитать: сколько из региона x, сколько из религии y, ... затем, когда у вас есть эта статистика, вы можете создавать таблицы ( в зависимости от приоритета), например: стол Канады, стол Великобритании, ..., а затем рассадить гостей за любым столом, который соответствует их описанию. Погода это возможно зависит от набора входных данных.
Надеюсь, это поможет и даст вам некоторые идеи о том, как решить эту проблему:)