我有一個四維陣列,其中的值是單調的。如何有效地搜索價值。在四維陣列搜索元素具有特殊性能
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