หลังจากเรียนรู้ว่ามันคืออะไรเกี่ยวกับฉันคิดว่าการเขียนคำอธิบายที่ง่ายกว่าหวังผ่านการเปรียบเทียบ:
สรุป: แฮชโค้ดคืออะไร?
- มันเป็นลายนิ้วมือ เราสามารถใช้ลายนิ้วมือนี้เพื่อระบุคนที่สนใจ
อ่านด้านล่างสำหรับรายละเอียดเพิ่มเติม:
คิด Hashcode เมื่อเราพยายามระบุคนที่ไม่เหมือนใคร
ฉันเป็นนักสืบโดยมองหาอาชญากร ให้เราเรียกเขาว่า Cruel (เขาเป็นฆาตกรที่มีชื่อเสียงเมื่อตอนที่ฉันยังเป็นเด็ก - เขาบุกเข้าไปในบ้านที่ถูกลักพาตัวและฆ่าเด็กผู้หญิงที่น่าสงสารทิ้งร่างของเธอและเขาก็ยังอยู่ในสภาพหลวม - แต่นั่นเป็นเรื่องแยกต่างหาก) Mr Cruel มีลักษณะพิเศษบางอย่างที่ฉันสามารถใช้เพื่อระบุตัวตนของเขาท่ามกลางทะเลของผู้คน เรามี 25 ล้านคนในประเทศออสเตรเลีย หนึ่งในนั้นคือ Mr Cruel เราจะหาเขาเจอได้อย่างไร?
วิธีที่ไม่ดีในการระบุตัวตนของนายโหดร้าย
เห็นได้ชัดว่า Mr Cruel มีดวงตาสีฟ้า นั่นไม่ได้ช่วยอะไรมากนักเพราะเกือบครึ่งหนึ่งของประชากรในออสเตรเลียก็มีดวงตาสีฟ้าเช่นกัน
วิธีที่ดีในการระบุตัวตนของนายโหดร้าย
ฉันสามารถใช้อะไรได้อีก ฉันรู้: ฉันจะใช้ลายนิ้วมือ!
ข้อดี :
- มันยากจริงๆที่คนสองคนจะมีลายนิ้วมือเหมือนกัน (เป็นไปไม่ได้ แต่ไม่น่าเป็นไปได้มาก)
- ลายนิ้วมือของ Mr Cruel จะไม่เปลี่ยนแปลง
- ทุกส่วนของสิ่งมีชีวิตทั้งหมดของ Mr Cruel: รูปร่างหน้าตาสีผมบุคลิกภาพนิสัยการกินและอื่น ๆ จะต้องสะท้อนให้เห็นในลายนิ้วมือของเขาเช่นถ้าเขามีน้องชาย (ซึ่งคล้ายกันมาก แต่ไม่เหมือนกัน) - จากนั้นทั้งสองควรมีลายนิ้วมือที่แตกต่างกัน ฉันพูดว่า "ควร" เพราะเราไม่สามารถรับประกันได้ 100% ว่าคนสองคนในโลกนี้จะมีลายนิ้วมือที่แตกต่างกัน
- แต่เราสามารถรับประกันได้เสมอว่า Mr Cruel จะมีลายนิ้วมือเหมือนกันเสมอและลายนิ้วมือของเขาจะไม่เปลี่ยนแปลง
ลักษณะข้างต้นโดยทั่วไปทำให้ฟังก์ชั่นแฮชดี
ดังนั้นการจัดการกับ 'การชน' คืออะไร
ลองจินตนาการดูว่าถ้าฉันเป็นผู้นำและฉันพบว่ามีใครบางคนที่เข้ากับลายนิ้วมือของ Mr Cruel หมายความว่าฉันเจอ Mr Cruel แล้วหรือยัง?
........ บางที! ฉันต้องมองให้ใกล้ขึ้น ถ้าฉันใช้ SHA256 (ฟังก์ชั่นคร่ำครวญ) และฉันกำลังมองหาในเมืองเล็ก ๆ ที่มีเพียง 5 คน - แล้วมีโอกาสที่ดีมากที่ฉันได้พบเขา! แต่ถ้าฉันใช้ MD5 (ฟังก์ชั่นแฮชที่มีชื่อเสียงอีกอัน) และตรวจสอบลายนิ้วมือในเมืองที่มีคน +2 ^ 1,000 คนมันเป็นความเป็นไปได้ที่ค่อนข้างดีที่คนสองคนที่แตกต่างกันโดยสิ้นเชิงอาจมีลายนิ้วมือเหมือนกัน
ดังนั้นอะไรคือประโยชน์ของสิ่งนี้อย่างไรก็ตาม
ประโยชน์ที่แท้จริงเพียงอย่างเดียวของแฮชโค้ดคือถ้าคุณต้องการใส่อะไรลงในตารางแฮชและด้วยตารางแฮชที่คุณต้องการค้นหาวัตถุอย่างรวดเร็ว - และนั่นคือสิ่งที่รหัสแฮชเข้ามาพวกเขาอนุญาตให้คุณค้นหาสิ่งต่าง ๆ ในตารางแฮช อย่างรวดเร็ว. มันเป็นแฮ็คที่ช่วยเพิ่มประสิทธิภาพได้อย่างมาก แต่มีค่าใช้จ่ายเล็กน้อยที่แม่นยำ
ลองจินตนาการว่าเรามีโต๊ะแฮชที่เต็มไปด้วยผู้คน 25 ล้านคนในออสเตรเลีย Mr Cruel อยู่ที่ไหนซักแห่งในนั้น ..... เราจะหาเขาเจอได้เร็วแค่ไหน? เราจำเป็นต้องจัดเรียงพวกเขาทั้งหมด: เพื่อค้นหาการแข่งขันที่อาจเกิดขึ้นหรือเพื่อหาผู้ต้องสงสัยที่อาจเกิดขึ้น คุณไม่ต้องการพิจารณาคุณสมบัติที่เป็นเอกลักษณ์ของแต่ละคนเพราะอาจใช้เวลานานเกินไป คุณจะใช้อะไรแทน คุณต้องการใช้รหัสลับ! hashcode สามารถบอกคุณได้ว่าคนสองคนนั้นแตกต่างกันหรือไม่ ไม่ว่า Joe Bloggs ไม่ใช่ Mr Cruel ถ้าภาพพิมพ์ไม่ตรงกันคุณก็รู้ว่าไม่ใช่ Mr Cruel แน่นอน แต่ถ้าพิมพ์ลายนิ้วมือตรงกันจากนั้นขึ้นอยู่กับฟังก์ชั่นแฮชที่คุณใช้โอกาสที่คุณจะพบคนของคุณค่อนข้างดีอยู่แล้ว แต่มันไม่ได้ 100% วิธีเดียวที่คุณมั่นใจได้คือการสอบสวนเพิ่มเติม: (i) เขา / เธอมีโอกาส / แรงจูงใจ (ii) พยาน ฯลฯ เป็นต้น
เมื่อคุณใช้คอมพิวเตอร์หากวัตถุสองชิ้นมีค่ารหัสแฮชเหมือนกันคุณต้องตรวจสอบเพิ่มเติมว่าวัตถุนั้นเท่ากันจริงหรือไม่ เช่นคุณต้องตรวจสอบว่าวัตถุนั้นมีความสูงเท่ากันน้ำหนักเดียวกันหรือไม่ถ้าจำนวนเต็มเท่ากันหรือว่า customer_id เป็นการจับคู่แล้วจึงสรุปว่าเป็นวัตถุเดียวกันหรือไม่ สิ่งนี้มักจะทำโดยการใช้ IComparer หรืออินเทอร์เฟซ IEquality
สรุปคีย์
ดังนั้นโดยทั่วไป hashcode เป็นลายนิ้วมือ
- คนสองคน / วัตถุที่แตกต่างกันในทางทฤษฎียังคงมีลายนิ้วมือเหมือนกัน หรือในคำอื่น ๆ หากคุณมีลายนิ้วมือสองอันที่เหมือนกัน ......... ดังนั้นพวกเขาไม่จำเป็นต้องมาจากบุคคล / วัตถุเดียวกัน
- Buuuuuut บุคคล / วัตถุเดียวกันจะส่งคืน
ลายนิ้วมือเดียวกันเสมอ
- ซึ่งหมายความว่าหากวัตถุสองรายการส่งคืนรหัสแฮชที่แตกต่างกันคุณจะทราบได้อย่างแน่นอน 100% ว่าวัตถุเหล่านั้นแตกต่างกัน
ใช้เวลา 3 นาทีในการทำให้หัวของคุณดีขึ้น บางทีอ่านมันสองสามครั้งจนกว่ามันจะสมเหตุสมผล ฉันหวังว่าสิ่งนี้จะช่วยให้ใครบางคนเพราะฉันเสียใจที่ต้องเรียนรู้ทุกอย่าง!