如何在2d图中将类似项集合在一起

时间:2012-06-21 07:02:22

标签: algorithm

好吧我不是在寻找如何在2d Graph上绘制项目,它只是图形表示预期输出需要

我有一个像

这样的清单
a=[]
b=['c','d','e']
c=['a','b','d']
d=['a']
e=['b','a']
l=['g','r','p']
g=['r']
r=['g']
p=['l']

现在从上面可以清楚地看出b指的是c,d,e
a,b,c,d紧密相连,而l,g,r,p是相连的
任何人都可以告诉我一个算法(记住2d图片)如何将这些类似物品重新组合在一起。

以上只是一个例子。 该列表将动态创建

2 个答案:

答案 0 :(得分:2)

你遇到过Graphviz吗?它有各种不同形式的图形布局的算法,我认为这样可以很好地布置上面的小例子。它还包括一些简单的GUI,允许您试验它支持的不同布局。

编辑:回应一些澄清:

如果您需要在图表中找到密集子图,即使它已完全连接,那么您正在寻找在网络中找到社区的算法。可以在this paper中找到最近开发的算法的示例,该算法在大图(200万个节点,代表社交网络)上有效地执行此操作。

答案 1 :(得分:1)

只是为了扩展Alex的答案,这里有一个graphviz用于图表的例子:

graph.dot:

digraph G
{
  b -> c;
  b -> d;
  b -> e;
  c -> a;
  c -> b;
  c -> d;
  d -> a;
  e -> b;
  e -> a;
  l -> g;
  l -> r;
  l -> p;
  g -> r;
  r -> g;
  p -> l;
}

Graphviz的输出:

Example graph

如果您只是想知道图表中的群集而不绘制它们,请使用this algorithm