กลับไปหน้าบทความ

อ่าน 9 นาที

ฟังก์ชันแฮชที่สมบูรณ์แบบ

ใน วิทยาการคอมพิวเตอร์ ฟังก์ชัน แฮชที่สมบูรณ์แบบ h สำหรับเซต S คือ ฟังก์ชันแฮช ที่แมปองค์ประกอบที่แตกต่างกันใน S ไปยังเซตของ จำนวนเต็ม m โดยไม่มี การชนกัน ในทางคณิตศาสตร์ มันคือ...

ฟังก์ชันแฮชที่สมบูรณ์แบบ

ฟังก์ชันแฮชที่สมบูรณ์แบบสำหรับชื่อทั้งสี่ที่แสดงไว้
ฟังก์ชันแฮชที่สมบูรณ์แบบขั้นต่ำสำหรับชื่อทั้งสี่ที่แสดงไว้

ในวิทยาการคอมพิวเตอร์ฟังก์ชันแฮชที่สมบูรณ์แบบhสำหรับเซตSคือฟังก์ชันแฮชที่แมปองค์ประกอบที่แตกต่างกันในSไปยังเซตของ จำนวนเต็ม mโดยไม่มีการชนกันในทางคณิตศาสตร์ มันคือฟังก์ชันหนึ่งต่อหนึ่ง (injective function )

ฟังก์ชันแฮชที่สมบูรณ์แบบสามารถใช้สร้างตารางค้นหา ที่มี เวลาเข้าถึงกรณีเลวร้ายที่สุดคงที่ได้ฟังก์ชันแฮชที่สมบูรณ์แบบสามารถใช้สร้างตารางแฮช ได้เช่นเดียวกับ ฟังก์ชันแฮช อื่นๆ โดยมีข้อดีคือไม่ จำเป็นต้องมี การแก้ไขการชนกัน นอกจากนี้ หากคีย์ไม่ได้อยู่ในข้อมูลและหากทราบว่าคีย์ที่สอบถามจะถูกต้อง ก็ไม่จำเป็นต้องเก็บคีย์ไว้ในตารางค้นหา ซึ่งช่วยประหยัดพื้นที่ได้

ข้อเสียของฟังก์ชันแฮชที่สมบูรณ์แบบคือSจำเป็นต้องเป็นที่รู้จักสำหรับการสร้างฟังก์ชันแฮชที่สมบูรณ์แบบ ฟังก์ชันแฮชที่สมบูรณ์แบบที่ไม่ใช่แบบไดนามิกจำเป็นต้องสร้างใหม่หากS เปลี่ยนแปลง สำหรับ S ที่เปลี่ยนแปลงบ่อยอาจใช้ฟังก์ชันแฮชที่สมบูรณ์แบบแบบไดนามิกได้ แต่ต้องใช้พื้นที่เพิ่มเติม [ 1 ]ความต้องการพื้นที่ในการจัดเก็บฟังก์ชันแฮชที่สมบูรณ์แบบคือO ( n )โดยที่nคือจำนวนคีย์ในโครงสร้าง

พารามิเตอร์ประสิทธิภาพที่สำคัญสำหรับฟังก์ชันแฮชที่สมบูรณ์แบบ ได้แก่ เวลาในการประเมิน ซึ่งควรคงที่ เวลาในการสร้าง และขนาดของการแสดงผล

แอปพลิเคชัน

ฟังก์ชันแฮชที่สมบูรณ์แบบที่มีค่าในช่วงจำกัดสามารถใช้สำหรับการดำเนินการค้นหาที่มีประสิทธิภาพ โดยการวางคีย์จากS (หรือค่าที่เกี่ยวข้องอื่นๆ) ในตารางค้นหาที่จัดทำดัชนีโดยผลลัพธ์ของฟังก์ชัน จากนั้นสามารถทดสอบได้ว่าคีย์นั้นมีอยู่ในSหรือไม่ หรือค้นหาค่าที่เกี่ยวข้องกับคีย์นั้นโดยการค้นหาในเซลล์ของตาราง การค้นหาแต่ละครั้งใช้เวลาคงที่ในกรณีที่เลวร้ายที่สุด [ 2 ] ด้วยการแฮชที่สมบูรณ์แบบ ข้อมูลที่เกี่ยวข้องสามารถอ่านหรือเขียนได้ด้วยการเข้าถึงตารางเพียงครั้งเดียว[ 3 ]

