Neden “hash tablosu” veya “hash işlevi” olarak adlandırılıyor? Hash burada bana bir şey ifade etmiyor [kapalı]


26

Şimdi hash tablolarını ve hash fonksiyonlarını kullandığım, duyduğum, konuştuğum ve uyguladığım yaklaşık 4 yıllık bir gelişme. Ama neden buna karma dendiğini anlamadım.

Programlamaya başladığım ilk günleri hatırlıyorum, bu terim bana zahmetli bir terimlerdi . Adına dayanarak ne olduğunu asla anlamadım . Ne olduğunu ve neden ve ne zaman kullanmamız gerektiğini deneysel olarak anladım .

Yine de bazen neden buna karma dendiğini anlamaya çalışıyorum . Masa veya işlevle ilgili bir sorunum yok ve dürüst olmak gerekirse, oldukça kesin, mantıklı terimler. Ancak, anahtar veya benzersizlik gibi karma yerine daha iyi sözcüklerin kullanılabileceğini düşünüyorum . Anahtar tablosu veya benzersiz tablo yapmayın .

Sözlüğüme göre, hash şu anlama geliyor:

  1. Kızarmış patates ve et yemeği (çok alakasız)
  2. # symbol (AKA sayı işareti, pound işareti, vb.) (hala alakasız, belki sadece yanlış bir isimlendirme)
  3. Algoritmayı karakter dizgisine uygulayın (yine de karma tablodaki en önemli özellik olan benzersiz olanla ilgisi yok )
  4. Yemek kesmek
  5. Haşhaş için başka bir terim

Neden buna karma dendiğini bilen var mı?


32
Her şeyin ne olduğunu biraz yanlış anlıyor gibisin. Teklik açıkça bir hash fonksiyonunun özelliği değildir (yani asla enjekte edici değildir).
Peter Taylor

1
@Peter Taylor: karma tabloları enjekte eşlemelerini tanımlar.
reinierpost 14:11

2
@Peter Taylor: Biraz nitpicky olmak için, enjektif olmaları gerekmiyor , ama bazen bile bijektiftirler. Bir tamsayı için bir özetleme fonksiyonunun tipik uygulamasını düşünün :)
keppla

4
Bir karma olabilir sürece ya da anahtar alanı (tablo sağlamalarının için) karma değer alanından daha büyük değildir, benzersiz, ya da müzakere değeri alanı çarpışmalar (kriptografik hash için) matematiksel olarak mümkün olmayan olduğu bu büyüktür.
Güvenli

1
Ayrıca, bir "anahtar tablosu", herhangi bir "anahtar / değer" veri yapısına ("sözlük" olarak da bilinir) daha çok benzer. Tüm anahtar / değer veri yapılarının karma tabloları değildir.
barjak

Yanıtlar:


46

Wikipedia'ya göre, karma fonksiyonunu ifade eder . Bir adım daha ileri gitmek istiyorsanız, karma işlevinin wiki sayfası, karma işlevinde "karma" kelimesinin kullanımının aşağıdaki gibi olduğunu söyler:

"Hash" terimi, teknik olmayan anlamı ile "doğramak ve karıştırmak" anlamına gelir. Aslında, mod işlemi gibi tipik karma fonksiyonlar, anahtar dağılımının tek biçimliliğini arttırmak için girdi alanını çıktı aralığına "karışan" birçok alt alana "keser".


2
'Alt alan adlarının orada ne yaptığından emin değilim. Bu sadece hash işlevinin kendi etki alanının değerlerini iyice “karıştırması”.
reinierpost 14:11

15

Fransızca'da bir karma tablo "hachage tabağı" olarak adlandırılır, ilgili "hacher" fiili kıyma / kıyma anlamına gelir (çoğunlukla yiyecek). Fiil to hashİngilizce'de aynı anlama sahiptir.

Diğerlerinin de belirttiği gibi buna karma denir, çünkü girdilerinizi farklı yerlere (tablo girişleriniz) koyduğunuz girişi kesersiniz.


2
Aslında aksan olmadan "hahage" ve "hacher" yazıyor.
Ptival

10

