2013-06-19 74 views
1

什麼數據結構適合於表示和處理多對多的對應關係。
我需要處理兩個面向消息流的匹配;一個流中的實體可以與另一個流中的多個匹配,反之亦然。
插入和檢索不會很頻繁,但是評估一個實體是否存在於數據域(「包含」)中是相當頻繁的。
我特別感興趣的python - 但我想它同樣適用於任何編程語言。
任何正確方向的指針表示讚賞。許多數據結構

回答

1

假設你有兩套,a和b。映射到b中元素的元素,反之亦然。

您可以使用圖形類的數據結構(鄰接表)

# this maps elements in a to elements in b (elements of a are the keys) 
# each element of a maps to several elements of b (as a list) 
a2b = { 
     'a' : [1,2,3] 
     } 

# this maps elements in b to elements in a (elements of b are the keys) 
# each element of bmaps to several elements of a (as a list) 
b2a = { 
     1 : ['a'], 
     2 : ['a'], 
     3 : ['a'], 
     } 

你基本上列表的字典。 'a'從左到右映射到1,2,3,並且所有映射到另一個方向上的'a'(在本例中)。您可以將元素映射到任意數量的其他元素,反之亦然。

要查找域,可以使用字典的鍵。在上面的例子中,你可以這樣做:

>>> print 1 in b2a 
True 
>>> print 'a' in b2a 
False 

要檢查是否elem是您的域(在下面的例子中,如果elem是集B),你只是做

elem in b2a 

察看一個元素在一個集合裏面非常快,這就是你想要的。

+1

'1在b2a'已經很好了,不要打擾建立一套。 – liori

+0

+1謝謝!這樣更好,我喜歡它! – jh314