Hash Tabloları: Milyonlarca Veride Bir Şeyi Anında Bulmanın Matematiği
Bir sözlükte kelime ararken sayfaları tek tek çevirmezsiniz; doğrudan ilgili harfe gidersiniz. Bilgisayarlar da benzer bir hile kullanır: hash tabloları sayesinde milyonlarca kayıt arasında aradığınızı neredeyse tek adımda bulurlar.

Aramanın Hızı Neden Önemli?
Telefonunuzda bir kişiyi ararken, uygulama rehberdeki binlerce kişiyi baştan sona taramaz. Bir web sitesi, milyonlarca kullanıcı arasından sizin hesabınızı milisaniyeler içinde bulur. Bu hız nereden geliyor? Cevabın büyük kısmı, bilgisayar biliminin en zarif fikirlerinden biridir: hash tablosu.
Önce alternatifin ne kadar yavaş olduğunu görelim. Sırasız bir listede bir öğeyi aramak, en kötü durumda tüm listeyi gezmek demektir. öğe varsa bu, ortalama karşılaştırma — yani liste büyüdükçe arama doğru orantılı yavaşlar. Buna denir. Bir milyon kayıtta bu, milyonlarca adım olabilir.
Hash tablosunun vaadi çarpıcıdır: kayıt sayısı ne olursa olsun, arama ortalama olarak sabit sayıda adımda biter. Buna denir. Bir milyon da olsa bir milyar da, ortalama hız değişmez. Peki bu nasıl mümkün?
Sihir: Anahtarı Adrese Çevirmek
Fikir aslında çok sezgiseldir. Diyelim ki adres bilgilerini saklayacaksınız. Verileri rastgele kutulara koyup sonra aramak yerine, her veriye, içeriğinden hesaplanan bir kutu numarası verirsiniz.
Bunu yapan şeye hash fonksiyonu denir. Hash fonksiyonu, herhangi bir veriyi (bir isim, bir kelime, bir numara) alıp onu bir sayıya — yani bir kutu adresine — dönüştürür. Örneğin çok basit bir hash, kelimedeki harflerin kodlarını toplayıp, kutu sayısına bölüp kalanını alabilir:
Burada kutu sayısıdır ve "bölümünden kalan" demektir; bu, sonucu daima ile arasında tutar — yani geçerli bir kutu numarası verir.
Artık bir veriyi saklamak için: hash'ini hesaplayın, çıkan kutuya koyun. Aramak için: aynı hash'i hesaplayın, doğrudan o kutuya bakın. Tüm tabloyu gezmek yok; tek bir hesap ve tek bir bakış. İşte sabit zamanın sırrı bu.
Çakışma: İki Veri Aynı Kutuya Düşerse?
Burada kaçınılmaz bir sorun var. Farklı iki veri, aynı kutu numarasını üretebilir — buna çakışma denir. Aslında çakışmalar şaşırtıcı derecede sık olur. Ünlü doğum günü paradoksu, bunun ne kadar yaygın olduğunu gösterir: bir odada sadece kişi varsa, ikisinin aynı doğum gününe sahip olma ihtimali 'yi geçer. Aynı mantıkla, çok sayıda veriyi sınırlı sayıda kutuya dağıtırken çakışma neredeyse kaçınılmazdır.
Çözümler vardır. En yaygını zincirlemedir: her kutuya tek bir veri değil, aynı kutuya düşenlerden oluşan küçük bir liste konur. O kutuya bakıp kısacık listeyi tararsınız. Liste kısa kaldığı sürece hız korunur. Bir diğer yöntem açık adreslemedir: kutu doluysa, belirli bir kurala göre bir sonraki boş kutuya geçilir.
Hızı Koruyan İki Şey
Hash tablosunun gerçekten hızlı kalması iki koşula bağlıdır:
- İyi bir hash fonksiyonu: Verileri kutulara mümkün olduğunca eşit dağıtmalı. Eğer tüm veriler aynı birkaç kutuya yığılırsa, tablo dev bir listeye dönüşür ve hız 'e geriler. İyi bir hash, çıktıları rastgele gibi serper.
- Yeterli boş alan (yük faktörü): Kutu sayısı, veri sayısına göre makul tutulmalıdır. Tablo dolmaya başlayınca çakışmalar artar; bu yüzden hash tabloları, dolduklarında otomatik olarak büyüyüp tüm verileri daha çok kutuya yeniden dağıtır.
Bu iki koşul sağlandığında, ortalama arama süresi sabit kalır. (Çok kötü şartlarda en kötü durum hâlâ yavaş olabilir; ama iyi tasarımda bu neredeyse hiç yaşanmaz.)
Her Yerdeler
Hash tabloları görünmez ama her yerdeler. Programlama dillerindeki "sözlük" veya "harita" yapıları, veritabanı indeksleri, önbellekler, parola doğrulama sistemleri ve hatta blok zinciri teknolojisi — hepsi bu fikrin üstüne kurulu. Bir web sayfasını saniyeler içinde açan altyapının büyük kısmı, sessizce çalışan hash tablolarıdır.
Hash tablosu, matematiksel bir fikrin (bir anahtarı bir adrese dönüştürmek) nasıl koca bir teknolojiyi mümkün kıldığının harika bir örneğidir. Aradığınız her şeyi "anında" bulmanızı sağlayan o görünmez hız, aslında basit bir bölme işleminin () ve akıllı bir dağıtımın eseridir.
Etiketler
Kendinizi Test Edin
Cevaplarınız profilinizde istatistik olarak saklanır.
1. Sırasız bir listede arama yapmanın en kötü durum karmaşıklığı nedir?
2. Hash fonksiyonu ne yapar?
3. İki farklı verinin aynı kutuya düşmesine ne denir?
4. Doğum günü paradoksu hash tablolarıyla nasıl ilgilidir?
5. Hash tablosunun hızlı kalması neye bağlıdır?
İlgili Yazılar
Kart Karıştırmanın Matematiği: Bir Desteyi Gerçekten Karıştırmak İçin Kaç Kez Yeter?
Bir iskambil destesini karıştırırken kaç kez yeterli olur? Üç mü, beş mi? Matematikçiler kesin cevabı buldu: yedi. Daha azı, desteyi düşündüğünüzden çok daha düzenli bırakır.
MatematikFinitizm: Bazı Matematikçiler Neden Sonsuzluğa İnanmaz?
Sonsuzluk, modern matematiğin her yerindedir. Ama küçük bir grup matematikçi, "asla tamamlanamayan" sonsuzun gerçek olmadığını, yalnızca sonlu olanın anlamlı olduğunu savunur. İlginç ve cesur bir karşı duruş.
MatematikSherlock Holmes, Moriarty ve Oyun Teorisi: Bir Kovalamacanın Matematiği
Holmes kaçıyor, Moriarty kovalıyor. Hangi tren istasyonunda inmeli? Bu edebi sahne, oyun teorisinin kurucularından birine "rakibini tahmin edilemez kılmanın" matematiğini ilham etti.