我有一个四维阵列,其中的值是单调的。如何有效地搜索价值。在四维阵列搜索元素具有特殊性能
3
A
回答
1
如果N不超过10000,那么不明白为什么你不能使用unordered_set。然后做一个单一的查找。如果每个维度都有重复值,那么您需要以某种方式跟踪该维度。但是,我不知道任何为C实现unordered_set的代码。因此,您可能必须使用C++。
如果您不能使用unordered_set,则由于数据是按排序顺序为每个维度,你也可以使用每个维度的二进制搜索。这意味着每个维度平均查找不超过15个值 - 假设每个维度中的元素总数小于16K。 15个查找* 4个维度= 60个查找。这太慢了吗?其他
一个改进可能是创建从4个维度一个大排序和独特的阵列和搜索一个代替。这将产生大约17次查找(假设< = 64K元素).vs。 60,这是3.5倍以上的速度。但是,这也取决于值的添加或删除的频率以确定它是否真的会更快 - 因为您必须在单个表中添加和删除它们。另外,不要忘记使用表格来跟踪重复值 - 如果适用的话。
如果值是比较小的整数 - 说十亿或更少,那么你可能能够使用一个位映象方案。位图方案比每个维度使用unordered_set要快。一个字节数组可以用作位图。在位图中设置的值意味着该值存在。例如,如果该值为零,则将设置位零。如果该值为3,则会设置位2。如果该值为5,则会设置位4等。因此,需要使用100MB来映射所有值为10亿(2^30)的值。如果每个维度中都存在重复值,那么您需要跟踪该维度,以便从维度中删除值时 - 除非它不存在于其他维度中,否则不会从位图中删除。如果您的值是浮点数,那么如果有效数字的总数为< = 9,则可以将它们翻译为整数。如果这些值是字符串或结构体,那么如果可以找出一种方法,则位图方案可能仍然有效将其翻译为唯一的整数。
相关问题
- 1. 弹性搜索阵列元素的查询字符串搜索
- 2. 在弹性搜索特殊字符
- 3. 阵列搜索功能斯威夫特
- 4. HTML元素阵列 - 多维
- 5. 使用线性索引映射到四维阵列
- 6. 如何在多维搜索阵列
- 7. 选择具有特殊字符的列表元素
- 8. 麻烦与四维阵列
- 9. 在二维阵列的第二个元素上的红宝石插值搜索
- 10. PHP搜索多维数组的值,然后将这个元素在阵列
- 11. 线性搜索阵列
- 12. 在阵列中搜索特定值
- 13. 通过二维阵列搜索多次
- 14. 搜索名称和弹性搜索中的特殊字符
- 15. 四元搜索算法
- 16. 搜索在阵列
- 17. 搜索在阵列
- 18. 搜索在阵列
- 19. 搜索元素列表
- 20. 中的R阵列搜索元素和它们的索引
- 21. 加入特殊的搜索功能,以列表视图
- 22. 使用R从矩阵搜索元素
- 23. 使特定元素是先在阵列
- 24. 如何获得具有特殊性能的GET-ADUser便有
- 25. PHP:ASORT阵列通过键具有特殊字符
- 26. 初始化C中的对象阵列++具有特殊值
- 27. 在firebase数据库中搜索具有特定键值的元素对象
- 28. 具有特殊属性的二叉树
- 29. jQuery的:具有特殊属性
- 30. 具有特殊属性的瓷砖
无论哪种方式,你至少在O(N^3)复杂性。实现一个全面的搜索,看看它是否有合理的运行时间。如果不是这样,即使您将算法改进了2,3,5倍 - 速度也不够快。 – Dariusz 2014-09-23 11:41:04
通过微不足道的我的意思是O(N^3日志N),其中有3个diemensions蛮力和二进制搜索最后一个。它应该很快实施。我认为可以实现O(N^3)的复杂性(因为可能为N^2获得O(N + M)),尽管我想不出一种算法能做到这一点。 – Dariusz 2014-09-23 17:23:53
** N **有多大?如果它足够小,也许你可以使用散列表(值,位置)。 – 2014-09-23 21:30:06