首先,如果我的英语有点不对劲(这不是我的母语),我很抱歉。我会尽力让自己被理解。
我正在为我的硕士论文做一个可视化项目,我想出了一个算法问题。可视化由一个图表组成,该图表通过我所谓的关键字(边缘)表示我称之为人工制品(图表的节点)之间的连接。这些人工制品可以是各种各样的东西。例如,它们可以表示照片,而边缘将表示照片之间的标签。出于说明目的,假设照片 A 通过标签 1 连接到照片 B。这意味着照片 A 和照片 B 都具有标签 1。
现在,我有一个称为扩展的操作,它以这种方式工作:
用户双击一个节点(在我的示例中是一张照片),程序会查询数据库以查找与该节点的每个新连接。在上面的示例中,如果用户双击照片 B,则扩展将生成例如分别带有标签 2 和 3 的照片 C 和照片 D。问题是这会产生大量数据,让我无法解决分组节点的问题。理想的情况是使用尽可能多的常见关键字(边缘)进行分组。例如,现在假设照片 C 和 D 都具有标签 5,那么将有一组具有 C 和 D 的边缘为 5。但是如果照片 D 和 E 都具有标签 5 和 6,则该组是带有边缘的 D 和 E 5 和 6,然后是带有边缘 5 的照片 C(边缘可以重复)。为了显示:
5,6
A----B -> expand B -> A----B-----DE
1 1 |
|5
|
C
我的问题是完成这个算法。在数据库上,我有以下表格:
关键字 (keyword_id、other_attributes)
人工制品(artefact_id, other_attributes )
Keyword_Artefact (keyword_id, artefact_id)
Keyword_Artefact_Artefact (keyword_id, artefact_id1, artefact_id2)
解决这个问题的最佳方法是什么?一个可以用相当数量的数据完成的。
我正在使用 prefuse 库在 java 中开发这个程序。