【发布时间】:2013-03-28 05:28:52
【问题描述】:
给定 n 组不同大小的整数。每个集合也可以包含重复项。我必须找到集合的交集。如果一个元素在所有集合中多次出现,则应将其添加到结果中。
例如,假设有三个集合 {0,5,5,3,4} {5,2,3,5,6} {1,3,5,5,6}。给定集合的交集应该是 {3,5,5}
我的做法是:
1.对数组进行排序。
2.从最小数组开始比较每个元素并更新计数。
有没有更有效的方法来找到交叉点?
【问题讨论】:
-
这似乎非常接近最佳状态。
-
在数学上,集合不包含重复; multisets 或 bag 可以包含重复项。
-
对于多核,也许是并行插入排序(当然,您的数据必须足够大,才值得这样做)。
-
{0,5,5,3,4}、{1,3,5,5,6} 和 {3,5,5} 不是集合。如果您真的处理集合,最有效的实现是使用位数组。
-
“有没有更有效的方法来找到交叉点?” - 确实是的;看我的回答。