什么算法计算集合中常见元素的频率?

时间:2008-12-17 21:03:32

标签: algorithm complexity-theory

我想了解有助于识别重叠数据集之间的共性和差异的算法信息。

使用stackoverflow的标记系统作为示例:

假设这个问题已经给出了5个标签。假设有1000个其他问题至少有一个这样的标签。在这1000个问题中,有多少这些问题与我的原始帖子没有相同的标签?

另一种更简单的描述方式是自动建议标记系统:

“您使用[我选择的5个标签]标记了您的问题。其他类似的问题被标记为[可能感兴趣的标签列表]。其中[可能感兴趣的标签列表]经常出现标签在我的原始列表中。

c#中的代码示例(如果可能):)

2 个答案:

答案 0 :(得分:1)

调查Wager-Hamming距离。这是在字符串上定义的汉明距离,它是将一个字符串转换为另一个字符串所需的编辑操作数。

您还可以使用等价类的部分顺序并设置包含:当问题A和B具有完全相同的标记集直到重新排序时,它们是相等的,设置并集,设置差异和设置交集然后定义<&的偏序和&gt;比较。

答案 1 :(得分:0)

我不知道任何特定的算法或数据结构,但我可以建议一个基本的处理方法:

假设:每个条目都有五个唯一标记。

  • 收集包含五个标签中任何一个标签的所有条目(无重复)。
  • 对于列表中的每个条目,为每个标记使用关联数组(哈希表),递增值。
  • 对于数组中的每个条目,将标记名称附加到该数组的条目索引中。

在(草率)伪代码中,使用两个循环(如果可能):

for each entry
    if any tag in original_tags
        tag_list[tag]++
end

for next in tag_list
    tag_count[tag_list[next]] += next
end  

这应该产生一个稀疏的连接标签名称数组(好吧,我没有包含分隔符,但是它是伪代码:-)。保持最高编号,然后向后迭代以获得最佳建议。

(缓存优化,但要注意更新)

保罗。