2

https://docs.oracle.com/javase/1.5.0/docs/api/java/util/Arrays.html

Sunは、二分探索の実装の複雑さについては言及していません。これは間違いですか?私はそれがそうあるべきであることを知っていますO(logn)、しかし彼らがこれを明確に述べていないときそれは私を緊張させます。それらは、Arrays.sortのようないくつかのアルゴリズムに対して行います。

実際の実装について知っている人はいますか?私はまだ自分でソースコードをダウンロードする機会がありませんでした!些細な二分探索だと思いますが、Sunはパフォーマンスを向上させるためにアルゴリズムを微調整することがあります。

4

4 に答える 4

4

二分探索は、定義上、O(log n)(平均)であり、明示的に言及する必要はないと推測します。

于 2010-02-06T03:54:39.360 に答える
1

Arrays.sort配列に何が含まれているかに関係なく、ソートされた配列を返すことが保証されています。

Arrays.binarySearch(...) (小文字の'b' btw)は、配列がソートされていない可能性があることを保証することはできません。

今私の答えを編集します:コードを見ると、明らかにO(log n)よりも悪いパフォーマンスをすることはできません。ただし、もちろん、正しい値が見つかる保証はありません。

于 2010-02-06T04:13:37.097 に答える
1

の実装java.util.Arrayは簡単で、最適化の余地はありません。

ソースコードはにありJAVA_HOME/src.zipます。このクラスのソートアルゴリズム、二分探索を使用するために必要なもの、は最適化されたクイックソートであり、(多くのデータセットで)n * log(n)のパフォーマンスを提供します。

于 2010-02-06T11:51:02.350 に答える
0

実際の実装について知っている人はいますか?

実際の実装のソースコードは、JDKインストールで自分で見つけるか、Google検索を使用して見つけることができます。たとえば、「java.util.Arrays.java.html」を検索します。

しかし、binarySearchメソッドがであることは間違いありませんO(logN)。もし彼らがいなかったら、誰かが気づいたでしょう...過去10年かそこらで。

于 2010-02-06T04:15:39.367 に答える