回答
不需要。如果沒有關於陣列的更多信息,這是不可能的。
您可以做的最好的是O(n)
,它從左向右遍歷數組並檢查每個項目。
如果數組排序,則需要兩次檢查,兩端都會有一個錯誤值,即O(1)
。
由矛盾的一個常見的證明:
假設算法工作正確。然後,在檢查少於所有元素之後,該算法產生正確的答案。現在假設算法只看到true
s,它會得出答案x。現在只改變值的算法有而不是檢查,我總是可以構造一個算法失敗的測試用例。因此,該算法必須檢查(未排序)布爾數組的所有元素以確定是否全部爲真。
無論你做什麼,你都必須檢查所有的值,以確保沒有錯誤的價值。線性時間,平均n/2次檢查。
這個答案對布爾數組中值的分佈做出了假設,它的好處遠不止於此。此外,假設自變量的概率爲0.5,則必須平均檢查少於n/2個元素的方法。 – ThreeFx 2016-10-30 22:23:57
通常情況下,答案是「否」:除非您知道有關數組項目的順序,否則不能通過數組搜索小於O(N)
的單個值。
例如,如果數組排序,您可以在O(log N)
中找到正確的位置。
對於具有所有false
S,如果有的話,在開始boolean
陣列被排序裝置,以及所有true
S,如果有的話,在結束。如果是這種情況,您可以使用二分查找找到對數時間的「分界點」。
Nit:對於二進制排序數組,它只是檢查第一個和最後一個元素,或O(1)。 – user2864740 2014-10-06 20:13:27
它是排序。它從0運行到n-1。 – Vimzy 2014-10-06 20:14:02
@Vimzy這些是數組的索引。排序涉及數組中的值。 – 2014-10-06 20:15:37
- 1. 運行時間爲O(logn)的二進制數除算法
- 2. 時間複雜度:O(logN)或O(N)?
- 3. 通過O(logn)訪問和O(logn)插入實現數據結構?
- 4. O(logn)^ 2時間表現的示例
- 5. O(logn)時間和算法關係
- 6. 是O(LogN)== O(3LogN)?
- 7. 在O(logn)時間使用STL堆執行減少鍵
- 8. 在O(logn)O(logn)刪除和索引訪問的數據結構
- 9. O(logn)中從0〜N的位計數
- 10. 查找第n個fib數,在O(logn)
- 11. 通過JNI運行時間
- 12. 如何在O(logn)時間查找5個排序列表的中位數?
- 13. 查找O(nlogn)和O(logn)附加空間中的最小正數
- 14. 比較O((logn)!)和O(2^n)
- 15. BIg O符號:n * logn
- 16. 如何刪除在ArrayList中重複的元素在O(LOGN)時間
- 17. 證明是n +(logn)時間^ 2是O(n)
- 18. 3Sum算法版本O(N^2 logn)時間
- 19. 這個解決方案的時間複雜度是O(N)還是O(LogN)?
- 20. 在Elixir中進行二元搜索O(logN)?
- 21. 我有2個整數數組,我如何在O(logn)時間找到第k個最大項?
- 22. dificulty解決O(logn)中的代碼
- 23. 查找RBTREE在O(LOGN)的算法
- 24. 井字減少運行時間O(N)
- 25. 計算大O運行時間
- 26. 大O異常運行時間
- 27. 分析運行時間,大O
- 28. 該算法的大O運行時間
- 29. 大O的運行時間功能
- 30. O(n)的運行時間算法
「是否可能」。不。 – Kevin 2014-10-06 20:10:22
如果它是一個*排序*的布爾數組,可以在O(1):D – user2864740 2014-10-06 20:12:08
@Kevin中找到它是可能的。從數組的開始和結尾讀取,直到計數器小於arraySize-counter。 – StackFlowed 2014-10-06 20:13:17