随机选择两个集合,两个集合都包含不同的键(一个键可能属于多个集合,一个集合永远不能包含重复的键)。
返回一个整数,表示属于两个集合的键数。
例如 intersect({1,2,3,4},{3,4,5}) 返回 2 。
我只需要十字路口的大小。我不需要确切知道十字路口有哪些钥匙。
是否有任何数据结构在少于 O(n) 的时间内支持这种操作?
编辑:
读取数据确实需要 O(n) time,但这不会导致您不能在少于 O(n) time 的时间内执行交集操作的结论。
想象这个场景:
我有 N 套,每套包含 100 个钥匙。我读了它们,那是 N*100 操作。现在我想知道女巫对集合有最大的交集,即 O(N²) 交集操作。所以我想降低交集操作的复杂性。我真的不知道关心读取和构造集合需要多少时间,最多 N*100,这与 O(N²) 交集操作相比没什么。
请注意,您无法通过小于 O(N²) 的交集运算找到具有最大交集的集合对,我可以证明这一点。您必须执行所有的交集运算。
(他的基本思想是,让我们想象一个完整的图,有 N 个顶点,每个顶点代表一个集合,Nx(N-1)/2 个边,每个代表连接对的交点。现在给每个边一个非你想要的所有负重(代表交叉点大小),我总是可以构造 N 个集合满足那些 Nx(N-1)/2 边权重。这证明了我的主张。)