Açıkçası, bir enterpolasyon araması yapmak için, siparişten daha fazla bilinen bir anahtar türüne ihtiyacınız vardır - hangisinin daha büyük veya daha az.
Veri kümesinin özellikleri gittikçe, çoğunlukla bir mülke gelir: anahtarların olasılıklar arasında makul olarak eşit derecede (veya en azından tahmin edilebilir şekilde) dağılma olasılığı. Bu olmadan, bir enterpolasyon araması aslında bir ikili aramadan daha yavaş olabilir .
Örneğin, küçük harfli dizelerden oluşan bir veri kümesini anahtar olarak düşünün. Diyelim ki "x" ile başlayan bir anahtarınız var. Bir enterpolasyon araması, kümenin sonuna çok yakın aramaya başlamanız gerektiğini açıkça gösterecektir. Bununla birlikte, anahtarlarınızın çoğu aslında 'z' ile başlıyorsa ve 'a' olsa 'y'den herhangi bir şeyle başlamazsa, aradığınız anahtar aslında kümenin başlangıcına çok yakın olabilir. Arama, 'w' ile başlayan dizenin bulunduğu başlangıca yaklaşmadan önce önemli sayıda yineleme yapabilir / alabilir. Her yineleme, veri kümesinin yalnızca% ~ 10'unu dikkate alır, bu nedenle 'w' ile başlayan anahtarların başlangıcına yaklaşmadan önce birkaç yineleme gerekir.
Buna karşılık, ikili bir arama ortada başlar , ikinci yinelemede bir çeyrek işarete, üçüncüde bir sekizinci işarete vb. Performansı, anahtarlardaki eğriden neredeyse etkilenmeyecekti. Her yineleme, sanki anahtarlar eşit dağıtılmış gibi, veri kümesinin yarısını dikkate alacaktır.
Ben gerçekten sürer Ancak, eklemek için acele oldukça bir interpolasyon bir ikili arama daha hissedilir derecede kötü aramak yapmak için bir çarpık dağılımı. Örneğin, makul miktarda yerelleştirilmiş kümelenme varlığında bile oldukça iyi performans gösterebilir.
Bir enterpolasyon aramasının mutlaka lineer enterpolasyon kullanması gerekmediğinden de bahsetmeliyim. Örneğin, anahtarlarınızın doğrusal olmayan bir dağılımı (ör. Çan eğrisi) izlediği biliniyorsa, sonuçları eşit bir dağılımdan biraz farklı hale getirmek için enterpolasyon fonksiyonunda bunu dikkate almak oldukça kolay hale gelir.