Hash fonksiyonu nedir?
Tüm bilgisayar bilimlerinde kullanılan bir şeydir.
Bir hash fonksiyonu, aldığı her girdi için sabit uzunlukta bir değer üreten bir fonksiyondur.
Tamam.
Bu ne anlama geliyor?
Burada bir MD5 hash üreteci var.
MD5 bir hash fonksiyonu türüdür ve SHA one, SHA 256 ve diğerlerini duymuş olabileceğiniz
pek çok türü vardır.
Bu hash fonksiyonunu kullanarak.
Bakalım yaparsam ne olacak.
Merhaba.
Bunu hemen anlıyorsunuz.
MD5 bu dizeyi hash eder ve bu saçmalığa dönüştürür.
Hash fonksiyonunun yaptığı da budur.
Ona bir girdi veririz ve fonksiyon rastgele bir desen oluşturur.
Şimdi hash fonksiyonlarının bazı önemli yönleri var.
Birincisi, tek yönlü olması.
Birine bunu verirsem, girdinin ne olduğu hakkında hiçbir fikri olmayacaktır.
Ve girdinin ne olduğuna dair herhangi bir ipucuna sahip olmam neredeyse imkansız.
İkincisi, oraya kaç kez merhaba koyarsam koyayım, hep aynı olacak.
Ama bir şeyi değiştirir değiştirmez, çıktıyı tamamen değiştirecek.
Merhaba'ya geri dönersem.
Beni izleyin, büyük H harfine, hatta büyük bir harfe dönüştü.
Yani beş D ile başlıyor çünkü büyük H yaparsam yine tamamen farklı oluyor.
Buna bakarak en azından şunu söyleyebiliriz.
Hmm.
Bunun ne işe yaradığını bilmiyorum, ancak bildiğim tek şey, ne olursa olsun, aynı girdiyi
verirsem, bana aynı sonucu vereceği.
Ancak bunu nasıl geri dönüştüreceğim hakkında hiçbir fikrim yok.
Merhaba.
Bağımsız ya da bağlantısız dediğimiz şey budur.
Farklı telaffuzlar var.
Hangisinin hangisi olduğundan tam olarak emin değilim, ancak bir girdi verilen bir fonksiyonun her zaman aynı çıktıyı
verdiğini söylemenin süslü bir yoludur.
Şimdi, bunu bir veri yapısında kullanmanın bir faydası ve neden kullanmak isteyeceğimiz,
gerçekten hızlı veri erişimi elde etmemizdir çünkü üzümleri veya sepet nokta üzümlerini bulmak için tek yapmam gereken üzümleri MD5 hash gibi bir şeye
aktarmaktır.
Bu numarayı benim için üretiyor ve bilgisayarımdaki hafızamda nerede olduğunu hemen biliyorum.
Ama bu bir adrese benzemiyor, değil mi?
Teknik olarak, hash tabloları için kullandığımız bir hash fonksiyonu üzümleri alacak, bir tür anlamsız
sayı üretecek ve daha sonra bu sayıya dayalı olarak sahip olduğu bir dizin alanına veya bir adres alanına dönüştürecektir.
Gördüğünüz gibi, karma tablolarla sıralı dizinlere sahip olduğumuz bir yarışın aksine, tek yapmamız gereken ona bir anahtar vermek ve o öğenin
belleğimizde tam olarak nerede olduğunu biliyoruz.
Ama merak ediyor olabilirsiniz, bu kara kutu hash fonksiyonu işleri yavaşlatmıyor mu?
Çünkü ne zaman bir özellik eklemek istesek.
Ve bir hash tablosuna üzüm ve 10.000 değeri.
Hafızada nereye koyacağımıza karar verebilmek için hash fonksiyonundan geçirmemiz gerekir.
Ve eğer iyi bir iş olduğunu fark ettiyseniz, bu büyük bir faktördür.
Bunun çok uzun sürmesini istemezsiniz çünkü belleğe her özellik eklediğinizde ya da belleğe her
özellik aldığınızda, yine her iki seferde de anahtar üzümleri nereden alınacağını bulmak için hash
fonksiyonuna gönderiyoruz.
Bunun gerçekten çok hızlı olması lazım.
Ve unutmayın, hash tabloları tüm dillerde mevcut olduğundan, gerçekten çok hızlı olan
optimum bir hash fonksiyonu ile uygulanırlar.
Bir yan not olarak.
SHA 256 gibi hash fonksiyonlarının bir hash oluşturması gerçekten uzun zaman alır.
Ve bu, kriptografi gibi daha uzun sürmesini istediğiniz yerlerde çok kullanılan aşırı karmaşık
bir karma işlevidir, ancak bu kursun kapsamı dışındadır.
Eğer ilgileniyorsanız, bu ikisi arasındaki farklara göz atmanızı tavsiye ederim.
İncelemek için.
Üzüm olan bir anahtarımız var.
Bunu, gerçekten çok hızlı bir şekilde bir şeyi hash edecek bir hash fonksiyonundan geçiriyoruz
ve ardından hash sonucu ne çıkarsa çıksın, bizim saklamak istediğimiz bir bellek adresine eşliyoruz.
Veriler 10.000 üzümdür.
Ve hashing fonksiyonları söz konusu olduğunda, bunu genellikle kullandığınız framework veya dile
bırakırsınız.
Ve genellikle bir zaman karmaşıklığı ya da büyük eski notasyon varsayıyoruz, çünkü bu gerçekten hızlı gerçekleşiyor.
Tamam.
Şimdi bu kara kutunun ne işe yaradığını anladığımıza göre, hash tabloları, neden yararlı oldukları ve bazı durumlarda
neden dizilerden daha iyi oldukları hakkında biraz daha konuşalım.