Karma işlev sınıflandırması


9

İnternette şu soruya rastladım:

Hashing İşlevlerini anahtar değerinin bulunduğu çeşitli yöntemlere göre sınıflandırın.

gibi cevaplarla

  • Direkt yöntem
  • Çıkarma yöntemi
  • Modulo-Bölme yöntemi
  • Rakam Çıkarma yöntemi
  • Orta Kare yöntemi
  • Katlama yöntemi
  • Yalancı rastgele yöntem

ki tuhaf buluyorum. Sanırım hash hakkında çok şey biliyorum, ama bu benim için basit anlamsız, kimse açıklayabilir mi?

Yanıtlar:


4

Bunlar, bir hashcode'u değerleri içeren dizinin dizinine dönüştürme yöntemleridir. Diyelim ki 0x12345678 karma kodunuz var. Çok büyük bir sayı ve bu boyutta bir dizi olması muhtemel değildir. Eğer yaparsan yapabilirsin

Value = array[0x12345678];

Ve yapılabilir (doğrudan yöntem).

Bunu yapmazsanız, çok fazla çarpışmadan kaçınmaya çalışırken bu değeri dizi boyutuna uyan bir değere dönüştürmenin bir yolunu bulursunuz. Kullanılan terimler muhtemelen diğer isimler tarafından da bilinir, ancak örneğin hash kodun daha yüksek bitlerini maskeleyebilirsiniz.

Value = array[hashcode & 0xffff];

Veya karma kodunu dizi boyutuna göre değiştirin

Value = array[hashcode % array.size()]; // modulo division

Vesaire vesaire

Düzenle: bu bağlantı yardımcı olabilir


Teşekkürler, bu kadar - bağlantı bu *** kaynağı gibi görünüyor. Birçok şeyi birlikte karıştırdıkları için hala bir anlam ifade etmiyor: 1. hashCode'u bir anahtardan hesaplama (örneğin, katlama ve ekleme), 2. hash'ı iyileştirme (= bulaşma), örn. Orta kare), 3. haritalama dizinin karması (örneğin, modül, "&").
maaartinus
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.