นี่คือคำอธิบายในแง่ของคนธรรมดา
สมมติว่าคุณต้องการเติมห้องสมุดด้วยหนังสือไม่ใช่แค่เก็บไว้ในห้องสมุด แต่คุณต้องการที่จะหามันได้ง่ายเมื่อคุณต้องการ
ดังนั้นคุณตัดสินใจว่าถ้าคนที่ต้องการอ่านหนังสือรู้ชื่อหนังสือและชื่อที่แน่นอนในการบูตนั่นคือทั้งหมดที่ควรจะเป็น ด้วยชื่อหนังสือบุคคลที่ได้รับความช่วยเหลือจากบรรณารักษ์จะสามารถหาหนังสือเล่มนี้ได้ง่ายและรวดเร็ว
ดังนั้นคุณจะทำอย่างไร เห็นได้ชัดว่าคุณสามารถเก็บรายการที่คุณใส่แต่ละเล่มไว้ได้บ้าง แต่แล้วคุณมีปัญหาเช่นเดียวกับการค้นหาห้องสมุดคุณต้องค้นหารายการ ได้รับแล้วรายการจะเล็กลงและค้นหาได้ง่ายขึ้น แต่คุณก็ยังไม่ต้องการค้นหาตามลำดับจากปลายด้านหนึ่งของห้องสมุด (หรือรายการ) ไปยังอีกด้านหนึ่ง
คุณต้องการบางสิ่งที่ชื่อหนังสือสามารถให้จุดที่ถูกต้องได้ในครั้งเดียวดังนั้นสิ่งที่คุณต้องทำก็แค่เดินไปที่ชั้นวางหนังสือแล้วหยิบหนังสือขึ้นมา
แต่จะทำได้อย่างไร ด้วยความสุขุมเล็กน้อยเมื่อคุณเติมห้องสมุดและทำงานมากมายเมื่อคุณเติมห้องสมุด
แทนที่จะเริ่มเติมไลบรารีจากปลายด้านหนึ่งไปอีกด้านหนึ่งคุณคิดวิธีเล็ก ๆ ที่ฉลาด คุณนำหัวเรื่องของหนังสือเล่มนี้ไปเรียกใช้ผ่านโปรแกรมคอมพิวเตอร์ขนาดเล็กซึ่งแยกหมายเลขชั้นวางและหมายเลขสล็อตบนชั้นวางนั้น นี่คือที่ที่คุณวางหนังสือ
ความสวยงามของโปรแกรมนี้คือในภายหลังเมื่อบุคคลกลับมาเพื่ออ่านหนังสือคุณจะป้อนชื่อหนังสือผ่านโปรแกรมอีกครั้งและรับหมายเลขหิ้งเดิมและหมายเลขสล็อตที่คุณได้รับมาคืนและนี่คือ ที่ตั้งของหนังสือ
โปรแกรมดังที่คนอื่น ๆ ได้กล่าวถึงแล้วเรียกว่าอัลกอริธึมการแฮชหรือการคำนวณแฮชและมักจะทำงานโดยนำข้อมูลที่ป้อนเข้ามา (ชื่อหนังสือในกรณีนี้) และคำนวณตัวเลขจากมัน
เพื่อความง่ายสมมติว่ามันแค่แปลงตัวอักษรและสัญลักษณ์แต่ละตัวให้เป็นตัวเลขแล้วนำมารวมกันทั้งหมด ในความเป็นจริงมันซับซ้อนกว่านั้นมาก แต่เราจะปล่อยไว้ก่อน
ความสวยงามของอัลกอริทึมดังกล่าวคือถ้าคุณป้อนอินพุตเดียวกันเข้าไปซ้ำแล้วซ้ำอีกมันจะคายหมายเลขเดิมทุกครั้ง
ตกลงดังนั้นโดยทั่วไปแล้วเป็นวิธีการทำงานของตารางแฮช
สิ่งทางเทคนิคดังต่อไปนี้
ครั้งแรกมีขนาดของจำนวน โดยปกติแล้วเอาต์พุตของอัลกอริทึมแฮชดังกล่าวจะอยู่ในช่วงของจำนวนมากซึ่งมักจะใหญ่กว่าพื้นที่ที่คุณมีในตาราง ตัวอย่างเช่นสมมติว่าเรามีที่ว่างสำหรับหนังสือหนึ่งล้านเล่มในห้องสมุด ผลลัพธ์ของการคำนวณแฮชอาจอยู่ในช่วง 0 ถึงหนึ่งพันล้านซึ่งสูงกว่ามาก
ดังนั้นสิ่งที่เราจะทำ? เราใช้สิ่งที่เรียกว่าการคำนวณโมดูลัสซึ่งโดยทั่วไปบอกว่าถ้าคุณนับจำนวนที่คุณต้องการ (เช่นหนึ่งพันล้านหมายเลข) แต่ต้องการอยู่ในช่วงที่เล็กกว่ามากทุกครั้งที่คุณถึงขีด จำกัด ของช่วงที่เล็กกว่านั้น 0 แต่คุณต้องติดตามว่าคุณมาไกลแค่ไหนในลำดับที่ยิ่งใหญ่
สมมติว่าเอาต์พุตของอัลกอริทึมแฮชอยู่ในช่วง 0 ถึง 20 และคุณจะได้รับค่า 17 จากหัวเรื่องเฉพาะ หากขนาดของห้องสมุดเป็นเพียงหนังสือ 7 เล่มคุณนับ 1, 2, 3, 4, 5, 6 และเมื่อคุณไปถึง 7 คุณจะเริ่มต้นที่ 0 เนื่องจากเราต้องนับ 17 ครั้งเรามี 1 2, 3, 4, 5, 6, 0, 1, 2, 3, 4, 5, 6, 0, 1, 2, 3 และตัวเลขสุดท้ายคือ 3
แน่นอนว่าการคำนวณโมดูลัสนั้นไม่ได้ทำอย่างนั้นมันทำกับการหารและส่วนที่เหลือ ส่วนที่เหลือของการหาร 17 ด้วย 7 คือ 3 (7 ไป 2 ครั้งเป็น 17 ที่ 14 และความแตกต่างระหว่าง 17 และ 14 คือ 3)
ดังนั้นคุณวางหนังสือในช่องหมายเลข 3
สิ่งนี้นำไปสู่ปัญหาต่อไป การชนกัน เนื่องจากอัลกอริทึมไม่มีวิธีการเว้นวรรคหนังสือเพื่อให้พวกเขาเติมห้องสมุดอย่างแน่นอน (หรือตารางแฮชถ้าคุณจะ) มันจะสิ้นสุดการคำนวณจำนวนที่เคยใช้มาก่อน ในแง่ของห้องสมุดเมื่อคุณไปถึงชั้นวางและหมายเลขสล็อตที่คุณต้องการใส่หนังสือเข้าไป
มีวิธีการจัดการการชนหลากหลายรวมถึงการเรียกใช้ข้อมูลไปยังการคำนวณอื่นเพื่อรับตำแหน่งอื่นในตาราง (การแฮ็กสองครั้ง ) หรือเพียงแค่ค้นหาช่องว่างที่อยู่ใกล้กับที่คุณได้รับ (เช่นถัดจากหนังสือเล่มก่อนหน้า เป็นที่รู้จักกันว่าการตรวจสอบเชิงเส้น ) นี่หมายความว่าคุณมีการขุดที่ต้องทำเมื่อพยายามหาหนังสือในภายหลัง แต่ก็ยังดีกว่าการเริ่มต้นที่ปลายด้านหนึ่งของห้องสมุด
ในที่สุดเมื่อถึงจุดหนึ่งคุณอาจต้องการเพิ่มหนังสือเข้าไปในห้องสมุดมากกว่าที่ห้องสมุดอนุญาต กล่าวอีกนัยหนึ่งคุณต้องสร้างห้องสมุดที่ใหญ่กว่า เนื่องจากจุดที่แน่นอนในห้องสมุดถูกคำนวณโดยใช้ขนาดที่แน่นอนและปัจจุบันของห้องสมุดมันจะไปตามว่าถ้าคุณปรับขนาดห้องสมุดคุณอาจต้องหาจุดใหม่สำหรับหนังสือทั้งหมดตั้งแต่การคำนวณเสร็จเพื่อหาจุดของพวกเขา มีการเปลี่ยนแปลง.
ฉันหวังว่าคำอธิบายนี้จะลงสู่พื้นดินมากกว่าถังและฟังก์ชั่น :)