我有三個大型矢量集:A,B1和B2。這些集存儲在磁盤上的文件中。對於A的每個向量a,我需要檢查它是否可以表示爲a = b1 + b2,其中b1來自B1並且b2來自B2。向量有20個組件,所有組件都是非負數。如何使這個向量枚舉代碼更快?
如何我現在解決這個問題的(僞):
foreach a in A
foreach b1 in B1
for i = 1 to 20
bt[i] = a[i] - b1[i]
if bt[i] < 0 then try next b1
next i
foreach b2 in B2
for i = 1 to 20
if bt[i] != b2[i] then try next b2
next i
num_of_expansions++
next b2
next b1
next a
我的問題:
1.如何使更快,如果任何想法?
2.如何使它平行?
3.對於B1,B2,...,Bk,k> 2時的問題1,2?
散列呢?這並沒有完全想到,但我在想:(1)散列b1 + b2的所有組合,並將總和b1和b2放入散列表中。然後檢查A的每個元素。如果它在表格中,則抓住b1 + b2組合。不知道你會做什麼,如果你需要索引...哈希? – 2011-05-08 03:20:30
集合有多大?你能從磁盤讀取所有的文件,然後將它們保存在內存中嗎? – svick 2011-05-08 12:47:42
@mattkc:謝謝,這是要考慮的事情。 @svick:set A擁有數百萬個向量,每個向量包含數十萬個向量。是的,我可以將它們加載到內存中,從而加快搜索速度。 – Leo 2011-05-08 15:59:08