У меня есть неориентированный плоский граф, где каждый node имеет вес. Я хочу разбить график на как можно большее число связных непересекающихся подграфов (EDIT: или достичь минимального среднего веса возможных подграфов), учитывая условие, что каждый подграф должен достичь фиксированного минимального веса (который представляет собой сумму весов его узлов). Подграф, содержащий только один node, также хорошо (если вес node больше фиксированного минимума).
То, что я выяснил до сих пор, является эвристическим:
create a subgraph out of every node
while there is an underweight subgraph:
select the subgraph S with the lowest weight
find a subgraph N that has the lowest weight among the neighbouring subgraphs of S
merge S to N
Ясно, что это не оптимально. Кто-нибудь получил лучшее решение? (Может быть, я просто невежественен, и это не сложная проблема, но я никогда не изучал теорию графов...)
РЕДАКТИРОВАТЬ (более подробные сведения): Узлы на этом графике представляют собой низкоуровневые административные единицы, для которых должны быть предоставлены статистические данные. Тем не менее, подразделениям необходимо иметь определенный минимальный размер населения, чтобы избежать конфликтов с законодательством о персональных данных. Моя цель - создать агрегаты, чтобы как можно меньше информации терялось в пути. Соотношения соседства служат ребрами графа, так как результирующие единицы должны быть смежными.
Большинство единиц (узлов) в наборе значительно превышают минимальный порог. Около 5-10% из них ниже порога с различными размерами, как видно на примере (минимальный размер 50):