0

Invert Index のマップに巨大なデータを格納する必要がありますが、私のデータは非常に巨大であり、Map が大きくなるほど遅くなることがわかります。1 から数十億をカバーする、非常にまばらなインデックスを持つ Map コンテナについて話しています。

私のプログラムの 1 回の繰り返しで、いくつかの数値が計算され、多くのキー値 (数千になる可能性があります) が格納されます。これは、Map のサイズが繰り返しごとに約数千増加することを意味します。最初の数回の反復では 20 秒ほどかかりますが、70 回目の反復では 100 秒ほどかかります。約 5000 セットのデータがあります。つまり、これらすべてのデータに対して 5000 回の反復が必要です。各反復の時間が指数関数的に増加するため、計算に数日かかるため、これは受け入れられません。

この場合、私にできることはありますか?

4

1 に答える 1

0

代わりに Java HashMap 実装を使用してみることができます。Matlab が Java ルーチンにアクセスするたびに smkall のオーバーヘッドが発生しますが、通常は Java ルーチンの方が柔軟性が高くなります。例えば:

%Create
map = java.util.HashMap(5e6);  %Initialize with room for 5 million entries

%Add data
map.put('key1','value1');
map.put(2,20);

%get data
out = map.get('key1'); %Get a value
map.containsKey(2);    %Check for existance of a key

これは機能します。しかし...それが速くなるかどうかは明らかではありません。テストだけが教えてくれます。

また、この方法で開発していると、おそらく時折エラーが発生します。

Java exception occurred:
java.lang.OutOfMemoryError: Java heap space
    at java.util.HashMap.<init>(Unknown Source)
    at java.util.HashMap.<init>(Unknown Source)

これが発生した場合、 を使用clear javaして Java 常駐情報をパージするか、最初の HashMap に割り当てるスペースを減らすことができます。

于 2013-02-08T16:27:14.057 に答える