【问题标题】:how to extract group of nodes which has a certain amount of common child nodes如何提取具有一定数量公共子节点的节点组
【发布时间】:2012-06-12 13:30:42
【问题描述】:

我正在解决一个测验,需要一些建议。

测验摘要如下:

分析书签服务(如delicious、digg...)的数据,提取出具有两个以上公共标签的url组

  1. 每个书签数据包含 1) 用户 ID、2) url 和 3) 一个标签数组。
  2. 与所有网址相比,所有标签的大小都相对较小。也就是说,人们为有限集合的网站添加书签
  3. 分配给 URL 的所有标签都不同
  4. 如果不同的用户为同一个 URL 添加了书签,则不应将它们分组。(但是,这是一个可选条件。您可以忽略 user_id 并假设所有 URL 都不同。)

示例:

siteA - [tag1, tag2, tag3]
siteB - [tag1, tag2, tag4]
siteC - [tag1, tag3, tag5]
siteD - [tag1, tag2, tag6]

以下两组网址将是结果

(siteA, siteB, siteD), (siteA, siteC)

因为 (siteA, siteB, siteD) 共享两个公共标签 (tag1, tag2) 并且 (siteA, siteC) 也共享两个公共标签 (tag1, tag3)。

-- 条件 3,4 并添加了一个示例。谢谢@btilly。

我的问题是

  1. 如何解决(或可以应用哪种算法)并且实际快速?
  2. 有没有可以用与这个问题类似的算法解决的代表性问题?

【问题讨论】:

  • 假设 2 个 URL 被每个给定标签 A 3 次,这算作超过 2 个常见标签吗?假设 URL x 和 y 共享超过 2 个公共标签,x 和 z 同上,但 y 和 z 没有,应该返回什么?
  • @btilly 1. 分配给 URL 的所有标签彼此不同。 2. 共享超过 2 个公共标签的 URL 应该被分组,并且组的列表将作为返回值。像(x,y),(x,z)。谢谢,我会添加一些示例来发布。
  • 那么user-id的作用是什么?
  • @btilly 你可以忽略user_id,但最初,如果不同的用户为同一个URL添加了书签,你不应该把他们分成组。

标签: algorithm tags graph-theory bookmarks data-analysis


【解决方案1】:

我会创建一个新的数据结构,它是按标签,具有该标签的 URL 的哈希。

然后,对于每一对标签,您可以取一个 URL 较少的标签,遍历它们,然后查找它是否在另一个标签中,从而生成共享该对标签的组。

如果您有n 标签,每个标签平均有m url,则需要O(n * m) 生成新的数据结构,O(n * n * m) 生成组。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-02-09
    • 1970-01-01
    • 2012-06-05
    • 1970-01-01
    • 2020-09-23
    相关资源
    最近更新 更多