Neyle ilgili olduğunu öğrendikten sonra, benzetme yoluyla umarım daha basit bir açıklama yazmayı düşündüm:
Özet: Karma kod nedir?
- Bu bir parmak izi. Bu parmak izini ilgilendiğimiz kişileri belirlemek için kullanabiliriz.
Daha fazla ayrıntı için aşağıyı okuyun:
Birini Benzersiz Bir Şekilde Tanımlamaya çalışırken bir Hashcode düşünün
Ben bir suçluyu arayan bir dedektifim. Ona Bay Zalim diyelim. (Ben çocukken kötü şöhretli bir katildi - kaçırılan bir eve girdi ve fakir bir kızı öldürdü, vücudunu attı ve hala başıboş dolaşıyor - ama bu ayrı bir mesele). Bay Zalim, onu bir insan denizi arasında benzersiz bir şekilde tanımlamak için kullanabileceğim bazı tuhaf özelliklere sahiptir. Avustralya'da 25 milyon insanımız var. Bunlardan biri Bay Zalim. Onu nasıl bulabiliriz?
Bay Zalim'i Tanımlamanın Kötü Yolları
Görünüşe göre Bay Zalim'in mavi gözleri var. Bu pek yardımcı olmuyor çünkü Avustralya'daki nüfusun neredeyse yarısının mavi gözleri var.
Bay Zalim'i Tanımlamanın İyi Yolları
Başka ne kullanabilirim? Biliyorum: Parmak izi kullanacağım!
Avantajlar :
- İki kişinin aynı parmak izine sahip olması gerçekten zordur (imkansız değil, ama son derece olası değildir).
- Mr Cruel'in parmak izi asla değişmeyecek.
- Mr Cruel'in tüm varlığının her bir parçası: görünüşü, saç rengi, kişiliği, yeme alışkanlıkları vb. (İdeal olarak) parmak izine yansıtılmalıdır, öyle ki (çok benzer ama aynı olmayan) bir erkek kardeşi varsa - o zaman ikisi de farklı parmak izlerine sahip olmalıdır . "Olmalı" diyorum çünkü bu dünyadaki iki insanın farklı parmak izlerine sahip olacağını% 100 garanti edemeyiz.
- Ancak, Bay Zalim'in her zaman aynı parmak izine sahip olacağını ve parmak izinin ASLA değişmeyeceğini her zaman garanti edebiliriz.
Yukarıdaki özellikler genellikle iyi hash fonksiyonları sağlar.
Öyleyse 'Çarpışmalar' ile anlaşma nedir?
Bir ipucu bulsam ve Bay Cruel'in parmak izlerine uyan birini bulduğumu hayal edin. Bu, Bay Zalim'i bulduğum anlamına mı geliyor?
........ belki! Daha yakından bakmalıyım. SHA256 (hashing işlevi) kullanıyorsam ve sadece 5 kişiyle küçük bir kasabaya bakıyorsam - o zaman onu bulmam çok yüksek bir ihtimal! Ancak MD5 (başka bir ünlü karma işlevi) kullanıyorsam ve + 2 ^ 1000 kişinin bulunduğu bir kasabada parmak izlerini kontrol ediyorsam, tamamen farklı iki kişinin aynı parmak izine sahip olması oldukça iyi bir olasılıktır.
Öyleyse tüm bunların faydası nedir?
Karma kodların tek gerçek yararı, bir karma tabloya bir şey koymak istiyorsanız - ve karma tablolarla nesneleri hızlı bir şekilde bulmak istiyorsanız - ve karma kodun geldiği yer burasıdır. Karma tablolardaki şeyleri gerçekten bulmanızı sağlar hızlı bir şekilde. Bu, performansı büyük ölçüde artıran, ancak küçük bir doğruluk pahasına olan bir saldırıdır.
Öyleyse, Avustralya'da 25 milyon şüpheli olan insanlarla dolu bir hash masamız olduğunu hayal edelim. Mr Cruel oralarda bir yerde ..... Onu gerçekten çabuk nasıl bulabiliriz ? Bunların hepsini gözden geçirmeliyiz: potansiyel bir eşleşme bulmak veya potansiyel şüphelileri başka şekilde aklamak için. Her bir kişinin benzersiz özelliklerini dikkate almak istemezsiniz çünkü bu çok fazla zaman alır. Onun yerine ne kullanırdın? Bir karma kod kullanırsınız! Karma kod, iki kişinin farklı olup olmadığını size söyleyebilir. Joe Bloggs'un Bay Zalim olup olmadığı. Parmak izleri uyuşmuyorsa, kesinlikle Bay Zalim OLMADIĞINI biliyorsunuzdur. Ama parmak izleri uyuyorsao zaman kullandığınız hash fonksiyonuna bağlı olarak, erkeğinizi bulduğunuzda şansınız oldukça yüksektir. Ama% 100 değil. Emin olmanın tek yolu daha fazla araştırma yapmaktır: (i) bir fırsatı / nedeni var mıydı, (ii) tanıklar vb.
Bilgisayar kullanıyorsanız , iki nesne aynı karma kod değerine sahipse, bunların gerçekten eşit olup olmadıklarını yeniden araştırmanız gerekir. Örneğin, nesnelerin örneğin aynı yüksekliğe, aynı ağırlığa vb. sahip olup olmadığını, tam sayıların aynı olup olmadığını veya customer_id'nin bir eşleşme olup olmadığını kontrol etmeniz ve sonra aynı olup olmadıkları sonucuna varmanız gerekir. bu tipik olarak bir IComparer veya IEquality arabirimleri uygulanarak yapılabilir.
Anahtar Özeti
Yani temelde bir hashcode bir parmak izidir.

- İki farklı kişi / nesne teorik olarak hala aynı parmak izine sahip olabilir. Veya başka bir deyişle. Aynı ......... olan iki parmak iziniz varsa, ikisinin de aynı kişiden / nesneden gelmesi gerekmez.
- Buuuuuut, aynı kişi / nesne her zaman aynı parmak izini döndürür
.
- Bu, iki nesne farklı karma kodlar döndürürse , bu nesnelerin farklı olduğunu% 100 kesin olarak bildiğiniz anlamına gelir .
Yukarıdakilerin etrafından dolaşmak 3 dakika sürer. Belki mantıklı gelene kadar birkaç kez okuyun. Umarım bu birilerine yardımcı olur çünkü hepsini öğrenmek benim için çok keder aldı!