多谓词的数据结构和搜索算法

时间:2010-07-30 16:46:39

标签: algorithm search data-structures language-agnostic

有没有人知道任何用于搜索多个谓词的良好数据结构和算法。

e.g。假设我有一组tcp头数据(假设没有重复)。如果我通过src ip搜索列表的tcp头,我可以通过src IP对该集进行排序并进行二进制搜索。

如果我想从匹配所有src / dst ip / port的集合中找到tcp标头,我应该使用哪种数据结构/算法? (除了遍历所有集合之外)。

4 个答案:

答案 0 :(得分:3)

这正是数据库供应商多年来所处理的事情。如果您要通过src / dst IP /端口一致搜索,您可以将其用作排序条件,并直接或多或少地直接查找。

否则,典型的方法是按一个字段对数据进行排序,并为其他字段构建索引。然后,您可以在每个索引中执行二进制搜索,以查找符合该字段条件的记录集。这些集合的交集将是您正在寻找的记录。

当然,如果您愿意,也可以减少索引的数量,因此(例如)您可以使用索引来获取具有正确的源和目标IP的一组记录,然后只扫描它(可能)相当小)设置为获得具有正确端口号的那些。

答案 1 :(得分:1)

我建议在公共字段上单独编制索引,然后使用合并连接策略来满足多个字段的查询。

您还可以使用(a,b,c)索引查询(a,b)或仅查询(a),因此明智地选择索引可以避免合并连接。

答案 2 :(得分:0)

也许您可以应用kd-trees作为获得有效多键搜索的方法?我不能声称对你要解决的具体问题了解多少,但是询问用多个键进行搜索,似乎它可能适用。

答案 3 :(得分:0)

在C ++中,Boost提供了一种称为多索引容器的东西。它本质上是一组哈希表,每个键一个,有一些代码可以使它们保持一致。