我正在尋找一種有效的方法來解決以下問題。基於三元組的高效匹配算法
表1是由一個原始的三重標識的記錄列表:
X | Y | Z
表2是由三套標識的記錄列表。一個XS,一個YS,一個ZS。 X,Y,Zs與列表1中的類型相同,因此可以直接相互比較。
Set(X) | Set(Y) | Set(Z)
對於列表1,我需要找到在列表2.這一切都在清單2中相對應的組中的項目,其中X,Y,發生來自列表1的所有的Z項目最好是通過一個例子證明:
列表1:
X1, Y1, Z1
列表2:
(X1, X2) | (Y1) | (Z1, Z3)
(X1) | (Y1, Y2) | (Z1, Z2, Z3)
(X3) | (Y1, Y3) | (Z2, Z3)
在上面,列表1中的項目將匹配列表2中的前兩個項目。第三個項目不匹配,因爲X1不會出現在X集合中,並且Z1不會出現在Z集合中。
我寫了一個功能正確的算法版本,但我擔心在較大的數據集上的性能。兩個列表都非常大,因此對列表1進行迭代,然後對列表2進行迭代,每個項目的效率都非常低。
我試圖通過將列表2中的每個項目去歸一化爲一個映射來構建索引,但是索引中每個項目的索引條目數量與項目子集的大小成正比。因此,它使用非常高的內存,並且還需要一些重要的資源來構建。
任何人都可以向我建議解決這個問題的最佳方法。我很高興能夠考慮內存和CPU的最佳解決方案,但要實現平衡會很好!
是否有任何排序,以一組表2中的項目? (即這些東西是否可以對他們有邏輯順序?) – Amber 2010-01-04 20:40:12
Gawd我很困惑。通常「|」意思是「或」而不是「,」和(X1,X2)是指2個元素而不是X1 |的元組X2。我的頭正在旋轉閱讀所有這些東西。 – 2010-01-04 20:41:19
每組中的典型元素數是多少?這只是你例子中的一小部分,還是可以有幾百個? – 2010-01-04 21:21:28