3 numara bununla ilgisi var. Gönderen Vikipedi :

Karma tablo algoritması kalbinde basit bir öğe dizisidir; Bu genellikle basit bir karma tablo olarak adlandırılır . Karma tablo algoritmaları, veri öğesinin anahtarından bir dizin hesaplar ve verileri diziye yerleştirmek için bu dizini kullanır. Bu hesaplamanın uygulamasıdır karma işlevi , f:

index = f(key, arrayLength)

Karma işlevi index, verilerden bir dizi içinde hesaplar key. arrayLengthdizinin boyutu. İçin birleştirici dili veya diğer düşük seviyeli programları, önemsiz hash fonksiyonu genellikle sadece bir veya iki satır içi ile bir dizin oluşturabilirsiniz makine talimatları .

Bu yüzden, bir karma tablosu gerçekten bir anahtara dayalı değerleri kaydetmez; o anahtarın karma versiyonuna dayanarak değerleri saklar .


1
karma tablo ile ne demek istediğinizi bağlıdır. Perl, Java ve C # gibi dillerde sunulan veri yapısı, dahili olarak atıfta bulunduğunuz karma tablo türünü kullanarak size bir değer-değer eşlemesi sağlar.
reinierpost

10

karma tabloları çünkü kullanmanın bu şekilde adlandırılır hash kodu ve "kesim gıda" ile ilgili var.

Bunun gibi düşünün - güzel güzel objenizi, bir meyvenin gibi alın, sonra hash edin, böylece başka bir şey gibi görünmeye başlar - sadece bir sayı - artık daha fazla yapı yok. Bu "kesilmiş yiyecek" parçası karmakarışık masasında güzel nesnenizi bulmak için kullanılır.

  • Güzel nesnenden daha çirkin görünüyor? belki - ama hızlı bulmaya yardım eder - mesele bu. oh ve kesin olan o eşsiz değil.
     
    Karma kodu, güzel nesnenizin aynı karma koduna sahip başkalarının küçük bir şirketinde oturduğu masada bir kova bulur . Bu küçük şirkette, nesne, eşitlik kontrolü kullanılarak aranır - ki bu, karma aramadan çok daha yavaş olması beklenir ancak bunlardan yalnızca birkaçı olduğundan büyük bir sorun değildir (diğer nesnelerin çoğu, hızlı karma sayesinde zaten göz ardı edilir) .

3

Karma (küçük parçalara ayırma, parçalama vb.) Bir girdi alır (yiyecek veya bazen süpervizanlar) ve onu nispeten homojen bir çıktıya dönüştürür. Yani, başlangıçta sahip oldukların önemi yok, sonunda sadece karmaşın var. Ve bir kaşık dolusu kaşık, girdinin ne olduğunu (karıştıma makinenizin iyi karıştığını varsayarsak) belirlemede tüm karışma kadar yararlıdır.
Dolayısıyla, karma, herhangi bir yenilebilir veya kötü nesneyi, iki farklı nesnenin farklı hashlar ürettiği, iki eşit nesnenin ise eşit hashlar ürettiği bir kaşık kaşığı haline getirebilir. Bunun anlamı, eğer iki süpervizör makinenizin içine düşerse, birinin diğerinin klonu olup olmadığını belirlemek için karma değerlerini karşılaştırmak yeterlidir.

Bir anlamda bilgisayar bilimlerindeki hash fonksiyonları biraz benzerdir. Farklı bir boyut ve anlambilim girdisi alıyorlar ve -çok şey basitçe - sadece parçalara ayırıyorlar ve bunları karıştırıyorlar ve elde edilen diziyi tekrar parçalara ayırıyorlar ve etrafa karıştırıyorlar. Sonunda, girdiğiniz girdiden bir kaşık (n bayt) elde edersiniz.


Bununla birlikte, ihmal ile süper kötü adam, aynı parametreyi, belirli bir parametreye sahip bir süper kahraman ile aynı şekilde geri getirebilir; çünkü karma, benzersizliği dikte etmez. Sonuçta karma çarpışmalar var ... çarpışmadan sonra yaptıklarınız ...
Rig
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.