需要建议在matlab中为一个巨大的反转索引固定Map

时间:2013-02-08 16:12:30

标签: algorithm matlab map inverted-index

我需要在地图中存储一个巨大的数据用于反转索引,但我的数据非常庞大,我看到随着地图变得越来越大,它变得越来越慢。我们正在谈论一个具有非常稀疏索引的Map容器​​,其容量为1到10亿。

在我的程序的一次迭代中,将计算一些数字,以获得要存储的许多关键值(可能是数千个) - 这意味着在每次迭代中,Map的大小将增加大约数千个左右我发现在前几次迭代中,需要20秒左右,但是在第70次迭代时,需要100秒左右。我有大约5000组数据 - 我需要5000次迭代才能获得所有这些数据。随着每次迭代的指数级增长,计算需要数天,这是不可接受的。

在这种情况下我能做些什么吗?

1 个答案:

答案 0 :(得分: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分配更少的空间。