如何提取具有一定数量的公共子节点的节点组

时间:2012-06-08 13:21:20

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

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

测验摘要如下:

  

书签服务的Analayze数据(如美味,挖掘...)并提取具有两个以上常用标签的网址组

     
      
  1. 每个书签数据包含1)user-id,2)url,以及3)标签数组。
  2.   
  3. 与所有网址相比,所有标签的尺寸都相对较小。也就是说,人们为有限集的网站添加书签
  4.   
  5. 分配给网址的所有代码都不同
  6.   
  7. 如果不同的用户为同一个网址添加了书签,则不应该将其分组。(但是,这是一个可选条件。您可以忽略user_id并假设所有网址都不同。)
  8.   

示例:

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

以下两组URL将是结果

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

因为(siteA,siteB,siteD)共享两个常见标记(tag1,tag2)和(siteA,siteC)也共享两个常见标记(tag1,tag3)。

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

我的问题是

  1. 如何解决(或者可以应用哪种算法)并且实际上很快?
  2. 是否有任何类型的代表性问题可通过类似的算法解决?

1 个答案:

答案 0 :(得分:1)

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

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

如果您有n个标记,每个标记平均有m个网址,则O(n * m)生成新数据结构,O(n * n * m)生成网址