0Pricing
Coding Interview Prep · レッスン

バグのない基本的な二分探索

low、high、mid のループを確実に実装します

「バグのない基本的な二分探索」はCoddyKit上の無料Coding Interview Prepレッスンです。 これはレッスン1/4です。 下記で完全なレッスンを無料で読むことができます。その後、ブラウザ内の組み込みコードエディタと24時間対応のAIチューターでハンズオン演習できます。 これはCoding Interview Prep学習パスの一部であり、ウェブとCoddyKitアプリ全体で進捗が同期されます。 Coding Interview Prepコースには全4レッスンが含まれています。

探索範囲を半分にする

二分探索は、ソート済みのリストで各ステップの範囲を半分にして値を見つけます。これにより、遅い O(n) の走査が高速な O(log n) の探索になります。

a = [1, 3, 5, 7, 9]  # must be sorted

ソート済みであることが必須

二分探索はソート済みのデータでしか機能しません。リストが順不同なら、まずソートしてください。そうしなければ結果は意味を持たず、誤ったものになります。

a.sort()  # ascending order required

二つの境界

二つのポインタから始めます。low はインデックス 0 に、high は最後のインデックスに置きます。対象の値が存在するなら、必ずこの範囲内にあります。

low, high = 0, len(a) - 1

中央を安全に求める

mid は low + (high - low) // 2 として計算します。Python ではオーバーフローは問題になりませんが、この形をどこでも使える安全な習慣として身につけてください。

mid = low + (high - low) // 2

三つの結果

a[mid] と target を比較します。見つかった、小さすぎる、大きすぎるのいずれかです。それぞれの場合で範囲の狭め方が異なります。

if a[mid] == target:
    return mid

小さすぎるなら右へ

a[mid] が target より小さい場合、答えは必ず右側にあります。low を mid + 1 に移し、左半分を捨ててください。

elif a[mid] < target:
    low = mid + 1

大きすぎるなら左へ

a[mid] が target より大きい場合は、左半分を探索します。high を mid - 1 に移せば、mid をもう一度調べずに済みます。

else:
    high = mid - 1

ループ条件

low が high 以下である間、処理を続けます。二つが交差したら範囲は空であり、target は存在しません。

while low <= high:
    mid = low + (high - low) // 2

見つからない場合を示す

一致するものがないままループが終了した場合、その値は存在しません。呼び出し側が成功と失敗を区別できるよう、慣例として -1 を返します。

return -1  # target not in list

オフバイワンの罠

典型的なバグは、ポインタを動かすときに+1 または -1を付け忘れることです。忘れると mid が永遠に再検査され、無限ループになります。

low = mid + 1  # not low = mid

使えるならライブラリを使う

単純なメンバーシップテストなら、Python の bisect モジュールにバグのない探索機能が用意されています。独自の処理が必要な場合だけ、ループを自分で書いてください。

import bisect
i = bisect.bisect_left(a, target)

確認

ループを正しく進め続けるものは何か考えてみてください。

まとめ:バグのない探索

これで low と high を設定し、mid を安全に計算し、適切な側を狭め、オフバイワンの罠を避けられるようになりました。対数時間の探索を使いこなせます。🎯

よくある質問

「バグのない基本的な二分探索」レッスンは無料ですか?

はい。「バグのない基本的な二分探索」の完全なテキストはこのウェブで無料で読めます。インタラクティブに演習し(組み込みコードエディタと24時間対応のAIチューター)、Coding Interview Prepコースの残りをアンロックするには、CoddyKit PROにアップグレードしてください。 Coding Interview Prepコースには全4レッスンが含まれています。

「バグのない基本的な二分探索」で何を学びますか?

low、high、mid のループを確実に実装します ブラウザで直接実行するハンズオンコードでCoding Interview Prepを演習し、24時間対応のAIチューターがレッスンを進める中での質問に答えます。

Coding Interview Prepを始めるのに経験は必要ですか?

事前経験は必要ありません。CoddyKitのCoding Interview Prepは初級者から上級者向けに構成されているため、ここから始めるか最初から始めて、自分のペースで進むことができます。 これはレッスン1/4です。

「バグのない基本的な二分探索」レッスンにはどのくらい時間がかかりますか?

ほとんどのCoddyKitレッスンは約5~10分かかります。各レッスンはコンパクトでインタラクティブなので、着実に進歩し、ウェブとアプリ全体で正確に前回の場所から再開できます。

このCoding Interview Prepレッスンでコードを書いて実行できますか?

はい。すべてのCoding Interview Prepレッスンに組み込みコードエディタが含まれているため、ブラウザでリアルコードを書いて実行し、即座のAIフィードバックを取得できます。ローカル設定は不要です。

このコースのすべてのレッスン

  1. バグのない基本的な二分探索
  2. bisect_left と bisect_right
  3. First True: 述語二分探索
  4. 答えに対する二分探索
← Coding Interview Prepに戻る