Social networking 在图中命名簇

Social networking 在图中命名簇,social-networking,discrete-mathematics,Social Networking,Discrete Mathematics,我们有一个社交图,它后来被分解成高凝聚力的集群。乔纳森·科恩(Jonathan Cohen)的《桁架》(Truss)[1] 现在我有了这些集群,我想为它们命名。 群集名称应允许在不更改名称的情况下对群集大小进行不重要的更改 例如: 假设我们有集群M: M : {A, B, C, D, E, F} 让我们假设“命名算法”为它生成了名称“m” 一段时间后,顶点A已离开簇,而顶点J已加入: M : {B, C, D, E, F, J} 新生成的名称是“m” 所需功能: m' == m fo

我们有一个社交图,它后来被分解成高凝聚力的集群。乔纳森·科恩(Jonathan Cohen)的《桁架》(Truss)[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]

根据您的示例,我假设您的意思是“集群组成的微小变化”,而不是“集群大小”

如果您的命名函数
f()
无法使用给定集群的现有名称的相关信息,则您必须允许有时它会重命名,尽管更改很小。实际上,假设
f()。从集群A开始,您可以通过一次只添加或删除一个元素来访问任何其他集群B。通过构造,函数将为A和B返回相同的名称。由于A和B是任意的,
f()
将为所有可能的集群返回相同的名称-显然是无用的

因此,您有两种选择:

(1) 命名函数依赖于集群的现有名称,或

(2) 命名函数有时(很少)在非常微小的更改后重命名集群

如果你选择备选方案(1),那就很简单了。您可以简单地随机分配名称,然后在集群更新时保持名称不变,只要它们没有太大差异(但是您定义的不同)。考虑到这是多么简单,我想这不是你想要的

如果使用备选方案(2),则需要使用有关集群中底层对象的一些信息。如果您所拥有的只是指向各种没有内部结构的对象的链接,那么就无法完成,因为除了集群大小之外,该函数将没有任何东西可以使用

假设你有一些关于物体的信息。例如,您可能有他们的名字。将每个对象名称的第一个
k
字母称为对象的前缀。计算集群中所有不同的前缀,并找到最常见的前缀。将这些
n
前缀按字母顺序排列,并按顺序相互追加。要合理选择
k
n
(这取决于簇的数量和典型对象名称的长度),只要每个簇中有足够的对象,就可以得到所需的结果

例如,如果对象有人名,请尝试k=2;如果有数百个集群,可以尝试n=2

当然,通过重新映射名称以实现更均匀的分布、处理两个前缀具有相似频率的情况等,可以大大改进这一点