我想我可以先排序數組,然後使用二分搜索。 所以O(n^2)。 這是正確的嗎?如果我想搜索arraylist中的元素,那麼Big-Theta是什麼?
回答
我想我可以先排序數組,然後使用二分查找。所以O(n^2)。那是對的嗎?
該方法的複雜度爲O(nlogn),O(logn)爲二進制搜索進行查找。總體O(nlogn)。
另一種方法是簡單的線性搜索查找(例如使用contains
或循環),它是O(n)。
如果您可以通過大量查找來分攤(整個列表)排序成本,則排序和使用二分查找只會提供更好的性能;即分類一次,搜索多次。
如果你想要比線性搜索更好,你需要使用一個數據結構,它允許你更新比O(nlogn)更好的搜索結果並且比O(n)更好地搜索結果。
最後...如果你這樣做:
- 排序初始arraylist。
- 使用二進制搜索來更新排序後的數組列表,以找到插入/刪除的正確點。
- 使用二進制搜索進行查找。
你將結束與O(N)更新操作(與O(nlogn)分選步驟攤銷)和O(logn)時間查找
總之,這是一個複雜的集替代品,最好的將取決於您的應用程序的預期行爲。
1 - 一個TreeSet
會這麼做(模數,它消除重複)。它在引擎蓋下使用紅黑二叉樹。如果你的數據實際上是一個集合,那麼你應該考慮HashSet
它給你O(1)
操作(除非散列碼功能是病態的)。
如果OP很樂意使用Set而不是List,爲什麼不推薦'HashSet'而不是'TreeSet'? –
@PaulBoddington - 好點。缺點是你不能按順序迭代。 –
- 1. 如果我在JSP中有html元素,那麼執行的順序是什麼?
- 2. 如果數組有超過10個元素......那麼是什麼?
- 3. ArrayList中的搜索元素
- 4. 刪除ArrayList中的元素後的結果是什麼?
- 5. 如何搜索Queue中的ArrayList元素?
- 6. 如果我想使用Microsoft.Web.Administration,那麼IISReset的等效物是什麼?
- 7. 如果我知道x,那麼搜索x + y = x * y的結果的最有效方法是什麼?
- 8. 我想不通這是什麼的iOS元素是Xcode的
- 9. 搜索,如果特定元素已經在一個ArrayList中
- 10. 如果s.rect.collidepoint(pos)「的含義是什麼,那麼在sprite_list中s是什麼?
- 11. 父元素搜索不能按想象的那樣工作
- 12. UISearchBar - 什麼是「搜索結果按鈕」?
- 13. 如果元素ID存在,那麼隱藏其他元素
- 14. 選擇/選項元素的默認「搜索」行爲是什麼?
- 15. 什麼是T-SQL語法如果這或那麼那還有什麼不做?
- 16. 爲什麼我的搜索顯示搜索結果?
- 17. jQuery如果元素是可見的,我做錯了什麼?
- 18. 什麼是XPath來搜索多個屬性和元素?
- 19. 如果「function.mysql-connect」出現在我的網站搜索數據中,那麼人們試圖破解什麼?
- 20. 我的搜索結果不一致?爲什麼是這樣?
- 21. 如果包含的塊是內聯的,那麼絕對定位元素的確切含義塊是什麼?
- 22. 搜索字典功能想出什麼
- 23. 如果我們想要在時間戳中支持毫秒,那麼正確的MSSQL數據類型是什麼?
- 24. 如果MPI是Message Passing Interface,那麼MPICH是什麼?
- 25. 如果指針是一個地址,那麼什麼是引用?
- 26. 爲什麼我的元素
- 27. 什麼是分面搜索?
- 28. 什麼是聲納搜索?
- 29. 如果我在數據結構中有相同的元素,那麼STL方法sort()會做什麼?
- 30. 爲什麼不是從我的ArrayList <Integer>中刪除所有元素?
或者你可以*不*排序數組,遍歷一次並在O(n)中完成。 – azurefrog