我在数据库的 boost 共享内存中存储了大约 800,000 行数据。数据格式如下:
Id Color Length Size
1 1 2 4
2 3 4 5
3 2 2 0
4 1 2 4......and so on
颜色可以是 1-12、长度 1-4 和大小 1-5 的值,Id、Length、Color、Size 存储在共享内存中的 800,000 大小的单独向量中。所以有Id的Id向量,Color的Color向量等等。
我想在执行一些计算之前过滤数据。所以我想要颜色为 1、长度为 2、大小为 4 的数据,即上述情况下的第 1 行和第 4 行。是否有任何有效的方法来过滤数据而不使用 for 循环并遍历所有 800,000 张图像并检查条件?
现在我只是使用 mysql 语句来获取满足条件的数据的 ID。
"select Id from features_table where Color=1 and Length=2 and Size =4"
但是有没有更快的方法来做到这一点?还是我应该坚持这种方法?我正在寻找一种更快的方法,所以我不确定从数据库中获取 Id 是否会增加算法的执行时间。
在这种情况下,我可以考虑哪些其他选择?我读到了哈希表、B-Tree、二叉搜索树,我很困惑哪个适合这种情况。kd-tree 在这种情况下会有帮助吗?因为许多图像可能具有相同的颜色、长度和大小组合。我不确定 kd-tree 是否正确。我在用于 kd-tree 的 opencv 中阅读了有关 FLANN 的信息,在这种情况下是否有任何示例或资源可能有用?或者是否有任何内置的 C++ 库?