ประสิทธิภาพของฟังก์ชันแฮชที่สมบูรณ์แบบ

พารามิเตอร์ประสิทธิภาพที่สำคัญสำหรับการแฮชที่สมบูรณ์แบบ ได้แก่ ขนาดการแสดงผล เวลาประเมิน เวลาสร้าง และข้อกำหนดช่วง(จำนวนเฉลี่ยของบัคเก็ตต่อคีย์ในตารางแฮช) [ 4 ]เวลาประเมินสามารถทำได้เร็วถึงO ( 1 )ซึ่งถือว่าเหมาะสมที่สุด[ 2 ] [ 4 ]เวลาสร้างต้องอย่างน้อยO ( n ) เนื่องจาก ต้องพิจารณาองค์ประกอบแต่ละอย่างในS และ Sประกอบด้วย องค์ประกอบ nตัว ขีดจำกัดล่างนี้สามารถทำได้ในทางปฏิบัติ[ 4 ]

ขอบล่างของขนาดการแสดงผลขึ้นอยู่กับmและnให้m = (1+ε) nและhเป็นฟังก์ชันแฮชที่สมบูรณ์แบบ ค่าประมาณที่ดีสำหรับขอบล่างคือบิตต่อองค์ประกอบ สำหรับการแฮชที่สมบูรณ์แบบขั้นต่ำε = 0ขอบล่างคือlog e ≈ 1.44บิตต่อองค์ประกอบ[ 4 ]

การก่อสร้าง

ฟังก์ชันแฮชที่สมบูรณ์แบบสำหรับเซตS เฉพาะ ที่สามารถประเมินค่าได้ในเวลาคงที่และมีค่าอยู่ในช่วงแคบๆ สามารถค้นหาได้ด้วยอัลกอริทึมแบบสุ่มในจำนวนการดำเนินการที่เป็นสัดส่วนกับขนาดของ S วิธีการสร้างแบบจำลองดั้งเดิมของFredman, Komlós & Szemerédi (1984)ใช้โครงสร้างสองระดับเพื่อแมปเซตSที่มีnองค์ประกอบไปยังช่วงของ ดัชนี O ( n )จากนั้นแมปแต่ละดัชนีไปยังช่วงของค่าแฮช ระดับแรกของการสร้างแบบจำลองของพวกเขาเลือกจำนวนเฉพาะขนาดใหญ่p (ใหญ่กว่าขนาดของเอกภพที่ ดึง Sมา) และพารามิเตอร์kและแมปแต่ละองค์ประกอบxของSไปยังดัชนี

หาก เลือก kแบบสุ่ม ขั้นตอนนี้มีแนวโน้มที่จะเกิดการชนกัน แต่จำนวนองค์ประกอบn iที่ถูกแมปไปยังดัชนีi เดียวกันพร้อมกัน มีแนวโน้มที่จะน้อย ระดับที่สองของการสร้างจะกำหนดช่วงที่ไม่ซ้ำกันของจำนวนเต็มO ( n i 2 ) ให้กับดัชนี i แต่ละตัว โดยใช้ชุดฟังก์ชันโมดูลาร์เชิงเส้นชุดที่สอง หนึ่งชุดสำหรับแต่ละดัชนีiเพื่อแมปสมาชิก x แต่ละตัวของ Sไปยังช่วงที่เกี่ยวข้องกับg ( x ) [ 2 ]

ดังที่Fredman, Komlós และ Szemerédi (1984)แสดงให้เห็น มีตัวเลือกของพารามิเตอร์kที่ทำให้ผลรวมของความยาวของช่วงสำหรับ ค่า g ( x )ที่แตกต่างกันn ค่า เป็นO ( n )นอกจากนี้ สำหรับแต่ละค่าของg ( x )จะมีฟังก์ชันโมดูลาร์เชิงเส้นที่แมปเซตย่อยที่สอดคล้องกันของSไปยังช่วงที่เกี่ยวข้องกับค่านั้น ทั้งkและฟังก์ชันระดับที่สองสำหรับแต่ละค่าของg ( x )สามารถหาได้ในเวลาพหุนามโดยการเลือกค่าแบบสุ่มจนกว่าจะพบค่าที่ใช้งานได้[ 2 ]

