การผสมแฮชที่เกี่ยวข้อง


14

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

ปัญหามีดังต่อไปนี้: คุณต้องการทดสอบความเท่าเทียมกันของโครงสร้างเกือบทั้งหมดในเวลา O (1) โดยใช้วิธีการแปลงแป้นพิมพ์ที่เข้มงวด หากฟังก์ชันแฮชคือการเรียกซ้ำแบบโครงสร้างเช่น hash (x: xs) = ผสม x (hash xs) ดังนั้นคุณสามารถแคชค่าแฮชของรายการอย่างโปร่งใสและอัปเดตในเวลา O (1) เมื่อองค์ประกอบถูกพิจารณาลงในรายการที่มีอยู่ . อัลกอริทึมส่วนใหญ่สำหรับรายการที่แปลงแป้นพิมพ์มีการวนซ้ำแบบโครงสร้างดังนั้นวิธีนี้จึงใช้งานได้อย่างเด่นชัด

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

นี่คือที่ฉันเมื่อหกเดือนที่แล้วเมื่อฉันใช้เวลาหนึ่งวันครุ่นคิดและค้นคว้าปัญหานี้ ดูเหมือนว่าจะไม่ได้รับความสนใจในวรรณกรรมเกี่ยวกับโครงสร้างข้อมูล ฉันเจออัลกอริธึมการแปลงรหัส Tillich-Zemor จากการเข้ารหัส มันอาศัยการคูณเมทริกซ์ 2x2 (ซึ่งเชื่อมโยง) โดยที่บิต 0 และ 1 สอดคล้องกับเครื่องกำเนิดไฟฟ้าสอง subalgebra ที่มีรายการในฟิลด์ Galois

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

แก้ไข: ฉันสนใจคำถามนี้ที่ปลายทั้งสองของสเปกตรัมที่อ่อนนุ่มและเข้ารหัสลับ ในด้านที่นุ่มนวลขึ้นสามารถใช้สำหรับตารางแฮชที่ควรหลีกเลี่ยงการชน แต่ไม่ได้เป็นความหายนะ ในด้านที่แข็งแกร่งสามารถใช้สำหรับการทดสอบความเท่าเทียมกัน

คำตอบ:


2

เพิ่มเติม : หลังจากอ่านความคิดเห็นของ Per ฉันคิดว่าคำตอบนี้เป็นเพียงการเปลี่ยนแปลงของอัลกอริทึมคร่ำเครียด Tillich-Zemor ที่กล่าวถึงแล้วในคำถาม ฉันถอนคำตอบนี้ออกไป แต่ฉันหวังว่ามัน (และความคิดเห็น) อาจเป็นข้อมูลสำหรับผู้อ่านบางคน


แก้ไข : การแก้ไขก่อนหน้านี้ของคำตอบนี้แนะนำให้ใช้การดำเนินการ monoid ใน [ m ] แต่ตามที่ชี้ให้เห็นในความคิดเห็นมันเป็นที่พึงปรารถนาที่จะใช้การดำเนินงานกลุ่ม

คำตอบนี้เกี่ยวกับการสร้างฟังก์ชันแฮชสำหรับตารางแฮชที่ใช้งานง่าย ไม่รับประกันการพิสูจน์คุณภาพ

สมมติว่าคุณมีฟังก์ชั่นแฮชสำหรับแต่ละองค์ประกอบของลำดับเป็นชุด จำกัด [ m ] = {1, …, m }, การตีความแต่ละองค์ประกอบของ [ m ] เป็นองค์ประกอบในกลุ่ม จำกัดGและใช้ การทำงานเป็นกลุ่มในG ? คุณสามารถใช้การแมปใด ๆ จาก [ m ] ถึงGแต่เป็นที่พึงปรารถนาที่การแมปจะเป็นแบบฉีดเพื่อให้เราไม่สูญเสียข้อมูลในค่าแฮชของแต่ละองค์ประกอบ นอกจากนี้ยังเป็นที่พึงประสงค์ที่กลุ่มจะไม่เปลี่ยนเพื่อให้ฟังก์ชันแฮชสามารถจับความแตกต่างในลำดับขององค์ประกอบในลำดับ

