1

什么数据结构适合表示和处理多对多对应关系。
我需要处理 2 个面向消息流的匹配;一个流中的实体可以匹配另一个流中的多个,反之亦然。
插入和检索不会很频繁,但对实体是否存在于数据域(“包含”)中的评估将非常频繁。
我对 python 特别感兴趣——但我想它同样适用于任何编程语言。
任何正确方向的指针表示赞赏。

4

1 回答 1

1

假设你有两组,a 和 b。a 中的元素映射到 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,而 1,2,3 都映射到另一个方向的 'a'(在本例中)。您可以将一个元素映射到任意数量的其他元素,反之亦然。

要查找域,您可以使用字典的键。在上面的示例中,您可以这样做:

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

要检查是否elem在您的域中(在以下示例中,如果elem在 set b 中),您只需执行

elem in b2a

检查元素是否在集合内非常快,这正是您想要的。

于 2013-06-19T01:51:15.467 回答