Именование кластеров в графе - PullRequest
0 голосов
/ 18 января 2012

У нас есть социальный граф, который позже разбивается на кластеры высокой сплоченности.Что-то под названием Ферма Джонатаном Коэном [1].

Теперь, когда у меня есть эти кластеры, я хотел бы придумать имена для них.Имя кластера должно позволять незначительные изменения размера кластера без изменения имени.

Например: Предположим, у нас есть кластер M:

M : {A, B, C, D, E, F}

, и давайте предположим, что «алгоритм именования» сгенерировал имя«m» для него.

Через некоторое время вершина A покинула кластер, а вершина J присоединилась:

M : {B, C, D, E, F, J}

Новое сгенерированное имя - «m».

Требуемая функция:

m' == m     for insignificant cluster changes

[1] http://www.cslu.ogi.edu/~zak/cs506-pslc/trusses.pdf

1 Ответ

1 голос
/ 18 января 2012

Исходя из вашего примера, я предполагаю, что вы имеете в виду «незначительные изменения в составе кластера», а не «размер кластера».

Если ваша функция именования f() не может использовать информацию о существующем именидля данного кластера вы должны допустить, чтобы он иногда переименовывался, несмотря на небольшие изменения.Действительно, предположим, что f() никогда не переименовывает кластер, когда он немного меняется.Начиная с кластера A, вы можете попасть в любой другой кластер B, добавляя или удаляя только один элемент за раз.По построению функция возвратит одно и то же имя для A и B. Поскольку A, B были произвольными, f() вернет одно и то же имя для всех возможных кластеров - явно бесполезно.

Итак, у вас есть две альтернативы:

(1) функция именования опирается на существующее имя кластера или

(2) функция именования иногда (редко) переименовывает кластер после очень незначительного изменения.

Если вы выберете альтернативу (1), она тривиальна.Вы можете просто назначать имена случайным образом, а затем сохранять их неизменными всякий раз, когда кластер обновляется, если он не слишком отличается (однако вы определяете другое).Учитывая, как все просто, я полагаю, это не то, что вы хотите.

Если вы выберете альтернативу (2), вам потребуется использовать некоторую информацию о базовых объектах в кластере.Если все, что у вас есть, это ссылки на различные объекты без внутренней структуры, это невозможно сделать, так как функция не будет иметь ничего для работы, кроме размера кластера.

Итак, допустим, у вас есть некоторая информацияоб объектах.Например, у вас могут быть их имена.Назовите первые k буквы имени каждого объекта, префикс объекта .Подсчитайте все различные префиксы в вашем кластере и найдите n наиболее распространенные.Упорядочите эти n префиксы в алфавитном порядке и добавьте их друг к другу в указанном порядке.Для разумного выбора k, n (который должен зависеть от количества ваших кластеров и типичной длины имени объекта), вы получите желаемый результат - при условии, что в каждом кластере достаточно объектов.

Например, если объекты имеют человеческие имена, попробуйте k = 2;и если у вас есть сотни кластеров, возможно, попробуйте n = 2.

Это, конечно, может быть значительно улучшено путем переназначения имен для достижения более равномерного распределения, обработки случаев, когда два префикса имеют одинаковые частоты, и т. д.

...