1120_バイナリーサーチについて
https://sl.bing.net/gxTEm7GxnCC
Q.1
バイナリーサーチについて詳しく教えて下さい。
A.1
バイナリーサーチは、ソート済みの配列から目的の値を高速に見つけるアルゴリズムです。配列の中央の要素と目的の値を比較して、目的の値が中央の要素より大きいか小さいかを判断します。大きい場合は、配列の右半分に目的の値があるとわかります。小さい場合は、配列の左半分に目的の値があるとわかります。このようにして、探索範囲を半分に絞り込んでいきます。目的の値が見つかるか、探索範囲がなくなるまで繰り返します。
バイナリーサーチの計算量は、配列の長さをnとすると、O(log n)です。これは、一回の操作で探索範囲が半分になるため、最大でlog n回の操作で目的の値が見つかるかどうかがわかるからです。バイナリーサーチは、線形探索のO(n)よりもはるかに効率的です。
バイナリーサーチの具体的な例として、Pythonでの実装を紹介します。³の記事にあるコードを参考にしました。
def binary_search(l, value): low = 0 high = len(l) - 1 while low <= high: mid = (low + high) // 2 if l[mid] == value: print('Found') return True elif l[mid] < value: low = mid + 1 else: high = mid - 1 print('Not Found') return False # テスト l = [1, 2, 3, 4, 5, 6, 7] # ソート済みの配列 print(binary_search(l, 5)) # 出力はTrue print(binary_search(l, 8)) # 出力はFalse
バイナリーサーチについて、詳しくは¹や²や⁴をご覧ください。
ソース: Bing との会話 2023/11/11 (1) Algorithm | 二分探索をPython3で解説(例題あり) - Qiita. https://qiita.com/uniTM/items/2f2a38f225f04154df9a. (2) 二分探索(Binary Search)のアルゴリズム | アルゴリズムロジック. https://algo-logic.info/binary-search/. (3) バイナリーサーチ/二分探索 : アルゴリズム. https://www.codereading.com/algo_and_ds/algo/binary_search.html. (4) 二分探索(2分探索 / バイナリサーチ)とは - 意味をわかり .... https://e-words.jp/w/%E4%BA%8C%E5%88%86%E6%8E%A2%E7%B4%A2.html. (5) github.com. https://github.com/yamarkz/competition/tree/b867513f8328608878ce3969500774e864a9fa3d/python%2Fbinary_search.py.
Q.2
効率の良いサーチアルゴリズムは、他にどんなものがありますか?
A.2
効率の良いサーチアルゴリズムは、データの量や性質によって異なりますが、一般的には以下のようなものがあります。
- 最良優先探索³:評価関数に基づいて、最も有望なノードから探索を進める方法です。目的ノードに近いと思われるノードを優先的に探索することで、無駄な探索を減らすことができます。最良優先探索の例としては、ダイクストラ法³やA*アルゴリズム³や均一コスト探索³を挙げることができます。
- 幅優先探索:始点から近いノードから順に探索する方法です。始点からの距離が同じノードは、すべて探索した後に次の距離のノードに移ることで、最短経路を見つけることができます。幅優先探索は、木構造やグラフ構造の探索に適しています。
- 深さ優先探索:始点から遠いノードまで探索を進める方法です。探索したノードから枝分かれするノードがあれば、その中の一つを選んでさらに探索を進めます。枝分かれするノードがなくなったら、一つ前のノードに戻って別のノードを探索します。深さ優先探索は、解の候補を絞り込むのに適しています。
以上のように、効率の良いサーチアルゴリズムは、目的や条件に応じて選択することが重要です。詳しくは¹や²や⁴や⁵をご覧ください。
ソース: Bing との会話 2023/11/11 (1) 最良優先探索 - Wikipedia. https://bing.com/search?q=%e5%8a%b9%e7%8e%87%e3%81%ae%e8%89%af%e3%81%84%e3%82%b5%e3%83%bc%e3%83%81%e3%82%a2%e3%83%ab%e3%82%b4%e3%83%aa%e3%82%ba%e3%83%a0. (2) 探索アルゴリズムとは?基本から応用まで分かりやすく解説し .... https://products.sint.co.jp/topsic/blog/search-algorithm. (3) 【探索アルゴリズム】線形探索、二分探索、ハッシュ探索に .... https://breezegroup.co.jp/202006/algorithm-search/. (4) 最良優先探索 - Wikipedia. https://ja.wikipedia.org/wiki/%E6%9C%80%E8%89%AF%E5%84%AA%E5%85%88%E6%8E%A2%E7%B4%A2. (5) サーチ(探索):アルゴリズムの基本4 - エンジニアの入り口. https://eng-entrance.com/%e3%82%b5%e3%83%bc%e3%83%81%ef%bc%88%e6%8e%a2%e7%b4%a2%ef%bc%89%ef%bc%9a%e3%82%a2%e3%83%ab%e3%82%b4%e3%83%aa%e3%82%ba%e3%83%a0%e3%81%ae%e5%9f%ba%e6%9c%ac4.