Sau khi tìm hiểu tất cả về nó, tôi nghĩ sẽ viết một lời giải thích hy vọng đơn giản hơn thông qua sự tương tự:
Tóm tắt: Mã băm là gì?
- Đó là dấu vân tay. Chúng tôi có thể sử dụng dấu vân tay này để xác định những người quan tâm.
Đọc dưới đây để biết thêm chi tiết:
Hãy nghĩ về một Hashcode khi chúng ta cố gắng xác định duy nhất một ai đó
Tôi là một thám tử, tìm kiếm một tên tội phạm. Chúng ta hãy gọi anh ta là Mr Cruel. . Ông Cruel có những đặc điểm đặc biệt nhất định mà tôi có thể sử dụng để nhận dạng duy nhất ông ta giữa một biển người. Chúng tôi có 25 triệu người ở Úc. Một trong số họ là Mr Cruel. Làm thế nào chúng ta có thể tìm thấy anh ta?
Những cách xấu để xác định ông độc ác
Rõ ràng ông Cruel có đôi mắt xanh. Điều đó không giúp được gì nhiều vì gần một nửa dân số ở Úc cũng có đôi mắt xanh.
Cách tốt để xác định ông độc ác
Tôi có thể sử dụng cái gì khác? Tôi biết: Tôi sẽ sử dụng dấu vân tay!
Ưu điểm :
- Thực sự rất khó để hai người có cùng một dấu vân tay (không phải là không thể, nhưng cực kỳ khó xảy ra).
- Dấu vân tay của ông Cruel sẽ không bao giờ thay đổi.
- Mỗi một phần trong toàn bộ thực thể của ông Cruel: ngoại hình, màu tóc, tính cách, thói quen ăn uống, v.v ... phải được phản ánh (lý tưởng) trong dấu vân tay của ông, để nếu ông có một người anh em (rất giống nhau nhưng không giống nhau) - thì cả hai nên có dấu vân tay khác nhau . Tôi nói "nên" bởi vì chúng tôi không thể đảm bảo 100% rằng hai người trên thế giới này sẽ có dấu vân tay khác nhau.
- Nhưng chúng tôi luôn có thể đảm bảo rằng ông Cruel sẽ luôn có cùng dấu vân tay - và dấu vân tay của ông sẽ KHÔNG BAO GIỜ thay đổi.
Các đặc điểm trên thường làm cho các hàm băm tốt.
Vì vậy, những gì đối phó với 'Va chạm'?
Hãy tưởng tượng nếu tôi có được một khách hàng tiềm năng và tôi tìm thấy ai đó khớp với dấu vân tay của ông Cruel. Điều này có nghĩa là tôi đã tìm thấy Mr Cruel?
........có lẽ! Tôi phải xem xét kỹ hơn. Nếu tôi đang sử dụng SHA256 (một chức năng băm) và tôi đang tìm kiếm trong một thị trấn nhỏ chỉ có 5 người - thì rất có thể tôi đã tìm thấy anh ấy! Nhưng nếu tôi đang sử dụng MD5 (một chức năng băm nổi tiếng khác) và kiểm tra dấu vân tay trong một thị trấn có hơn 2 ^ 1000 người, thì có khả năng hai người hoàn toàn khác nhau có thể có cùng dấu vân tay.
Vì vậy, lợi ích của tất cả các cách này là gì?
Lợi ích thực sự duy nhất của mã băm là nếu bạn muốn đặt thứ gì đó vào bảng băm - và với bảng băm bạn muốn tìm nhanh các đối tượng - và đó là nơi mã băm xuất hiện. Chúng cho phép bạn tìm thấy những thứ trong bảng băm Mau. Đó là một bản hack giúp cải thiện hiệu năng một cách ồ ạt, nhưng với chi phí nhỏ là chính xác.
Vì vậy, hãy tưởng tượng chúng ta có một bảng băm chứa đầy người - 25 triệu nghi phạm ở Úc. Mr Cruel đang ở đâu đó trong đó ..... Làm thế nào chúng ta có thể tìm thấy anh ta thực sự nhanh chóng ? Chúng ta cần sắp xếp tất cả chúng: để tìm ra một đối thủ tiềm năng, hoặc để tha bổng cho các nghi phạm tiềm năng. Bạn không muốn xem xét các đặc điểm độc đáo của mỗi người vì điều đó sẽ mất quá nhiều thời gian. Bạn sẽ sử dụng cái gì thay thế? Bạn sẽ sử dụng mã băm! Một mã băm có thể cho bạn biết nếu hai người khác nhau. Cho dù Joe Bloggs không phải là ông độc ác. Nếu các bản in không khớp thì bạn biết chắc chắn đó không phải là Mr Cruel. Nhưng, nếu các dấu vân tay phù hợpsau đó tùy thuộc vào hàm băm bạn đã sử dụng, rất có thể bạn đã tìm thấy người đàn ông của mình khá tốt. Nhưng nó không phải là 100%. Cách duy nhất bạn có thể chắc chắn là điều tra thêm: (i) anh ấy / cô ấy có cơ hội / động cơ, (ii) nhân chứng, v.v.
Khi bạn đang sử dụng máy tính nếu hai đối tượng có cùng giá trị mã băm, thì bạn lại cần điều tra thêm xem chúng có thực sự bằng nhau không. ví dụ: Bạn phải kiểm tra xem các vật thể có cùng chiều cao, cùng trọng lượng, v.v., nếu các số nguyên giống nhau hay không, nếu khách hàng có khớp nhau không, rồi đưa ra kết luận liệu chúng có giống nhau không. điều này thường được thực hiện bằng cách triển khai giao diện IComparer hoặc IEquality.
Tóm tắt chính
Vì vậy, về cơ bản một mã băm là một dấu vân tay.
- Hai người / đối tượng khác nhau về mặt lý thuyết vẫn có thể có cùng dấu vân tay. Hay nói cách khác. Nếu bạn có hai dấu vân tay giống nhau ......... thì chúng không cần cả hai đến từ cùng một người / đối tượng.
- Buuuuuut, cùng một người / đối tượng sẽ luôn trả lại
cùng dấu vân tay .
- Điều đó có nghĩa là nếu hai đối tượng trả về mã băm khác nhau thì bạn biết chắc chắn 100% rằng các đối tượng đó là khác nhau.
Phải mất 3 phút để có được đầu của bạn xung quanh ở trên. Có lẽ đọc nó một vài lần cho đến khi nó có ý nghĩa. Tôi hy vọng điều này sẽ giúp được ai đó vì tôi đã mất rất nhiều đau buồn để học được tất cả!