【问题标题】:Graph algorithm to find the most likely ancestor of a node图算法找到一个节点的最可能的祖先
【发布时间】:2018-05-25 09:54:57
【问题描述】:

我正在研究维基百科类别图 (WCG)。在 WCG 中,每篇文章都关联到多个类别。 例如,文章“Lists_of_Israeli_footballers”链接到多个类别,例如:

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

现在,如果您回溯类别树,您可能会发现很多路径都爬到“足球”类别,但也至少有一条路径可以通往“科学”类别。

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

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

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

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

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

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

我的问题有现成的解决方案吗?接受所有建议。

【问题讨论】:

  • 那么如果关于以色列足球运动员的文章匹配到科学,那会是误报吗?我还不清楚您正在寻找的算法的确切规格是什么
  • @Glubus 抱歉。我还在修改我的最后一篇文章,这是我的一个坏习惯。希望现在更清楚了

标签: java algorithm performance graph-theory wikipedia


【解决方案1】:

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

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

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

如果您从 wikipedia 获得这些文章,您可能会在整个树中运行相当长的时间,但在我看来,这似乎是您唯一的选择。

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

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

【讨论】:

    猜你喜欢
    • 2022-11-17
    • 1970-01-01
    • 1970-01-01
    • 2010-09-17
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-10-07
    • 2011-09-01
    相关资源
    最近更新 更多