2012-06-08 33 views
2

我正在解决测验并需要一些建议。如何提取具有一定数量的常见子节点的节点组

测验的总结如下:

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

  1. 每个书签数据包含1)user-id,2)url和3)一组标签。
  2. 与所有网址相比,所有标签的尺寸相对较小。即人们设置了有限的书签网站
  3. 分配给某个网址的所有标记都不相同
  4. 如果不同用户为同一个网址添加了书签,则不应将其设置为无效(但这是可选条件。可以忽略USER_ID并假设所有的URL是不同的)

例:

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

以下两组URL会是结果

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

因为(站点A,站点B,选址)共享两个共同的标签(标签1,标签2)和(站点A,思泰科)也有着两个共同的标签(标签1,标签3)。

- conditon 3,4和一个例子添加。谢谢@ btilly。

我的问题是

  1. 如何可以解决(或算法可以应用),特别是快?
  2. 是否有任何类型的代表性问题,可以通过类似的算法解决这个问题?
+0

假设2个URL已经被赋予了3次标签A,那么这是否会计为2个以上的通用标签?假设URL x和y共享2个以上的通用标记,并且同上x和z,但y和z不相同,应该返回什么? – btilly

+0

@btilly 1.分配给一个URL的所有标签都是互不相同的。 2.共享超过2个共同标签的URL应该分组,并且组的列表将成为返回值。如(x,y),(x,z)。谢谢,我会添加一些例子发布。 – nephilim

+0

那么'user-id'的作用是什么? – btilly

回答

1

我会创建一个新的数据结构,这是通过标记,具有该标记的URL的散列。

然后,对于每一对标签,你可以采取一个较少的URL,通过它们,并做一个查找,看看它是否在另一个,生成共享这对标签的组。

如果你有n标签,平均每个标签m的网址,它会采取O(n * m)生成新的数据结构,并O(n * n * m)生成组。

相关问题