私は、OCaml の非常に大規模な構造に対して、どのような種類のデータ構造を使用するかについての提案を探しています。
十分なメモリがあると仮定すると、適切にスケーリングすることで、スタック オーバーフローや指数関数的なヒープの増加は望ましくありません。したがって、これにより、標準ライブラリの List.map 関数がほとんどなくなります。速度はそれほど問題ではありません。
しかし、まず、2^10 から 2^100 アイテムの領域で作業していると仮定しましょう。
構造に対して実行する「操作」は 3 つだけです。
(1) 構造を増加または減少させる、構造のサブセットに対するマップ関数
(2)構造のスキャン
(3) 特定の基準を満たす構造内のアイテムの特定のペアの削除
もともと私は通常のリストを使用していましたが、構造が常に変化しているため、これは依然として非常に望ましいものです。通常、すべての操作が実行された後、構造体のサイズはせいぜい 2 倍 (またはその程度) になるか、空のリスト [] に縮小されます。おそらく、倍増は最初から私を運命づけますが、それは避けられません.
いずれにせよ、約 2^15 --- 2^40 個のアイテムが深刻な問題を引き起こし始めます (おそらく、私が使用していた単純なリスト関数も原因です)。プログラムは CPU を 100% 使用しますが、メモリはほとんど使用せず、通常は 1 日か 2 日後にスタック オーバーフローが発生します。
より大きなスペースでの操作を継続するために、可能であれば、より多くのメモリの使用を開始したいと考えています。
とにかく、誰かが何か提案があれば、それは大歓迎です。