Кластерный анализ - хорошее начало.
Я бы предложил следующий способ обработки:
Сначала определите функцию стоимости:
С учетом перераспределения страниц: Стоимость (Перераспределение) = f (узлы вблизи границ, ребра с множеством страниц)
Целью будет минимизация этой функции.
выбрал алгоритм кластерного анализа:
определить алгоритм кластера (вы можете взглянуть на мой пост по DBSCAN: Код DBSCAN на C # или vb.net, для кластерного анализа
и добавьте «страничное» ограничение к кластеризации. (размер страницы)
В зависимости от того, как вы пройдете свои баллы, результат будет разным из-за «ограничения страницы».
выберите тот, у которого наименьшая стоимость, или остановитесь, когда найдете приемлемую стоимость.
Сложность этого алгоритма будет O (n!) ... вроде бы большой для больших графов.
Поэтому вам нужно подумать о некоторых дополнительных ограничениях кластеризации или просто выполнить частичный поиск (сначала проверьте n2, чтобы получить его в O (n2)), чтобы получить хорошее приближение.
В зависимости от приемлемой стоимости вы можете получить результат в разумные сроки или нет.