【问题标题】:What algorithms count frequencies of common elements in a collection of sets?什么算法计算集合中公共元素的频率?
【发布时间】:2008-12-17 21:03:31
【问题描述】:
我想了解有助于识别重叠数据集之间的共性和差异的算法信息。
以stackoverflow的标签系统为例:
假设这个问题被赋予了 5 个标签。假设有 1000 个其他问题至少具有这些标签之一。在这 1000 个问题中,有多少问题具有我的原始帖子所没有的共同标签?
另一种更简单的描述方式是自动建议标记系统:
“您使用 [5 个我选择的标签] 标记了您的问题。其他类似的问题被标记为 [可能感兴趣的标签列表]。其中 [可能感兴趣的标签列表] 是经常出现的标签不在我的原始列表中。
如果可能的话,用 c# 编写代码示例:)
【问题讨论】:
标签:
algorithm
complexity-theory
【解决方案1】:
查看 Wager-Hamming 距离。这是在字符串上定义的汉明距离,即将一个字符串转换为另一个字符串所需的编辑操作数。
您还可以潜在地使用等价类的偏序并设置包含:当问题 A 和 B 具有完全相同的一组标签直到重新排序时,它们是相等的,设置并集、设置差异和设置交集然后定义 比较的偏序。
【解决方案2】:
我不知道任何特定的算法或数据结构,但我可以建议一种基本的处理方法:
假设:每个条目有五个唯一的标签。
- 收集包含五个标签中任意一个的所有条目(无重复)。
- 对于列表中的每个条目,为每个标签使用关联数组(哈希表),递增值。
- 对于数组中的每个条目,将标签名称附加到该数组的条目索引中。
在(草率的)伪代码中,使用两个循环(如果可能):
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
这应该会产生一个连接标签名称的稀疏数组(好吧,我没有包含分隔符,但嘿,它是伪代码 :-)。保留最高数字,然后向后迭代以获得最佳建议。
(缓存要优化,但要注意更新)
保罗。