İkili arama, sıralı bir listede hedef bir değeri bulmanın hızlı bir yoludur. Ortadaki öğeyi kontrol eder, kalan değerlerin yarısını eler ve işlemi tekrarlarsınız. Liste sıralı değilse bu mantık geçerli olmaz.

Artan sıralı bir listede kural basittir: Ortadaki değer hedeften küçükse sağa bakın; büyükse sola bakın. Aralık her adımda yaklaşık yarıya indiği için ikili arama O(logn)O(\log n) zamanda çalışır.

İkili arama sıralı bir listede nasıl çalışır?

Şu sıralı listeyi kullanalım:

[3,7,12,18,24,31,39,45,52][3, 7, 12, 18, 24, 31, 39, 45, 52]

Hedefin 3131 olduğunu varsayalım.

Tam aralıkla başlayın. Ortadaki değer 2424'tür. 31>2431 > 24 olduğundan, 2424'ün solundaki her şey elenebilir. Bu yüzden arama şu aralıkta devam eder:

[31,39,45,52][31, 39, 45, 52]

Şimdi ortadaki değer 3939'dur. 31<3931 < 39 olduğundan, 3939'un sağındaki her şey elenebilir. Böylece aralık

[31][31]

olur.

Artık ortadaki değer 3131 olduğu için arama durur. Buradaki önemli fikir yalnızca hedefin bulunmuş olması değildir. İki karşılaştırmada aday aralık 99 değerden 11 değere düştü.

İkili arama neden O(logn)O(\log n)'dir?

Her karşılaştırma kalan adayların yaklaşık yarısını eler. Bir adımdan sonra yaklaşık n/2n/2 öğe kalır. İki adımdan sonra yaklaşık n/4n/4 öğe kalır. kk adımdan sonra kalan boyut yaklaşık olarak

n2k\frac{n}{2^k}

olur.

Bu miktar yaklaşık 11 olduğunda arama biter. Dolayısıyla adım sayısı

2kn2^k \approx n

koşulunu sağlar.

Her iki tarafın log2\log_2'si alınırsa

klog2nk \approx \log_2 n

elde edilir.

İkili aramanın iyi ölçeklenmesinin nedeni budur. Doğrusal arama en fazla nn kontrol gerektirebilir, ama ikili arama yalnızca aralığı sürekli yarıya indirmeye yetecek kadar kontrol gerektirir.

İkili arama kod örneği

Aşağıda Python'da standart bir yinelemeli sürüm verilmiştir:

Bir soruyla yardıma mı ihtiyacın var?

Sorunuzu yükleyin ve saniyeler içinde doğrulanmış adım adım çözüm alın.

GPAI Solver Aç →