ฟังก์ชันแฮชเองต้องการพื้นที่จัดเก็บO ( n )เพื่อจัดเก็บk , pและฟังก์ชันโมดูลาร์เชิงเส้นระดับที่สองทั้งหมด การคำนวณค่าแฮชของคีย์x ที่กำหนด อาจทำได้ในเวลาคงที่โดยการคำนวณg ( x )ค้นหาฟังก์ชันระดับที่สองที่เกี่ยวข้องกับg ( x )และใช้ฟังก์ชันนี้กับxเวอร์ชันที่แก้ไขของรูปแบบสองระดับนี้ที่มีค่าจำนวนมากขึ้นในระดับบนสุดสามารถใช้เพื่อสร้างฟังก์ชันแฮชที่สมบูรณ์แบบซึ่งแมปSไปยังช่วงที่มีความยาวn + o ( n )ที่ เล็กกว่า [ 2 ]

วิธีการล่าสุดในการสร้างฟังก์ชันแฮชที่สมบูรณ์แบบได้รับการอธิบายโดยBelazzougui, Botelho & Dietzfelbinger (2009)ว่าเป็น "แฮช ย้าย และบีบอัด" ในที่นี้ ฟังก์ชันแฮชระดับแรกgยังถูกใช้เพื่อแมปองค์ประกอบไปยังช่วงของ จำนวนเต็ม rองค์ประกอบxSจะถูกเก็บไว้ใน Bucket B g(x ) [ 4 ]

จากนั้น ตามลำดับขนาดที่ลดลง องค์ประกอบของแต่ละบัคเก็ตจะถูกแฮชด้วยฟังก์ชันแฮชของลำดับฟังก์ชันแฮชแบบสุ่มโดยสมบูรณ์ที่เป็นอิสระ1 , Φ 2 , Φ 3 , ...)โดยเริ่มจากΦ 1หากฟังก์ชันแฮชไม่ก่อให้เกิดการชนกันสำหรับบัคเก็ต และค่าที่ได้ยังไม่ถูกครอบครองโดยองค์ประกอบอื่นจากบัคเก็ตอื่น ฟังก์ชันนั้นจะถูกเลือกสำหรับบัคเก็ตนั้น หากไม่เป็นเช่นนั้น ฟังก์ชันแฮชถัดไปในลำดับจะถูกทดสอบ[ 4 ]

ในการประเมินฟังก์ชันแฮชที่สมบูรณ์แบบh ( x )จำเป็นต้องบันทึกการแมป σ ของดัชนีบัคเก็ตg ( x )ลงบนฟังก์ชันแฮชที่ถูกต้องในลำดับเท่านั้น ส่งผลให้h(x) = Φ σ(g(x) ) [ 4 ]

สุดท้าย เพื่อลดขนาดการแสดงผล ( σ(i)) 0 ≤ i < rจะถูกบีบอัดให้อยู่ในรูปแบบที่ยังคงอนุญาตให้ประเมินผลได้ในO ( 1 ) [ 4 ]

วิธีการนี้ต้องการเวลาเชิงเส้นในnสำหรับการสร้าง และเวลาการประเมินคงที่ ขนาดของการแสดงผลอยู่ในO ( n )และขึ้นอยู่กับช่วงที่ได้ ตัวอย่างเช่น ด้วยm = 1.23n Belazzougui , Botelho & Dietzfelbinger (2009)ได้ขนาดการแสดงผลระหว่าง 3.03 บิต/คีย์ และ 1.40 บิต/คีย์ สำหรับชุดตัวอย่าง 10 ล้านรายการ โดยค่าที่ต่ำกว่าจะต้องการเวลาในการคำนวณที่สูงกว่า ขอบเขตล่างของพื้นที่ในสถานการณ์นี้คือ 0.88 บิต/คีย์[ 4 ]

รหัสเทียม

