Akşam vakti çok kısa bir konuya değineyim dedim. Hash algoritmalarında dikkat ettiyseniz anahtar değerini tutan bir göz vardı hep. Her bir gözde, veya daha resmi dilde konuşmak gerekirse, her bir adreste tek bir değer tutulabiliyordu. Aslında bir değil birkaç değer de tutabiliriz biz. Biz sadece. :P Saçmalama eşiğime dayanmadan devam edeyim. :) İşte bu yüzden bucket(demet, buket) demişler adına. Buna page veya block da diyorlar. Bir bucket içerisinde saklanılan kayıt sayısına da blocking factor demişler arkadaşlar.
Blocking Factor arttıkça, bu değerler hafızaya çekilir. Tabi tüm bu bucket'ların hafızaya sığdığı varsayılıyor. Sığmazsa zaten sorun var demektir. Sığmıyor diyen varsa, mesaj atsın, anlatırım. :) Değerler hafızaya çekildiğinden ötürü de, yapılan aramalar, işlemler vs çok hızlıdır.
Hangi algoritmayla kullanılırsa, onun özelliklerini uygular. Ara hafızaya(cache) çekilebilecek boyutta olması tavsiye ediliyor(maksimum performans için).
Hafiften lojik'e de kayalım, koptuk gidiyoruz zaten. :) Hafızaya değerleri çekerken "databus", yani veri yolu, boyutu ile ilişkilendiririz ki çok yer kaplayıp, işlemleri yavaşlatmasın. Yani biz sistemi hızlandıralım derken, tam tersine daha da yavaşlatabiliriz. Bu husus önemli.
Şimdi bunun örneğini yapmayacağım uzun uzun. Kısaca göstereyim.
5-9 değerleri verilmiş olsun. mod 4'e göre yapalım.Blocking factor=2
hash(5)=1 mod4
Hemen 5 değerini 1 numaralı adrese yerleştirelim.
Sıra | Anahtar Değeri | Anahtar Değeri |
0 | ||
1 | 5 | |
2 | ||
3 |
Dikkat ettiyseniz, mod 4 olduğundan tablo 0-3 arasında ve iki tane değer saklayabiliyor. Blocking Factor 2 denmişti, o yüzden de iki değeri de muhafaza edebilir tek bir adreste...
Diğer değeri yerleştirelim.
hash(9)=1 mod4
Sıra | Anahtar Değeri | Anahtar Değeri |
0 | ||
1 | 5 | 9 |
2 | ||
3 |
Sonra görüşürüz..
1 yorum:
merhabalar.
bucket olayını tam anlayadım.
Şöyle bir soruyla karşılaştım.
Sınır değeri b(v)=(10110)2, k değerinin 5 olduğu bir dogrusal kırım tablosunda (linear hash table), birincil bölgede kaç tane kova(bucket) vardır.
Not: b(v), v b nin tabanı olarak gösterilmiş.
(10110) ikilik taban olarak gösterilmiş.
Ayrıca böyle soruları çözmek için hangi konuya çalışmalıyım.
Yorum Gönder