c++ - 搜索数据集的高效算法

标签 c++ algorithm search

给定几组元素,例如:

int set1[5] {5601, 935, 4153, 2195, 422};
int set2[5] {5601, 935, 23, 44, 422};
int set3[5] {4205, 935, 4153, 2195, 15};
int set4[5] {4205, 589, 4015, 44, 422};

在顺序很重要的地方(即 1、2、3 不同于 2、1、3),定位特定集合的有效算法是什么?例如,您想定位:

int value[5] {5601, 935, 23, 44, 422};

注意事项:

  1. 新集合的插入成本不是问题,因此它们可以存储在任何数据结构中,以优化搜索时间。

  2. 每个集合将包含 1 到 1,000,000 个元素(大约,并且将有 1 到 1000 个集合(同样,大约))。但是,对于任何给定的集合,元素的数量将始终相同集合的数量(例如,如果一个集合有 10 个元素,那么所有集合都将有 10 个元素)。

后续问题,我将在 C++ 中实现它,所以我有兴趣找出任何推荐的算法,它们是否存在于开源 C++ 库(最好是 STL、Boost 或 QT,但我也会考虑其他人)。

最佳答案

如果顺序很重要,那么您要查看的是序列,而不是集合。术语很重要。

由于您只考虑大约 1,000 个序列,因此将它们存储在哈希表中应该很容易,并且性能良好。我会考虑构建一个字符串来表示每个序列,例如,通过连接每个元素的字符串表示加上某种定界符,然后对其进行哈希处理。

关于c++ - 搜索数据集的高效算法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11764399/

相关文章:

c++ - 如何在C++中实现动态调整大小的堆栈?

c++ - 如何使用 Visual Studio 2015(企业版)构建 boost 版本 1.58.0

c++ - va_start - 32 位和 64 位构建之间的区别

algorithm - 如何将无向图转换为没有循环的有向图(Directed acyclic graph)

c++ - Qt Tcp Socket - 一次接收多个发送

algorithm - 将伪代码表示为 n 的函数

algorithm - 在随机集合中找到最接近的数字

Django 管理员搜索 : how to allow OR operator between search terms?

搜索容器列 jsp 在 liferay 中不起作用

linux - 如何使用 grep 和字符串在多个文件中搜索单个单词或短语?