อัลกอริทึมแฮช ย้าย และบีบอัดคือ (1) แบ่ง S ออกเป็นกลุ่มB i  := g −1 ({i})∩S,0 ≤ i < r (2) เรียงลำดับกลุ่ม B iจากมากไปน้อยตามขนาด |B i | (3) กำหนดค่าเริ่มต้นให้กับอาร์เรย์ T[0...m-1] ด้วยค่า 0 (4) สำหรับทุก i ∈[r] ตามลำดับจาก (2) ให้ทำ (5) สำหรับ l 1,2,... (6) ทำซ้ำการสร้าง K i{ Φ l (x)|x B i } (6) จนกระทั่ง |K i |=|B i | และ K i ∩{j|T[j]=1}= ∅ (7) ให้ σ(i) := ความสำเร็จ l (8) สำหรับทุก j K i ให้ T[j]:= 1 (9) แปลง (σ i ) 0≤i<rให้เป็นรูปแบบบีบอัด โดยยังคงการเข้าถึง O ( 1 ) ไว้

ขอบเขตล่างของอวกาศ

การใช้ ข้อมูล O ( n )คำเพื่อจัดเก็บฟังก์ชันของFredman, Komlós & Szemerédi (1984)ถือว่าใกล้เคียงกับค่าที่เหมาะสมที่สุด: ฟังก์ชันแฮชที่สมบูรณ์แบบใดๆ ที่สามารถคำนวณได้ในเวลาคงที่ต้องใช้จำนวนบิตอย่างน้อยที่สุดที่เป็นสัดส่วนกับขนาดของS [ 5 ]

สำหรับฟังก์ชันแฮชสมบูรณ์แบบขั้นต่ำ ขอบเขตล่างของปริภูมิทฤษฎีสารสนเทศคือ

บิต/คีย์[ 4 ]

สำหรับฟังก์ชันแฮชที่สมบูรณ์แบบนั้น ขั้นแรกจะถือว่าช่วงของhถูกจำกัดด้วยnโดยที่m = (1+ε) nโดยใช้สูตรที่Belazzougui, Botelho & Dietzfelbinger (2009) กำหนดไว้ และสำหรับเอกภพ ที่มีขนาด| U | = uมีแนวโน้มเข้าสู่ค่าอนันต์ ขอบเขตล่างของปริภูมิคือ

บิต/คีย์ ลบด้วยlog( n )บิตโดยรวม[ 4 ]

ส่วนขยาย

การแฮชที่สมบูรณ์แบบแบบไดนามิก

การใช้ฟังก์ชันแฮชที่สมบูรณ์แบบนั้นเหมาะสมที่สุดในสถานการณ์ที่มีชุดข้อมูลขนาดใหญ่ที่ถูกสอบถามบ่อยครั้งSซึ่งแทบจะไม่ได้รับการอัปเดตเลย เนื่องจากการแก้ไขชุดข้อมูลS ใดๆ อาจทำให้ฟังก์ชันแฮชไม่สมบูรณ์แบบสำหรับชุดข้อมูลที่แก้ไขแล้ว วิธีแก้ปัญหาที่อัปเดตฟังก์ชันแฮชทุกครั้งที่ชุดข้อมูลถูกแก้ไขเรียกว่า การแฮช ที่สมบูรณ์แบบแบบไดนามิก[ 1 ]แต่วิธีการเหล่านี้ค่อนข้างซับซ้อนในการนำไปใช้

ฟังก์ชันแฮชสมบูรณ์แบบขั้นต่ำ

ฟังก์ชันแฮชสมบูรณ์แบบขั้นต่ำคือฟังก์ชันแฮชสมบูรณ์แบบที่แมป คีย์ nตัวไปยัง จำนวนเต็ม nตัวที่ต่อเนื่องกัน – โดยปกติจะเป็นตัวเลขตั้งแต่0ถึงn − 1หรือตั้งแต่1ถึงnวิธีการแสดงอย่างเป็นทางการมากขึ้นคือ: ให้jและkเป็นองค์ประกอบของเซตจำกัดSแล้วhเป็นฟังก์ชันแฮชสมบูรณ์แบบขั้นต่ำก็ต่อเมื่อh ( j ) = h ( k )หมายความว่าj = k ( ความเป็นหนึ่งเดียว ) และมีจำนวนเต็มa อยู่ ซึ่งช่วงของhคือa .. a + | S | − 1มีการพิสูจน์แล้วว่าแผนการแฮชสมบูรณ์แบบขั้นต่ำทั่วไปต้องการอย่างน้อยบิต/คีย์[ 4 ]สมมติว่าเป็นเซตขนาดที่มีจำนวนเต็มในช่วง เป็นที่ทราบกันดีว่าจะสร้างฟังก์ชันแฮชสมบูรณ์แบบขั้นต่ำที่ชัดเจนจากถึง ได้อย่างมีประสิทธิภาพโดย ใช้พื้นที่บิตและรองรับเวลาการประเมินคงที่[ 6 ]ในทางปฏิบัติ มีแผนการแฮชสมบูรณ์แบบขั้นต่ำที่ใช้ประมาณ 1.56 บิต/คีย์หากมีเวลาเพียงพอ[ 7 ] [ 8 ]

