Çarpmalı ikili arama - Multiplicative binary search

Çarpmalı ikili arama
Çarpımlı İkili Arama Depiction.svg
7'nin hedef değer olduğu çarpımsal ikili arama algoritmasının görselleştirilmesi.
SınıfArama algoritması
Veri yapısıDizi
En kötü durumda verimÖ(günlük n)
En iyi senaryo verimÖ(1)
Ortalama verimÖ(günlük n)
En kötü durumda uzay karmaşıklığıÖ(1)

İçinde bilgisayar Bilimi, çarpımsal ikili arama bir varyasyonudur Ikili arama normal ikili arama tarafından kullanılan sıralı sıra yerine bir dizideki anahtarların belirli bir permütasyonunu kullanır.[1]Çarpmalı ikili arama ilk olarak 1980 yılında Thomas Standish tarafından tanımlanmıştır. Bu algoritma ilk olarak küçük bilgisayarlarda orta nokta indeks hesaplamasını verimli bölme veya kaydırma işlemleri olmadan basitleştirmek için önerilmiştir. önbellek -çarpımsal ikili aramanın dostça doğası, onu aşağıdakiler için çekirdek dışı aramak blok odaklı alternatif olarak depolama B ağaçları ve B + ağaçları. Optimum performans için, dallanma faktörü Bir B ağacının veya B + ağacının blok boyutu dosya sistemi saklandığı. Çarpımsal ikili arama tarafından kullanılan permütasyon, optimum anahtar sayısını ilkine yerleştirir (kök ) blok boyutundan bağımsız olarak blok.

Çarpmalı ikili arama, bazıları tarafından kullanılır derleyicileri optimize etme uygulamaya deyimleri değiştir.[2][3]

Algoritma

Çarpımlı ikili arama, permütasyonlu sıralanmış bir dizi üzerinde çalışır. Anahtarlar, dizide karşılık gelen dengelenmiş düzenin seviye sırasına göre saklanır. ikili arama ağacı Bu, ikili aramanın ilk pivotunu dizideki ilk öğe olarak yerleştirir. İkinci pivotlar, sonraki iki konuma yerleştirilir.

Bir dizi verildiğinde Bir nın-nin n değerleri olan öğeler Bir0 ... Birn−1ve hedef değer T, aşağıdaki altyordam dizinini bulmak için çarpımsal ikili aramayı kullanır T içinde Bir.

  1. Ayarlamak ben 0'a kadar
  2. Eğer bennarama başarısızlıkla sonuçlanır.
  3. Eğer birben = Tarama yapıldı; dönüş ben.
  4. Eğer birben < T, Ayarlamak ben 2 ×ben + 1 ve 2. adıma gidin.
  5. Eğer birben > T, Ayarlamak ben 2 ×ben + 2 ve 2. adıma gidin.

Ayrıca bakınız

Alıntılar

  1. ^ Standish, Thomas A. (1980). "Bölüm 4.2.2: Sıralı Tablo Arama". Veri Yapısı Teknikleri. Addison-Wesley. pp.136–141. ISBN  978-0201072563.
  2. ^ Sayle, Roger A. (17 Haziran 2008). "Çok Yönlü Şube Kodu Oluşturmanın Süper Optimize Edici Analizi" (PDF). GCC Developers 'Summit Bildirileri: 103–116. Alındı 4 Mart 2017.
  3. ^ Spuler, David A. (Ocak 1994). Statik Arama Sorunu Olarak Çok Yollu Şube İfadeleri için Derleyici Kodu Üretimi (Teknik rapor). Bilgisayar Bilimleri Bölümü, James Cook Üniversitesi, Avustralya. 94/03.