Bu cevap, TAoCP Cilt 3, Bölüm 6.4'ün bölümlerini özetlemektedir .
Bir değerler kümesi sahip varsayalım , N olan bir diziye depolamak istediğiniz A boyutu m . H işlevini kullanırız h : V → [ 0 .. M ) ; genellikle, M ≪ | V | . Α = n diyoruzVnbirmh : V→ [ 0 .. M)M≪ | V| yük faktörüarasındaA. Burada doğalm=M; Pratik senaryolarda, elimizdekim«Molsa da, ve aşağı harita zorundamkendimizi.α = nmbirm = Mm ≪ Mm
İlk gözlem, üniform özelliklere sahip olsa bile ¹ aynı karma değere sahip iki değerin olasılığının yüksek olduğu; Bu aslında rezil doğum günü paradoksunun bir örneğidir . Bu nedenle, genellikle çatışmalarla uğraşmak zorunda kalacağız ve O ( 1 ) en kötü vaka erişim zamanı umudunu bırakabiliriz .h0 ( 1 )
Peki ya ortalama durum? den gelen her tuşun aynı olasılıkta gerçekleştiğini varsayalım . Ortalama kontrol edilen giriş sayısı C S n (başarılı arama) Cı- U , n (başarısız arama) kullanılan çakışma çözünürlüğü yöntemine bağlıdır.[ 0 .. M)CSnCUn
zincirleme
Her dizi girişi, bağlı listelerden birini (başında işaretçi) içerir. Beklenen liste uzunluğu küçük olduğundan bu iyi bir fikirdir ( ) Çarpışma olasılığı yüksek olsa da. Sonunda, elde
Cı S , n ≈1+anm
Bu, listeleri (kısmen ya da tamamen) masanın içine depolayarak biraz geliştirilebilir.
CSn≈ 1 + α2 ve CUn≈ 1 + α22.
Doğrusal Sondalama
girerken (bir değeri ararken) v ,
boş bir konuma (cevap verene kadar) bu sırayla h ( v ) , h ( v ) - 1 , … , 0 , m - 1 , … , h ( v ) + 1 konumlarını kontrol edin. . h ) söz konusu olmaktadır. Bunun avantajı, yerel olarak ve ikincil veri yapıları olmadan çalışmamızdır; ancak, ortalama erişim sayısı α → 1 için farklılıklar gösterir :
C S n ≈ 1v
h ( v ) , h ( v ) - 1 , … , 0 , m - 1 , … , h ( v ) + 1
va → 1
İçin
a<0.75, ancak, performans chaining² karşılaştırılabilir.
CSn≈ 12( 1 + 11 - α) ve CUn≈ 12( 1 + ( 11 - α)2) .
α < 0.75
Çift karma
Doğrusal sondama benzer, ancak arama adımı boyutu, kopyalanan ikinci bir karma işlevi tarafından kontrol edilir . Hiçbir resmi türetme verilen ancak ampirik gözlemler olduğunu
C S n ≈ 1M
Bu yöntem Brent tarafından uyarlanmıştır; onun değişken amortismanları, daha ucuz aramalarla artan ekleme maliyetlerini içerir.
CSn≈ 1αln( 11 - α) ve CUn≈ 11 - α.
Elemanların çıkarılması ve tabloların uzatılması, ilgili yöntemler için farklı zorluk derecelerindedir.
Sonuç olarak, tipik kullanım durumunuza iyi uyan bir uygulama seçmelisiniz. Her zaman garanti edilmezse , de beklenen erişim süresi mümkündür. Kullanılan yönteme bağlı olarak α'nın düşük tutulması esastır; Genel giderlere karşı (beklenen) erişim zamanını değiştirmelisin. Açıkçası, h için iyi bir seçim de merkezidir.0 ( 1 )αh
1] Keyfi olarak aptalca bilgisiz programcılar sağlayabilir , onun kalitesi ile ilgili herhangi bir varsayım pratikte bir gerginliktir.
2] Bunun Java'ların kullanımıyla ilgili önerilere nasıl denk geldiğine dikkat edin .h
Hashtable