ความแตกต่างระหว่างฮีปและคิวลำดับความสำคัญ


36

ผมคิดเสมอว่ากองที่และคิวลำดับความสำคัญเป็นคำพ้อง - โครงสร้างข้อมูลนามธรรมที่สนับสนุนinsert, findMinและdeleteMinการดำเนินงาน

วรรณกรรมบางเล่มดูเหมือนจะเห็นด้วยกับฉัน - ตัวอย่างโครงสร้างข้อมูลที่ใช้งานได้อย่างแท้จริงของ Chris Okasaki (บทที่ 3)

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

ฉันมีความยากลำบากในการคืนดีกับความจริงที่ว่าฉันสามารถคิดถึงการใช้ฮีปมากกว่าหนึ่งครั้ง - กองซ้ายกองซ้อนทวิทวิสเปรย์กอง ...

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


11
อ่านหน้าวิกิพีเดียเกี่ยวกับลำดับความสำคัญ ( en.wikipedia.org/wiki/Priority_queue ) กล่าวว่า "ลำดับความสำคัญคิวสามารถนำมาใช้กับกองหรือวิธีการอื่น ๆ เช่นอาร์เรย์เรียงลำดับ" - และนั่นคือคำตอบจริง ๆ คำถามของคุณ.
Doc Brown

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

สิ่งต่าง ๆ ที่เลวร้ายยิ่งกว่านั้นคือสามารถใช้ไบนารีฮีปเป็นอาร์เรย์หรือเป็นต้นไม้ไบนารีได้ โชคดีที่ฉันยังไม่เคยได้ยินเรื่องของอาร์เรย์ที่นำมาใช้เป็นอย่างอื่น
Alexey

คำตอบ:


25

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

heap แบบคลาสสิกตามปกติจะเรียกว่าเป็น heap ขั้นต่ำ การใช้งานที่มีความซับซ้อนในช่วงเวลาที่ดี ( O(log n)เมื่อกดและป๊อป) และไม่มีค่าใช้จ่ายในหน่วยความจำ


4
คุณหมายถึงจะบอกว่าแตกต่างกันคือว่าในขณะที่พวกเขาร่วมกันดำเนินงานเดียวกัน ( findMin, deleteMin, insert) กองได้รับประกัน "ดี" ซับซ้อนสำหรับพวกเขาที่คิวลำดับความสำคัญทำไม่ได้?
Nicolas Rinaudo

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

6

เว็บไซต์นี้ให้คำอธิบายที่ชัดเจนมาก http://pages.cs.wisc.edu/~vernon/cs367/notes/11.PRIORITY-Q.html

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


1
ทราบว่าในบทสรุปของหน้าเว็บที่คุณเชื่อมโยงกับคิวลำดับความสำคัญของตัวเองที่เรียกว่าโครงสร้างข้อมูล
Alexey

2

ฉันคิดว่าสิ่งที่คุณเขียนเกี่ยวกับคอนกรีตกับนามธรรมนั้นถูกต้อง ในกรณีที่คุณพูดว่า splay heaps, binomial heaps เป็นการนำมาใช้ที่แตกต่างกันของ heaps แต่ฉันคิดว่ามันถูกต้องกว่าที่จะบอกว่ามันเป็น heap ประเภทต่าง ๆ ฉันคิดว่าเป็นหมวดหมู่ของการใช้งานที่โดยทั่วไปรับประกันไม่เพียง แต่อินเทอร์เฟซเดียวกัน แต่เวลาเข้าถึงเท่ากัน

คุณเห็นสิ่งนี้ด้วยแผนที่เชื่อมโยงและตารางแฮชและแผนภูมิการค้นหาแบบไบนารีเช่นกัน ตาราง Bsts และแฮชเป็นทั้งโครงสร้างข้อมูลคอนกรีตที่จัดเตรียมอินเตอร์เฟสนามธรรมของแผนผังที่เชื่อมโยง ต้นไม้สีดำสีแดงและต้นไม้ avl มีทั้ง bsts ที่สมดุลพร้อมการรับประกัน O ใหญ่และอินเทอร์เฟซเพิ่มเติมเดียวกัน (ตามลำดับการส่งผ่าน) พวกเขาเป็นต้นไม้ประเภทต่าง ๆ ที่ฉันอยากพูดมากกว่าการนำไปใช้งานต่าง ๆ ของต้นไม้ มีความแตกต่าง แต่เกี่ยวข้องกับการใช้งานแผนที่เชื่อมโยงอย่างใกล้ชิด

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