【发布时间】:2021-03-10 04:28:20
【问题描述】:
我已经问过类似的问题here。但是,我误判了我的具体案例的规模。在我给出的示例中,地图中只有 4 个键。我实际上正在处理超过 10,000 个键,它们被映射到不同大小的列表。所以给出的解决方案是正确的,但我现在正在寻找一种更有效的方法。
说我有:
val myMap: Map[Int, List[Int]] = Map(
1 -> List(1, 10, 12, 76, 105), 2 -> List(2, 5, 10), 3 -> List(10, 12, 76, 5), 4 -> List(2, 4, 5, 10),
... -> List(...)
)
想象一下(...) 有超过 10,000 个键。如果它们各自列表的交集大小为>= 3,我想返回一个列表列表,其中包含一对键及其共享值。
例如:
res0: List[(Int, Int, List[Int])] = List(
(1, 3, List(10, 12, 76)),
(2, 4, List(2, 5, 10)),
(...),
(...),
)
我已经为此困扰了几天,因此非常感谢任何帮助。提前谢谢!
【问题讨论】:
-
你认为 O(n log n) 足够高效吗?
-
@BitTickler 据我了解,O(log n) 在处理一组大量数据时最有效。但是,我不一定要寻找最有效的答案,只是比我原来的帖子更有效的答案。所以,我认为 O(n log n) 就足够高效了。
-
任何输入列表都可以包含重复项吗?
-
@BitTickler 不。每个输入列表中的每个值都是唯一的。
-
密钥对
combinations要求是增加计算负载的原因。如果可以选择在Apache Spark(利用分布式计算能力)上处理它,那将是相当直接的。
标签: scala functional-programming higher-order-functions