我正在寻找有关将哪种数据结构用于 OCaml 中可扩展的超大型结构的建议。
通过很好的扩展,我不希望堆栈溢出或指数堆增长,假设有足够的内存。所以这几乎消除了标准库的 List.map 函数。速度不是什么大问题。
但对于初学者来说,假设我在 2^10 - 2^100 个项目的范围内操作。
我对结构只执行了三个“操作”:
(1) 结构子集上的映射函数,它增加或减少结构
(2)扫描结构
(3) 删除结构中满足特定标准的特定项目对
最初我使用的是常规列表,这仍然是非常可取的,因为结构在不断变化。通常在执行完所有操作之后,该结构最多要么在大小上翻倍(或大约一倍),要么缩小为空列表 []。也许翻倍从一开始就注定了我,但这是不可避免的。
无论如何,大约 2^15 --- 2^40 个项目开始引起严重问题(可能是由于我也使用了简单的列表函数)。该程序使用了 100% 的 cpu,但几乎没有内存,并且通常在一两天后堆栈溢出。
如果可能的话,我宁愿开始使用更多内存,以便继续在更大的空间中运行。
无论如何,如果有人有任何建议,将不胜感激。