イム おかげバイナリ検索が
バイナリ検索が
答えて
アルゴリズムがあるべき注文のArrayList内のバイナリ検索としてではなく順序付けられたリストのために同じように動作するJavaのコードを実装する方法を探してArrayList
とList
の両方で同じですが、どちらも注文されています。
リストが注文されていない場合は、バイナリ検索を実行できないことにも注意してください。それは意味をなさない。バイナリ検索はO(log n)
です。あなたが知っているので、リストの半分を無視することができます。リストが注文されていない場合、検索はO(n)であり、バイナリは使用できません。
バイナリ検索のための独自の実装は次のようになります。
int binary_search(int A[], int key, int imin, int imax)
{
// test if array is empty
if (imax < imin)
// set is empty, so return value showing not found
return KEY_NOT_FOUND;
else
{
// calculate midpoint to cut set in half
int imid = midpoint(imin, imax);
// three-way comparison
if (A[imid] > key)
// key is in lower subset
return binary_search(A, key, imin, imid-1);
else if (A[imid] < key)
// key is in upper subset
return binary_search(A, key, imid+1, imax);
else
// key has been found
return imid;
}
}
ソース:あなたはjava.utilの実装を使用したい場合はWikipedia
を、次に使用します。
java.util.Arrays.binarySearch(int[] a, int key)
アレイをa
もちろん並べ替えが必要です。
私は彼がそれを覚えていたと思うので、彼は彼の質問に「順序付けられた」という言葉を使用しました... – ajb
ListとArrayListの違いは何ですか?順序配列対アーリーリストを意味するのでしょうか? –
ArrayListはListの実装の1つです。 Listは要素のシーケンスです。 ArrayListは、これらの要素を表す1つの方法です。 LinkedListは別のものです。 ArrayListは配列のような構造の要素を保持するので、特定のインデックスの要素にアクセスするのは簡単ですが、リストの途中に挿入するなどの操作は遅くなります。 LinkedListを使用すると、リストのN番目の要素を取得するのに、より速く挿入できますが、遅くなります。それらの要素のどれも、要素がソート順であるかどうかについては何も言わない。 – ajb
「バイナリ検索」は、リストの要素(または要素への何らかのポインタ)がメモリ内に順番に整理されている場合にのみ意味があり、検索が「低」と「高」の索引に絞り込まれている場合、他のすべての要素をスローする必要なく、(Low + High)/ 2の位置に素早くジャンプすることができます。これは、一般的なリスト(リンクされたリストの場合があります)では機能しません。そのようなものについては、リストの先頭からすべての要素を順番に調べるよりも、実際にはうまくいくわけではありません。
あなたはどのList
上のバイナリ検索に
Collections.<T>binarySearch(List<T> list, T key)
を使用することができます。それはArrayList
とLinkedList
と他のList
で動作します。この方法は、ログ(n)の時間で実行さ
「ランダムアクセス」リストについては、(近く提供:
は、しかし:あなたは、各要素への直接アクセスを持っている場合
バイナリ検索が速いだけです - 定時の位置アクセス)。指定されたリストがRandomAccessインタフェースを実装しておらず、大きければ、このメソッドはO(n)リンクトラバーサルとO(log n)要素の比較を実行するイテレータベースのバイナリ検索を行います。
あなたList
は「ランダムアクセス」を提供していない場合は、これを提供しているList
のコピーを作成することによって、より良い運を持っているかもしれません。
LinkedList<String> list = new LinkedList<String>();
// fill
どちらかそう
ArrayList<String> fastList = new ArrayList<String>(list);
Collections.binarySearch(fastList, "Hello World");
または多分そう
String[] array = list.toArray(new String[list.size()]);
Arrays.binarySearch(array, "Hello World");
あなたList
がデフォルトで注文し、あなたが前にあなたが最高を得る可能性があります検索にそれをソートする必要がありされていない場合などのような以来、配列でそれを行うことによって結果を得た
Collections.sort(list);
は並べ替えられたリストを再作成するために使用される一時的な配列を作成します。
String[] array = list.toArray(new String[list.size()]);
Arrays.sort(array);
Arrays.binarySearch(array, "Hello World");
- 1. バイナリ検索ツリー
- 2. バイナリ検索ツリー
- 3. バイナリ検索ツリーデストラクタ
- 4. バイナリ検索ツリー式
- 5. バイナリ検索ツリー - ポストオーダーロジック
- 6. 動的バイナリ検索
- 7. バイナリ検索ツリーC++
- 8. javaバイナリ検索arraylist
- 9. deleteバイナリ検索ツリー
- 10. Cバイナリ検索ツリー
- 11. Excel検索速度対VBAバイナリ検索?
- 12. Trieベースのキーワード検索とバイナリ検索
- 13. バイナリ検索ツリーのトラバーサル
- 14. バイナリでのパターン検索
- 15. C++宿題 - バイナリ検索ツリーヘルプ
- 16. D 2.0のバイナリ検索(Phobos)?
- 17. バイナリ検索終了条件
- 18. バイナリ検索ツリー解析
- 19. クエリ結果のバイナリ検索
- 20. バイナリ検索ツリーの質問
- 21. Ruby on Rails、ActiveRecord、バイナリ検索
- 22. Cのバイナリ検索ツリー、セグメンテーションフォールトエラー
- 23. バイナリ検索出力エラー
- 24. バイナリ検索ツリーの再帰
- 25. CUDAバイナリ検索の実装
- 26. Ruby#indexメソッドVSバイナリ検索
- 27. 作成バイナリ検索ツリー
- 28. バイナリ検索ツリーのリスト
- 29. Java:バイナリ検索ツリークラスのディープコピー
- 30. リニア検索とバイナリ検索を組み合わせた検索アルゴリズム
すべてのJavaに付属する 'Collections.binarySearch()'や 'Arrays.binarySearch()'のような有望な名前のユーティリティクラスがあります。 – zapl
こんにちは、downvotesを取得した場合、それはあなたが努力を示しているので、質問を投稿する前に問題に取り組まなければならないでしょう。 – jsedano
それは本当にあまり意味がありません。リストはランダムなアクセスを可能にするデータ構造ではなく、実際にはバイナリ検索を行うことはできません。 – piokuc