2015-11-10 20 views
1

那麼是否有可能編寫一個返回對象而不是索引的二進制搜索的實現?我需要這樣,整個任務完成在O(logn)時間,而不是花更多的時間,然後調用collection.get()後,我只得到索引,所以複雜度,然後變成O(nlogn)實現返回對象而不是索引的二進制搜索?

+3

爲什麼調用'get'使複雜度O(nlog(n))? – user2357112

+0

它是什麼類型的集合? –

+0

@ user2357112因爲您連續解析集合以便獲得我猜測的對象。這就像你有一個指向項目的指針,只是它在集合中的索引 –

回答

2

二進制搜索將需要一個隨機訪問容器。如果您知道該索引,則應該可以訪問O(1)中的項目。如果情況並非如此,那麼二進制搜索首先是錯誤的算法。

在這種情況下,您使用的是一個ArrayList,它是一個數組的封裝,確實提供了高效的隨機訪問。

1

你不會在任何事情做的二進制搜索,但一個O(1)隨機存取集合:否則搜索時間會遠遠超出O(日誌(N))O(1)集合中不存在所謂的「額外時間」:無論如何,您的替換必須執行相同的步驟。