การแฮชที่สมบูรณ์แบบ k

ฟังก์ชันแฮชจะเรียกว่าk -perfect ก็ต่อเมื่อมีองค์ประกอบไม่เกินkตัวจากSที่ถูกแมปไปยังค่าเดียวกันในช่วงที่กำหนด อัลกอริทึม "hash, displace, and compress" สามารถใช้สร้าง ฟังก์ชันแฮช k -perfect ได้โดยอนุญาตให้มีการชนกันได้มากถึงkครั้ง การเปลี่ยนแปลงที่จำเป็นเพื่อให้บรรลุเป้าหมายนี้มีน้อยมาก และถูกเน้นไว้ในรหัสเทียม ที่ปรับปรุงแล้ว ด้านล่าง:

(4) สำหรับทุก i ∈[r] ตามลำดับจาก (2) ให้ทำ (5) สำหรับ l 1,2,... (6) ทำซ้ำการสร้าง K i{ Φ l (x)|x B i } (6) จนกระทั่ง |K i |=|B i | และ K i ∩{j| T[j]=k }= ∅ (7) ให้ σ(i) := ความสำเร็จ l (8) สำหรับทุก j K i กำหนดT[j]←T[j]+1

การรักษาระเบียบ

ฟังก์ชันแฮชที่สมบูรณ์แบบขั้นต่ำFจะรักษาลำดับไว้ได้ก็ต่อเมื่อกำหนดคีย์ในลำดับa 1 , a 2 , ..., a nและสำหรับคีย์ใดๆa jและa k , j < kหมายความว่าF ( a j ) < F( a k ) [ 9 ] ในกรณีนี้ ค่าของฟังก์ชันคือตำแหน่งของแต่ละคีย์ในลำดับที่เรียงแล้วของคีย์ทั้งหมด การใช้งานฟังก์ชันแฮชที่สมบูรณ์แบบขั้นต่ำที่รักษาลำดับไว้ได้โดยใช้เวลาเข้าถึงคงที่อย่างง่ายคือการใช้ฟังก์ชันแฮชที่สมบูรณ์แบบ (ธรรมดา) เพื่อจัดเก็บตารางค้นหาตำแหน่งของแต่ละคีย์ วิธีแก้ปัญหานี้ใช้บิต ซึ่งเหมาะสมที่สุดในกรณีที่ฟังก์ชันเปรียบเทียบสำหรับคีย์อาจเป็นค่าใดๆ ก็ได้[ 10 ]อย่างไรก็ตาม หากคีย์a 1 , a 2 , ..., a nเป็นจำนวนเต็มที่ดึงมาจากเอกภพก็เป็นไปได้ที่จะสร้างฟังก์ชันแฮชที่รักษาลำดับไว้ได้โดยใช้เพียงบิตของพื้นที่[ 11 ]ยิ่งไปกว่านั้น ขอบเขตนี้เป็นที่ทราบกันดีว่าเหมาะสมที่สุด[ 12 ]

แม้ว่าตารางแฮชที่มีขนาดเหมาะสมจะมีเวลาเฉลี่ย O(1) (เวลาคงที่เฉลี่ย) สำหรับการค้นหา การแทรก และการลบ แต่อัลกอริทึมตารางแฮชส่วนใหญ่ประสบปัญหาจากเวลาในกรณีที่เลวร้ายที่สุดที่อาจใช้เวลานานกว่ามาก เวลา O(1) ในกรณีที่เลวร้ายที่สุด (เวลาคงที่แม้ในกรณีที่เลวร้ายที่สุด) จะดีกว่าสำหรับแอปพลิเคชันหลายอย่าง (รวมถึงเราเตอร์เครือข่ายและแคชหน่วยความจำ ) [ 13 ] : 41

