数据检索和索引
Data retrieval and indexing
我在数据库的boost共享内存中存储了大约800000行数据。数据的格式为:
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分别存储在共享内存中,大小为800000。所以有Id向量表示Id,Color向量表示Color等等
我想在进行计算之前先过滤数据。所以我想要颜色为1,长度为2,大小为4的数据,即上面情况下的行1和4。有没有任何有效的方法来过滤数据,而不使用for循环,检查所有80万张图像并检查条件?
现在我只是使用mysql语句来获取满足条件的数据的Id。
"select Id from features_table where Color=1 and Length=2 and Size =4"
但是有没有更快的方法呢?还是应该坚持这种方法?我正在寻找一种更快的方法,所以我不确定从数据库中获取Id是否会增加算法的执行时间。
在这种情况下,我还可以考虑其他哪些选择?我读过哈希表、B树、二进制搜索树,我很困惑哪一个适合这种情况。kd-tree在这种情况下会有帮助吗?因为许多图像可能具有相同的颜色、长度和大小组合。我不确定kd-tree是否是正确的做法。我在opencv中读到了用于kd-tree的FLANN。在这种情况下,有什么例子或资源可以帮助吗?或者有任何内置的c++库吗?
听起来你只做过一次。如果是这种情况,那么创建包含所有元素的任何数据结构都将比测试每个元素慢。请确保在其中任何一个元素失败后继续下一个元素(在C/C++中,如果语句的color==1&&length==2&&size==4将自动为您进行短路评估)。将数据读取到缓冲区中,而不是一次读取一行或其他内容。向零循环,并在解析数组索引时使用指针来避免隐式乘法。除此之外,没有想到任何优化。
除了检查每个数据项并根据复杂度为O(n)的过滤器进行检查之外,没有更快的方法来过滤数据。您必须至少访问一次每个项目。同样的道理也适用于从你的数据中构建任何类型的数据结构,如树、哈希表等。如果你只对过滤一次数据感兴趣,只需查看它并获得过滤列表。如果你需要执行其他数据操作,你应该考虑你将需要什么操作(插入、删除、排序等),并根据你的预期用途选择最有效的数据结构。
- 数组索引的值没有增加
- 芬威克树(BIT).找到具有给定累积频率的最小索引,单位为 O(logN)
- 查找最接近的大于当前数字的数字的索引
- 使用VerQueryValue检索应用程序的文件描述
- 在C++中调整向量中的索引
- 重载元组索引运算符-C++
- 给定一个向量,如何找到该向量的所有子集和的原始索引
- 为std::string的某个索引赋值
- 并行用于C++17中数组索引范围内的循环
- 是否可以从格式字符串中检索"width"
- 使用 pqxx 将 std::vector 存储在 postgresql 中,并从数据库中检索它
- 跟随整数索引列表的自定义类迭代器
- 如何在for循环中包含两个索引值的测试条件
- D3D11-将混合权重和索引传递到顶点着色器
- 如何检索由带通配符的字符串索引的对象
- 为什么我不能检索变体的索引并使用它来获取其内容?
- C++使用 min_element 或 max_element 时检索向量中的索引值
- 数据检索和索引
- CGAL - 在德劳奈三角测量后检索顶点索引
- 从 QCompletion 弹出窗口中检索 QComboBox 索引