http://java.sun.com/j2se/1.4.2/docs/api/java/util/Arrays.html對Arrays.BinarySearch沒有保證?
Sun沒有提到他們的二進制搜索實現的任何複雜性。這是一個錯誤嗎?我知道它應該是O(logn)
,但當他們沒有明確說明這一點時,這讓我感到緊張。他們爲他們的一些算法,比如Arrays.sort。
您是否有任何知識的實際執行?我還沒有機會自己下載源代碼!我猜這是一個簡單的二分搜索,但是Sun有時會調整算法以獲得更好的性能。
http://java.sun.com/j2se/1.4.2/docs/api/java/util/Arrays.html對Arrays.BinarySearch沒有保證?
Sun沒有提到他們的二進制搜索實現的任何複雜性。這是一個錯誤嗎?我知道它應該是O(logn)
,但當他們沒有明確說明這一點時,這讓我感到緊張。他們爲他們的一些算法,比如Arrays.sort。
您是否有任何知識的實際執行?我還沒有機會自己下載源代碼!我猜這是一個簡單的二分搜索,但是Sun有時會調整算法以獲得更好的性能。
的java.util.Array
的實現很簡單,沒有足夠的空間用於優化。
你找到JAVA_HOME/src.zip
的源代碼。 這個類中的排序alogrithm,這是爲了使用二進制搜索所需,是一個優化的快速排序至極提供n * log(n)性能(在許多數據集)。
二進制搜索是通過定義O(log n)的(平均)想有沒有必要explicittly提到它。
即使數組未經排序,看代碼顯然它不可能比O(日誌n)。 – SyntaxT3rr0r
@WizardOfOdds - 當然,你可能會得到錯誤的答案。 –
如果數組未經排序,doco明確表示結果未定義。 –
Arrays.sort
保證返回排序後的數組,不管你是什麼數組包含。
Arrays.binarySearch(...)
(小寫字母「B」 BTW)不能保證看到你的數組可能是未排序的東西。
現在編輯我的回答:看代碼顯然這是不可能比O操作表現較差(log n)的。但是,當然不能保證你會找到正確的價值。
請問您有任何的實際執行的任何知識?
您可以在JDK安裝中或使用Google搜索自己找到實際實現的源代碼。例如,搜索「java.util.Arrays.java.html」。
但我毫不懷疑的binarySearch方法O(logN)
。如果他們在過去10年左右沒有人會注意到......。
最近,http://java.sun.com/javase/6/docs/api/java/util/Arrays.html – trashgod