Öğelere yalnızca bir hashtable'daki birincil anahtarlarından erişebilirsiniz. Bu daha hızlı (bir ağaç algoritması ile daha O(1)
yerinelog(n)
), ancak (aralıkları seçemezsiniz arasındaki her şeyi x
vey
). Ağaç algoritmaları bunu desteklerken Log(n)
, karma dizinler tam bir tablo taramasıyla sonuçlanabilir O(n)
. Ayrıca, hash indekslerinin sabit ek yükü genellikle daha büyüktür ( bu, teta gösteriminde bir faktör değildir, ancak hala mevcuttur ). Ayrıca ağaç algoritmalarının bakımı genellikle daha kolaydır, verilerle büyür, ölçeklenir vb.
Karma dizinler önceden tanımlanmış karma boyutlarla çalışır, bu nedenle nesnelerin içinde depolandığı bazı "kümeler" ile sonuçlanırsınız. Bu nesneler, bu bölümün içinde gerçekten doğru olanı bulmak için tekrar döngüye alınır.
Dolayısıyla, küçük boyutlarınız varsa, küçük öğeler için çok fazla ek yükünüz varsa, büyük boyutlar daha fazla taramaya neden olur.
Günümüzün karma tablo algoritmaları genellikle ölçeklenir, ancak ölçeklendirme verimsiz olabilir.
Gerçekten ölçeklenebilir karma algoritmalar var. Bunun nasıl çalıştığını bana sorma - bu benim için de bir gizem. AFAIK, yeniden hashing işleminin kolay olmadığı ölçeklenebilir çoğaltmadan gelişti.
Onun adı Rush - R eplication u nder, S calable H külleme ve bu algoritmalar böylece Rush algoritmaları olarak adlandırılır.
Ancak, karma boyutlarınıza kıyasla dizininizin tolere edilebilir bir boyutu aştığı ve tüm dizininizin yeniden oluşturulması gereken bir nokta olabilir. Genellikle bu bir sorun değildir, ancak devasa-devasa veri tabanları için bu günler sürebilir.
Ağaç algoritmalarının değiş tokuşu küçüktür ve hemen hemen her kullanım durumu için uygundur ve bu nedenle varsayılandır.
Bununla birlikte, çok hassas bir kullanım durumunuz varsa ve tam olarak neye ve yalnızca neye ihtiyaç duyulacağını biliyorsanız, hash indekslerinden yararlanabilirsiniz.