gpt4 book ai didi

Scala 组合函数不会终止

转载 作者:行者123 更新时间:2023-12-04 17:07:43 26 4
gpt4 key购买 nike

我需要在流/列表上使用 Scalas 组合方法为 30,000 个项目的列表生成组合

1 to 30000.toStream.combinations(2).size 

此功能永远不会完成。当我在 python 中尝试相同的操作时
r = list(range(1,30000))
z = itertools.combinations(r, 2)
%time sum(1 for _ in z)

操作在 26.2 秒内完成。

这里发生了什么?如何在 Scala 中生成一个非常大的列表的组合?

最佳答案

@TomasMikula 提供了一个替代方案,我很想知道为什么 combinations在生成结果方面效率低下。

使用 Mission Control 和 Flight Recorder 快速浏览一下就发现了问题:

Mission Control
CombinationItr迭代器调用 IndexedSeqOptimized.slice next() 的每次迭代. ArrayBuilder每次运行时都会创建一个新的构建器,它需要迭代的元素数量,这意味着它将分配 30,000 Array[Int] ,它们中的每一个都包含 n - 1 个元素,在 1 分钟的样本中总共产生 11.10GB。这会导致大量的 GC 压力,并且通常效率不高。

关于Scala 组合函数不会终止,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40614012/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com