OCamlの非常に大きな構造のためにどのようなデータ構造を使うべきかについての提案を探しています。ocaml非常に大きなデータ構造の提案
スケールでは、十分なメモリがあると仮定して、スタックオーバーフローや指数関数的なヒープの成長を望んでいません。これにより、標準libのList.map関数がほとんどなくなります。スピードはそれほど問題ではありません。
しかし、私は2^10-2^100個の領域で操作しているとしましょう。
Iは、構造上の実行3つだけ「操作」がある:
(1)構造のサブセットにマップ関数を、(2)構造を走査た増加または減少のいずれかの構造
が
(3)特定の基準を満たす構造内のアイテムの特定ペアの除去
構造は常にCであるため、もともとは、依然として非常に望まれており、定期的なリストを使用しました。吊るす。通常、すべての操作が実行された後、構造体は最大でサイズが2倍(またはその付近で)か、または空のリスト[]に縮小されます。多分倍増は私を最初から苦しめるでしょうが、やむを得ないことです。
いずれにしても、約2^15 --- 2^40個のアイテムが重大な問題を引き起こします(恐らく私が使用していた素朴なリスト機能によるものかもしれません)。プログラムはCPUの100%を使用しますが、メモリはほとんどありません。通常、1日か2日後にスタックオーバーフローします。
可能であれば、より大きなスペースで操作を続けるために、もっと多くのメモリを使い始めることをお勧めします。
とにかく、誰かが何か提案があれば、それは大歓迎です。
「十分なメモリ」とは何を意味するのかよくわかりません。 2^100は10^30です。それぞれの「アイテム」がちょうど1ビットであれば、あなたはまだ125テラバイトテラバイト話しています。 –
ああ、その時点で、ずっと前に、おそらく遅延リストやシーケンスを電池で行う必要があり、明らかにメモリ全体を構造体に格納することができませんでした。しかし、私は何を使うべきか分からないので、私は頼んでいるのです。 – mbunit
実際には非常に大きい:2^100は10^30であり、2^10000は10^3000です。比較のために、宇宙に約10^24の星があり、10^80の原子があります。あなたはその数字について確信していますか? –