ホームページ >Java >&#&チュートリアル >JavaScript と Java で二分検索をマスターする: ステップバイステップ ガイド
二分探索は、すべての開発者が理解すべき基本的なアルゴリズムであり、並べ替えられた配列内の要素を検索する非常に効率的な方法を提供します。このアルゴリズムは「分割統治」アプローチに依存しており、ステップごとに検索スペースを半分にすることができます。この記事では、JavaScript と Java の両方でバイナリ検索を検討し、反復実装と再帰実装について説明します。
二分探索は、ソートされた配列内でターゲット値の位置を見つけるように設計されたアルゴリズムです。配列のソートされた性質を利用することにより、バイナリ検索は効率的に検索空間を絞り込み、O(log n) の時間計算量を達成します。これは、大規模なデータセットの線形検索よりもはるかに高速です。
大まかな概要は次のとおりです:
コード例を見てみましょう。
JavaScript では、反復アプローチではループを使用して二分探索を実行します。これは次のようになります:
const binarySearch = (arr, target) => { let startIndex = 0; let endIndex = arr.length - 1; while (startIndex <= endIndex) { let midIndex = Math.floor((startIndex + endIndex) / 2); if (arr[midIndex] === target) { return midIndex; // Target found } else if (arr[midIndex] < target) { startIndex = midIndex + 1; // Search in the right half } else { endIndex = midIndex - 1; // Search in the left half } } return -1; // Target not found }; let nums = [-1, 0, 3, 5, 9, 12]; console.log(binarySearch(nums, 9)); // Output: 4 console.log(binarySearch(nums, 2)); // Output: -1
Java では、反復実装は非常に似ていますが、Java 構文に合わせて調整されています。
public class BinarySearchExample { public static int binarySearch(int[] arr, int target) { int startIndex = 0; int endIndex = arr.length - 1; while (startIndex <= endIndex) { int midIndex = (startIndex + endIndex) / 2; if (arr[midIndex] == target) { return midIndex; // Target found } else if (arr[midIndex] < target) { startIndex = midIndex + 1; // Search in the right half } else { endIndex = midIndex - 1; // Search in the left half } } return -1; // Target not found } public static void main(String[] args) { int[] nums = {-1, 0, 3, 5, 9, 12}; int target = 9; int result = binarySearch(nums, target); if (result != -1) { System.out.println("Element found at index: " + result); } else { System.out.println("Element not found in the array."); } } }
両方の実装:
再帰的アプローチの場合、ターゲットが見つかるか検索範囲が空になるまで、更新されたインデックスで自分自身を呼び出すように関数を定義します。
JavaScript での再帰二分検索の実装は次のとおりです。
const binarySearch = (arr, target) => { let startIndex = 0; let endIndex = arr.length - 1; while (startIndex <= endIndex) { let midIndex = Math.floor((startIndex + endIndex) / 2); if (arr[midIndex] === target) { return midIndex; // Target found } else if (arr[midIndex] < target) { startIndex = midIndex + 1; // Search in the right half } else { endIndex = midIndex - 1; // Search in the left half } } return -1; // Target not found }; let nums = [-1, 0, 3, 5, 9, 12]; console.log(binarySearch(nums, 9)); // Output: 4 console.log(binarySearch(nums, 2)); // Output: -1
Java では、同様の再帰的二分検索を次のように実装できます。
public class BinarySearchExample { public static int binarySearch(int[] arr, int target) { int startIndex = 0; int endIndex = arr.length - 1; while (startIndex <= endIndex) { int midIndex = (startIndex + endIndex) / 2; if (arr[midIndex] == target) { return midIndex; // Target found } else if (arr[midIndex] < target) { startIndex = midIndex + 1; // Search in the right half } else { endIndex = midIndex - 1; // Search in the left half } } return -1; // Target not found } public static void main(String[] args) { int[] nums = {-1, 0, 3, 5, 9, 12}; int target = 9; int result = binarySearch(nums, target); if (result != -1) { System.out.println("Element found at index: " + result); } else { System.out.println("Element not found in the array."); } } }
各再帰呼び出し内:
二分検索は次の場合に最適です。
配列がソートされていない場合は、最初にソートするか (コスト O(n log n) で)、データセットが小さい場合は線形検索を使用することを検討してください。
二分探索は、ソートされた配列内の要素を見つけるための多用途かつ効率的なアルゴリズムです。反復的アプローチを選択するか再帰的アプローチを選択するかに関係なく、バイナリ検索を理解することは、アプリケーションのパフォーマンスを向上させるのに役立ちます。 JavaScript と Java の両方の実装を試して、その動作の感触をつかみ、特定のユースケースにどちらが最適であるかを確認してください。
以上がJavaScript と Java で二分検索をマスターする: ステップバイステップ ガイドの詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。