การแฮชใช้การค้นหาต้นไม้แทนรายการ


11

ฉันกำลังดิ้นรนกับวัสดุการแฮ็กและการค้นหาแบบไบนารี และฉันอ่านว่าแทนที่จะใช้รายการสำหรับจัดเก็บรายการที่มีค่าแฮชเดียวกันมันเป็นไปได้ที่จะใช้แผนภูมิการค้นหาแบบไบนารี่ และฉันพยายามที่จะเข้าใจว่ากรณีที่เลวร้ายที่สุดและเวลาเฉลี่ยในการดำเนินการสำหรับกรณีใด

  1. insert,
  2. find และ
  3. delete

มีคุณค่า กรณีเฉลี่ย พวกเขาปรับปรุงด้วยความเคารพในรายการ?


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

คำตอบ:


4

สำหรับรายการแทรกค้นหาและลบตามลำดับใน , ,(n) รายการที่จัดเรียงแย่กว่า ค้นหาแบบไบนารีตัวเองสำหรับอาร์เรย์ที่เรียงลำดับซึ่งในการดำเนินงานอยู่ใน , ,(n) หากคุณต้องการการดำเนินการ "การแทรก" และ "ลบ" คุณต้องมีมากกว่าแค่การค้นหาแบบไบนารี่O(1)O(n)O(n)O(n)O(logn)O(n)

คุณอาจต้องการบางสิ่งบางอย่างเช่นต้นไม้ค้นหาแบบทวิภาค มันง่ายกว่ามากในการค้นหาข้อมูลอ้างอิงเมื่อคุณมีคำศัพท์ที่เหมาะสม การดำเนินการเหล่านี้อยู่ในเวลาเลวร้ายที่สุดกรณีตัวอย่างสำหรับการใช้งานโดยใช้ต้นไม้ AVLและต้นไม้สีแดงสีดำO(logn)


1
ถูกต้องทั้งหมด แต่ฉันไม่เห็นว่าจะตอบคำถามที่ถูกวาง
rgrig

มันไม่ได้เป็นคำถามเดียวกันตลอดเวลา (แม้แต่ประวัติการแก้ไขยังไม่มีคำถามเดิมแปลก ๆ ) ฉันสามารถอัปเดตคำตอบของฉันได้ แต่มันจะซ้ำซ้อนกับ Gilles
jmad

4

ในกรณีที่เลวร้ายที่สุดหากคุณจัดเก็บองค์ประกอบเท่านั้นที่มีค่าแฮชเดียวกันตารางแฮชจะจัดเก็บองค์ประกอบทั้งหมดในที่เก็บข้อมูลเดียวกัน หากคุณใช้รายการเพื่อเก็บองค์ประกอบของที่เก็บข้อมูลการค้นหาคือในกรณีที่เลวร้ายที่สุด (โดยที่คือจำนวนองค์ประกอบในตาราง - โดยทั่วไปแล้วคือจำนวนองค์ประกอบในที่เก็บข้อมูลที่ใหญ่ที่สุด) เพราะคุณต้องสำรวจรายการทั้งหมดหากคุณกำลังค้นหาองค์ประกอบที่ไม่ได้อยู่ในตาราง การค้นหาในเชิงบวก (ที่คุณรู้ว่ามีองค์ประกอบอยู่) มีความซับซ้อนเหมือนกัน: คุณต้องการหากคุณกำลังค้นหาองค์ประกอบสุดท้ายของรายการ การลบมีความซับซ้อนเหมือนกัน (คุณต้องการn n n - 1 = Θ ( n ) n - 1 O ( n ) O ( 1 )O(n)nnn1=Θ(n)n1การค้นหาถ้าคุณลบองค์ประกอบสุดท้าย) การแทรกยังเป็นหากคุณต้องการตรวจสอบองค์ประกอบที่มีอยู่หรือหากคุณอนุญาตให้มีการทำซ้ำ (ในกรณีนี้คุณสามารถแทรกองค์ประกอบที่จุดเริ่มต้นของรายการ)O(n)O(1)

ด้วยต้นไม้ค้นหาแบบทวิภาคที่สมดุลความซับซ้อนของกรณีที่แย่ที่สุดจะลดลงเป็นเนื่องจากความลึกของต้นไม้การค้นหาที่สมดุลเติบโตขึ้นแบบลอการิทึมในขนาดของต้นไม้โดยคำจำกัดความของการสร้างสมดุลO(logn)

ด้วยการกระจายข้อมูลเฉลี่ยองค์ประกอบจะกระจายไปทั่วที่เก็บข้อมูลที่แตกต่างกันและมีการชนกันเล็กน้อยดังนั้นความซับซ้อนจึงอยู่ใกล้กับโดยไม่คำนึงถึงโครงสร้างข้อมูลที่ใช้ในกรณีที่เกิดการชนO(1)

ด้วยการค้นหาแบบสุ่มในการกระจายข้อมูล adversarially เลือกที่ทุกองค์ประกอบในถังเดียวกันความยาวเฉลี่ยของรายการที่จะต้องเดินทางข้ามเป็นเพื่อให้ความซับซ้อนของการค้นหาโดยเฉลี่ยในสถานการณ์นี้คือ(N) ด้วยต้นไม้ค่าเฉลี่ยคือเช่นกรณีที่เลวร้ายที่สุดn / 2 Θ ( n ) Θ ( บันทึกn )nn/2Θ(n)Θ(logn)


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