用于查找节点最可能的祖先的图算法

时间:2018-05-25 09:54:57

标签: java algorithm performance graph-theory wikipedia

我正在使用维基百科类别图表(WCG)。在WCG中,每篇文章都与多个类别相关联。 例如,文章" Lists_of_Israeli_footballers"链接到多个类别,例如:

Lists of association football players by nationality - Israeli footballers - Association football in Israel lists

现在,如果你爬回类别树,你很可能会找到很多路径,直到#34;足球"类别,但也至少有一条通往"科学"例如。

这是有问题的,因为我的最终目标是能够使用与其链接的类别列表来确定文章是否属于给定类别:现在,简单的祖先搜索会给出误报(对于例如:识别"以色列足球运动员"作为科学"类别的一部分 - 这显然不是预期的结果。)

我想要一种算法能够找出最可能的祖先是什么。

我想到了两个主要的解决方案:

  • 将WCG链接文章的类别顶点中不同路径的数量计算到候选祖先类别(并使用链接到相同深度的其他类别的路径数量进行比较)

  • 使用某种聚类算法并在孤立的图形空间中进行祖先搜索查询

考虑到WCG的大小(200万个顶点 - 甚至更多的边缘),这些选项的问题在于它们似乎非常昂贵。最终,我可以使用在O(n)或更多时间内使用预处理算法的解决方案来实现O(1),但我需要总体上非常快的查询。

我的问题是否有现成的解决方案?对所有建议开放。

1 个答案:

答案 0 :(得分:1)

Np,谢谢你的澄清。像聚类这样的东西可能不是一个好主意,因为那些类型的算法旨在确定一个与类别无关的对象的类别。在您的问题中,所有对象(足球运动员文章)已经与不同的类别相关联。

您应该对所有文章进行完整搜索,并将匹配的类别与每个文章保存在哈希表中,以便您在需要知道新文章时可以检索此类别信息。

一个类别是否与文章相关似乎对我来说完全是武断的,似乎是你应该自己决定的事情(例如,在确定类别的一部分之前确定一个类别的5个链接的阈值)。

如果你从维基百科收到这些文章,你可能会在整个树上进行很长时间的运行,但在我看来,它似乎是你唯一的选择。

使用DFS搜索,每次找到arcticle-category匹配时,将文章保存在哈希表中(您需要能够将文章缩减为唯一标识符)。

这可能是我在这里发布的最模糊的答案,你的问题可能过于广泛......如果你对此没有帮助,请告诉我,以便我可以考虑删除它以避免混淆与未来的读者。