อัลกอริทึมตารางแฮชเพียงไม่กี่ตัวเท่านั้นที่รองรับเวลาค้นหา O(1) ในกรณีที่เลวร้ายที่สุด (เวลาค้นหาคงที่แม้ในกรณีที่เลวร้ายที่สุด) อัลกอริทึมเพียงไม่กี่ตัวที่รองรับได้แก่: การแฮชที่สมบูรณ์แบบ; การแฮชที่สมบูรณ์แบบแบบไดนามิก ; การแฮชแบบคูคู ; การแฮชแบบฮอปสก็อตช์ ; และ การแฮ ชแบบขยายได้[ 13 ] : 42–69

ทางเลือกที่ง่ายกว่าสำหรับการแฮชแบบสมบูรณ์ ซึ่งอนุญาตให้มีการอัปเดตแบบไดนามิกได้เช่นกัน คือการแฮชแบบคูคูแผนการนี้จะแมปคีย์ไปยังตำแหน่งสองตำแหน่งขึ้นไปภายในช่วง (ต่างจากการแฮชแบบสมบูรณ์ซึ่งแมปแต่ละคีย์ไปยังตำแหน่งเดียว) แต่จะทำในลักษณะที่สามารถกำหนดคีย์แบบหนึ่งต่อหนึ่งให้กับตำแหน่งที่แมปไว้ได้ การค้นหาด้วยแผนการนี้จะช้าลง เนื่องจากต้องตรวจสอบหลายตำแหน่ง แต่ถึงกระนั้นก็ใช้เวลาคงที่ในกรณีที่เลวร้ายที่สุด[ 14 ]

อ่านเพิ่มเติม

  • Richard J. Cichelli. ฟังก์ชันแฮชสมบูรณ์แบบขั้นต่ำที่ทำให้เข้าใจง่าย , Communications of the ACM, Vol. 23, Number 1, มกราคม 1980.
  • โธมัส เอช. คอร์เมน , ชาร์ลส์ อี. ไลเซอร์สัน , โรนัลด์ แอล. ริเวสต์และคลิฟฟอร์ด สไตน์ความรู้เบื้องต้นเกี่ยวกับอัลกอริทึมฉบับที่สาม สำนักพิมพ์ MIT, 2009. ISBN 978-0262033848ส่วนที่ 11.5: การแฮชที่สมบูรณ์แบบ หน้า 267, 277–282
  • ฟาเบียโน ซี. โบเตลโญ่, ราสมุส ปาห์และนิวิโอ ซิเวียนี่ "แฮช ที่สมบูรณ์แบบสำหรับแอปพลิเคชันการจัดการข้อมูล"
  • ฟาเบียโน ซี. โบเตลโญ และนิวิโอ ซิเวียนี่ "การแฮช ที่สมบูรณ์แบบภายนอกสำหรับชุดคีย์ที่มีขนาดใหญ่มาก"การประชุม ACM ครั้งที่ 16 เรื่องการจัดการข้อมูลและความรู้ (CIKM07), ลิสบอน, โปรตุเกส, พฤศจิกายน 2550
  • Djamal Belazzougui, Paolo Boldi, Rasmus Paghและ Sebastiano Vigna. "การแฮชที่สมบูรณ์แบบขั้นต่ำแบบโมโนโทน: การค้นหาตารางที่เรียงลำดับด้วยการเข้าถึง O(1)"ใน Proceedings of the 20th Annual ACM-SIAM Symposium On Discrete Mathematics (SODA), นิวยอร์ก, 2009. ACM Press.
  • Marshall D. Brain และ Alan L. Tharp. "การแฮชที่เกือบสมบูรณ์แบบของชุดคำขนาดใหญ่" ซอฟต์แวร์—การปฏิบัติและประสบการณ์ เล่มที่ 19(10), 967-078, ตุลาคม 1989. John Wiley & Sons.
  • Douglas C. Schmidt, GPERF: ตัวสร้างฟังก์ชันแฮชที่สมบูรณ์แบบ , รายงาน C++, SIGS, เล่มที่ 10, ฉบับที่ 10, พฤศจิกายน/ธันวาคม 1998
  • Hans-Peter Lehmann, Thomas Mueller, Rasmus Pagh, Giulio Ermanno Pibiri, Peter Sanders, Sebastiano Vigna, Stefan Walzer, "Modern Minimal Perfect Hashing: A Survey", arXiv : 2506.06536 , มิถุนายน 2025. กล่าวถึงพัฒนาการในสาขานี้หลังปี 1997
  • gperfเป็นโอเพนซอร์สที่เขียนด้วยภาษา C และ C++ สำหรับสร้างค่าแฮชที่สมบูรณ์แบบ (เร็วมาก แต่ใช้งานได้เฉพาะกับชุดข้อมูลขนาดเล็ก)
  • อัลกอริทึม Minimal Perfect Hashing (อัลกอริทึมของ Bob)โดย Bob Jenkins
  • cmph : ไลบรารีแฮชสมบูรณ์แบบขั้นต่ำในภาษาซี (C Minimal Perfect Hashing Library) ไลบรารีโอเพนซอร์สที่พัฒนาแฮชสมบูรณ์แบบ (ขั้นต่ำ) หลายรูปแบบ (ใช้งานได้กับชุดข้อมูลขนาดใหญ่)
  • Sux4J : โอเพนซอร์ส โมโนโทน มินิมอล เพอร์เฟคแฮชชิ่ง ในภาษา Java
  • MPHSharp : วิธีการแฮชที่สมบูรณ์แบบใน C#
  • BBHash : ฟังก์ชันแฮชสมบูรณ์แบบขั้นต่ำสุดในภาษา C++ แบบเฮดเดอร์ออน
  • Perfect::Hashคือเครื่องมือสร้างแฮชที่สมบูรณ์แบบในภาษา Perl ซึ่งแปลงเป็นโค้ดภาษา C มีส่วน "งานวิจัยก่อนหน้า" ที่น่าสนใจให้ศึกษาด้วย
