İşte layman'ın terimleriyle ilgili bir açıklama.
Bir kütüphaneyi kitaplarla doldurmak istediğinizi varsayalım ve sadece orada doldurmakla kalmaz, aynı zamanda ihtiyacınız olduğunda onları tekrar kolayca bulmak istersiniz.
Yani, bir kitabı okumak isteyen kişi kitabın başlığını ve önyükleme yapmak için tam başlığı biliyorsa, o zaman alması gereken tek şey budur. Başlık ile kişi, kütüphanecinin yardımıyla, kitabı kolayca ve hızlı bir şekilde bulabilmelidir.
Peki, bunu nasıl yapabilirsin? Açıkçası, her kitabı nereye koyacağınıza dair bir tür liste tutabilirsiniz, ancak daha sonra kütüphanede arama yapmakla aynı sorun yaşarsınız, listeyi aramanız gerekir. Kabul edilirse, liste daha küçük ve aranması daha kolay olur, ancak yine de kütüphanenin (veya listenin) bir ucundan diğerine sıralı olarak aramak istemezsiniz.
Kitabın başlığıyla bir kerede size doğru noktayı verebilecek bir şey istiyorsunuz, bu yüzden tek yapmanız gereken sadece sağ rafa doğru ilerlemek ve kitabı almak.
Ama bu nasıl yapılabilir? Peki, kütüphaneyi doldurduğunuzda biraz önceden düşünülmüş ve kütüphaneyi doldurduğunuzda çok fazla iş var.
Kütüphaneyi bir uçtan diğer uca doldurmaya başlamak yerine, zeki küçük bir yöntem tasarlıyorsunuz. Kitabın başlığını alırsınız, bir raf numarası ve o rafa bir yuva numarası veren küçük bir bilgisayar programıyla çalıştırın. Kitabı buraya koyduğunuz yer burası.
Bu programın güzelliği, daha sonra, bir kişi kitabı okumak için geri geldiğinde, başlığı programdan bir kez daha besler ve başlangıçta verilen aynı raf numarasını ve yuva numarasını geri alırsınız ve bu kitabın bulunduğu yer.
Program, diğerlerinin de belirttiği gibi, karma algoritma veya karma hesaplama olarak adlandırılır ve genellikle içine beslenen verileri (bu durumda kitabın başlığı) alarak çalışır ve ondan bir sayı hesaplar.
Basitlik açısından, her harfi ve sembolü bir sayıya dönüştürdüğünü ve hepsini özetlediğini varsayalım. Gerçekte, bundan çok daha karmaşıktır, ama şimdilik bunu bırakalım.
Böyle bir algoritmanın güzelliği, aynı girişi tekrar tekrar beslerseniz, her seferinde aynı sayıyı tükürmeye devam etmesidir.
Tamam, temelde bir karma tablosu böyle çalışır.
Teknik şeyler aşağıdadır.
İlk olarak, numaranın boyutu var. Genellikle, böyle bir karma algoritmanın çıktısı, tipik olarak tablonuzdaki alandan çok daha büyük olan, çok sayıda bir aralık içinde bulunur. Diyelim ki kütüphanede tam bir milyon kitap için yerimiz var. Karma hesaplamanın çıktısı çok daha yüksek olan 0 ila bir milyar arasında olabilir.
Peki ne yapıyoruz? Modül hesaplaması adı verilen bir şey kullanıyoruz, temel olarak istediğiniz sayıya (yani bir milyar sayı) sayarsanız, ancak çok daha küçük bir aralıkta kalmak istiyorsanız, her daha küçük aralığın sınırına ulaştığınızda 0, ama büyük dizide ne kadar ilerlediğinizi takip etmeniz gerekiyor.
Karma algoritmanın çıktısının 0 ila 20 aralığında olduğunu ve belirli bir başlıktan 17 değerini aldığınızı varsayalım. Kütüphanenin boyutu sadece 7 kitapsa, 1, 2, 3, 4, 5, 6 sayarsınız ve 7'ye ulaştığınızda, 0'dan başlarsınız. 17 kez saymamız gerektiğinden, 1, 2, 3, 4, 5, 6, 0, 1, 2, 3, 4, 5, 6, 0, 1, 2, 3 ve son sayı 3'tür.
Tabii ki modül hesaplaması böyle yapılmaz, bölünme ve bir kalanla yapılır. 17'yi 7'ye bölmenin geri kalanı 3'tür (7, 14'te 14'e 2 kez gider ve 17 ile 14 arasındaki fark 3'tür).
Böylece kitabı 3 numaralı yuvaya koyarsınız.
Bu bir sonraki soruna yol açar. Çarpışmalar. Algoritma, kitapları boşluk bırakmanın bir yolu olmadığından, kitaplığı tam olarak doldurmaları (veya yapacaksanız karma tablo), her zaman daha önce kullanılmış bir sayıyı hesaplayacaktır. Kütüphane anlamında, bir kitap koymak istediğiniz rafa ve yuva numarasına ulaştığınızda, orada zaten bir kitap var.
Tablodaki başka bir noktayı elde etmek ( çift karma ) veya sadece size verilen alana yakın bir alan bulmak için (yani, yuvayı varsayarak önceki kitabın hemen yanında) verileri başka bir hesaplamaya çalıştırmak da dahil olmak üzere çeşitli çarpışma işleme yöntemleri vardır. lineer problama olarak da biliniyordu ). Bu, kitabı daha sonra bulmaya çalıştığınızda yapmanız gereken bazı kazmalarınız olduğu anlamına gelir, ancak yine de kütüphanenin bir ucundan başlamaktan daha iyidir.
Son olarak, bir noktada kütüphaneye kütüphanenin izin verdiğinden daha fazla kitap koymak isteyebilirsiniz. Başka bir deyişle, daha büyük bir kütüphane oluşturmanız gerekir. Kütüphanedeki kesin nokta kütüphanenin tam ve geçerli boyutu kullanılarak hesaplandığından, kütüphaneyi yeniden boyutlandırırsanız, hesaplamaların noktalarını bulmak için yapılan hesaplamalardan bu yana tüm kitaplar için yeni noktalar bulmak zorunda kalabilirsiniz. değişti.
Umarım bu açıklama kovalara ve fonksiyonlara göre biraz daha yeryüzündeydi :)