Eri*_*ric 5 performance matlab key vector hashmap
我有一个正在查看许多元素的函数.每个元素都是8x1列向量的形式.向量中的每个条目都是一个小于1000的整数.每次看到这样的向量时,我都想将它添加到"已经看过"的向量列表中,然后检查该向量是否已经在此列表中.该函数将检查约100,000个这样的向量的顺序.
最初我尝试使用ismember(v', M, 'rows'),但发现这很慢.接下来我尝试了:
found = containers.Map('KeyType', 'double', 'ValueType', 'any');
Run Code Online (Sandbox Code Playgroud)
然后每次我检查一个新的向量v,计算:
key = dot(v, [1000000000000000000000 1000000000000000000 1000000000000000 ...
1000000000000 1000000000 1000000 1000 1]);
Run Code Online (Sandbox Code Playgroud)
然后检查isKey(found, key).如果密钥不在容器中,那么found(key) = 1.
这似乎是一个非常糟糕的解决方案,即使它的运行速度要快得多ismember.任何帮助/建议将不胜感激.
编辑:也许用它mat2str来生成密钥更好,而不是这个傻点产品?
你的主意很好。但你需要找到更好的哈希函数。使用一些标准的哈希函数。您希望看到“sha”算法的实现:
http://www.se.mathworks.com/matlabcentral/fileexchange/31795-sha-algorithms-160224256384-512
如果您发现 sha 算法很慢,那么您可能可以采取一些技巧。我现在能想到的一个如下:
这可能应该有效,但你必须检查一下。