ดึงข้อมูลมาจาก " https://en.wikipedia.org/w/index.php?title=Perfect_hash_function&oldid=1318938338 "

สรุปเนื้อหา

ข้อมูลสำคัญจากบทความ

ข้อมูลสำคัญเกี่ยวกับ ฟังก์ชันแฮชที่สมบูรณ์แบบ

ใน วิทยาการคอมพิวเตอร์ ฟังก์ชัน แฮชที่สมบูรณ์แบบ h สำหรับเซต S คือ ฟังก์ชันแฮช ที่แมปองค์ประกอบที่แตกต่างกันใน S ไปยังเซตของ จำนวนเต็ม m โดยไม่มี การชนกัน ในทางคณิตศาสตร์ มันคือ...

แอปพลิเคชัน

ฟังก์ชันแฮชที่สมบูรณ์แบบที่มีค่าในช่วงจำกัดสามารถใช้สำหรับการดำเนินการค้นหาที่มีประสิทธิภาพ โดยการวางคีย์จาก S (หรือค่าที่เกี่ยวข้องอื่นๆ) ใน ตารางค้นหา ที่จัดทำดัชนีโดยผลลัพธ์ของฟังก์ชัน จากนั้นสามารถทดสอบได้ว่าคีย์นั้นมีอยู่ใน S หรือไม่...

ประสิทธิภาพของฟังก์ชันแฮชที่สมบูรณ์แบบ

พารามิเตอร์ประสิทธิภาพที่สำคัญสำหรับการแฮชที่สมบูรณ์แบบ ได้แก่ ขนาดการแสดงผล เวลาประเมิน เวลาสร้าง และข้อกำหนดช่วง(จำนวนเฉลี่ยของบัคเก็ตต่อคีย์ในตารางแฮช) [ 4 ] เวลาประเมินสามารถทำได้เร็วถึง O ( 1 ) ซึ่งถือว่าเหมาะสมที่สุด [ 2 ] [ 4 ] เวลาสร้างต้องอย่างน้อย O...

การก่อสร้าง

ฟังก์ชันแฮชที่สมบูรณ์แบบสำหรับเซต S เฉพาะ ที่สามารถประเมินค่าได้ในเวลาคงที่และมีค่าอยู่ในช่วงแคบๆ สามารถค้นหาได้ด้วย อัลกอริทึมแบบสุ่ม ในจำนวนการดำเนินการที่เป็นสัดส่วนกับขนาดของ S วิธีการสร้างแบบจำลองดั้งเดิมของ Fredman, Komlós & Szemerédi (1984)...