ฉันไม่รู้เกี่ยวกับกลุ่ม จำกัด ที่อนุญาตการดำเนินการที่รวดเร็ว แต่ฉันเดาว่ากลุ่มดังกล่าวเป็นที่รู้จักกันในทฤษฎีการเข้ารหัส การใช้กลุ่มสมมาตรของคำสั่งอย่างน้อยmอาจไม่เลวร้ายนัก


1
ใช่ Hashing Tillich-Zemor ยังใช้การคูณเมทริกซ์ สิ่งที่คุณแนะนำไม่สามารถทำงานได้หากไม่มีการดัดแปลง la Tillich-Zemor เพิ่มเติม ตัวอย่างเช่นคุณต้องหลีกเลี่ยงการฝึกอบรมเอกพจน์หรือคุณได้รับการสะสมที่ 0 ทำลายสถิติแฮช Tillich-Zemor ทำงานเหนือทุ่งกาลัวส์; อัลกอริทึมรุ่นก่อนหน้าของพวกเขามีปัญหาเพราะพวกเขาใช้พหุนามสร้างที่มีสถิติไม่ดีดังนั้นฟิลด์ Galois โดยเฉพาะอย่างยิ่งอาจมีความสำคัญมาก
ต่อ Vognsen

@Per: ฉันเห็น ขอบคุณสำหรับคำอธิบาย ถ้าอย่างนั้นจะใช้กลุ่ม จำกัด ใด ๆ ฉันแก้ไขคำตอบนี้
Tsuyoshi Ito

ฉันเห็นด้วย. วิธีที่ดีที่สุดในการสร้างครอบครัวที่ไม่มีที่สิ้นสุดของกลุ่มคือกับกลุ่มเมทริกซ์บนฟิลด์ จำกัด (เปรียบเทียบทฤษฎีบทการจำแนกสำหรับกลุ่ม จำกัด แบบง่าย) ดังนั้นดูเหมือนว่าอัลกอริทึมของแบบฟอร์มนี้จะเป็นประเภท Tillich-Zemor
ต่อ Vognsen

@ เพอร์: ฉันไม่คุ้นเคยกับทฤษฎีกลุ่มและฉันไม่สามารถมองเห็นได้ว่าทำไมกลุ่มเมทริกซ์ในฟิลด์ จำกัด จึงดีกว่ากลุ่มสมมาตรในบริบทนี้ คุณอธิบายเพิ่มเติมเกี่ยวกับมันได้หรือไม่
Tsuyoshi Ito

1
มีเหตุผลสองสามข้อ สำหรับหนึ่งคุณไม่สามารถคำนวณได้อย่างมีประสิทธิภาพในกลุ่มสมมาตรขนาดใหญ่และคุณต้องการให้กลุ่มอยู่ในอันดับ 2 ^ 128 เพื่อต้านทานการชน ในทางตรงกันข้ามคุณสามารถคำนวณด้วยเมทริกซ์ผ่านฟิลด์ จำกัด 2 ลักษณะอย่างมีประสิทธิภาพมากโดยเฉพาะถ้าคุณเลือกพหุนามกำเนิดกระจัดกระจาย มันเป็นแค่การจัดการบิต
ต่อ Vognsen

1

ฟังก์ชันแฮชที่เกือบเป็นสากล

{ชั่วโมงa(x)=Σaผมxผมพอควรพี:aZพี}

ชั่วโมงa(x)+a|x|ชั่วโมงa(Y)=ชั่วโมงa(xY)a|x|O(1)Zพี

xYO(นาที(|x|,|Y|)/พี)


โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.