[การวิเคราะห์อัลกอริทึม] [ตารางไดนามิก] [ไบโนเมียลฮีพ] [เลซี่ไบโนเมียลฮีพ] [ฟิโบนักซี่ฮีพ] [สคริวฮีพ][รายการอ้างอิง]
![]()
ไบโนเมียล ฮีพ
(Binomial Heap)
นิยาม ต้นไม้ไบโนเมียล Bk เป็นต้นไม้ที่มีการเรียงลำดับ โดยที่
ต้นไม้ไบโนเมียล B0 จะประกอบด้วยโหนดโหนดเดียว | |
ต้นไม้ไบโนเมียล Bk จะประกอบด้วยต้นไม้ไบโนเมียล Bk-1 จำนวน 2 ต้นเชื่อมต่อกัน โดยรากของ Bk-1 ต้นหนึ่งจะมีลูกทางขวาสุดเป็นรากของ Bk-1 อีกต้นหนึ่ง |
ต้นไม้ไบโนเมียล B0 ถึง B3 แสดงได้ดังรูป
นิยาม ไบโนเมียล ฮีพ H เป็นรายการสะสมของต้นไม้ไบโนเมียล ที่มีคุณสมบัติ ดังนี้
| ข้อมูลในโหนดต่างๆของต้นไม้ไบโนเมียลแต่ละต้นในฮีพ H จะต้องมีการเรียงลำดับค่าแล้ว กล่าวคือค่าของโหนดใดๆ จะต้องมีค่ามากกว่าหรือเท่ากับค่าของโหนดพ่อของโหนดนั้นๆ | |
| มีต้นไม้ไบโนเมียล Bk สำหรับ k ใดๆ ได้อย่างมากเพียงหนึ่งต้นในฮีพ H |
สำหรับการวิเคราะห์ถัวเฉลี่ยจะขอใช้วิธีศักย์ โดยที่ฟังก์ชันศักย์คิดจากจำนวนของต้นไม้
การปฏิบัติการบนไบโนเมียล ฮีพ
| BINOMAIL-HEAP-MINIMUM ( H ) | |||
| 1. y <-- NIL | |||
| 2. x <-- head[H] | |||
| 3. min <-- |
|||
| 4. while x <> NIL | |||
| 5. | do if key[x] < min | ||
| 6. | then min <-- key[x] | ||
| 7. | y <-- x | ||
| 8. | x <-- sibling[x] | ||
| 9. return y | |||
| BINOMAIL-HEAP-UNION ( H1 , H2 ) | ||||
| 1. H <-- MAKE-BINOMAIL-HEAP( ) | ||||
| 2. head[H] <-- BINOMAIL-HEAP-MERGE ( H1 , H2 ) | ||||
| 3. free the objects H1 and H2 but not the lists they point to | ||||
| 4. if head[H] = NIL | ||||
| 5. | then return H | |||
| 6. prev-x <-- NIL | ||||
| 7. x <-- head[H] | ||||
| 8. next-x <-- sibling[x] | ||||
| 9. while next-x <-- NIL | ||||
| 10. | do if (degree[x] <> degree[next-x]) or (sibling[next-x]) <> NIL and degree[sibling[next-x]] = degree[x]) | |||
| 11. | then prev-x <-- x | |||
| 12. | x <-- next-x | |||
| 13. | else if key[x] < key[next-x] | |||
| 14. | then sibling[x] <-- sibling[next-x] | |||
| 15. | BINOMAIL-LINK(next-x,x) | |||
| 16. | else if prev-x = NIL | |||
| 17. | then head[H] <-- next-x | |||
| 18. | else sibling[prev-x] <-- next-x | |||
| 19. | BINOMAIL-LINK(x,next-x) | |||
| 20. | x <-- next-x | |||
| 21. | next-x <-- sibling[x] | |||
| 22. return H | ||||
| BINOMIAL-LINK(y,z) | ||||
| 1. p[y] <-- z | ||||
| 2. sibling[y] <-- child[z] | ||||
| 3. child[z] <-- y | ||||
| 4. degree[z] <-- degree[z]+1 | ||||
| ี้BINOMIAL-HEAP-INSERT (H,x) |
| 1. H' <-- MAKE-BINOMIAL-HEAP( ) |
| 2. p[x] <-- NIL |
| 3. child[x] <-- NIL |
| 4. sibling[x] <-- NIL |
| 5. degree[x] <-- 0 |
| 6. head[H'] <-- x |
| 7. H <-- BINOMIAL-HEAP-UNION(H,H') |
| BINOMIAL-HEAP-EXTRACT-MIN(H) |
| 1. find the root x with the minimum key in the root list of H, and remove x from the root list of H |
| 2. H' <-- MAKE-BINOMIAL-HEAP( ) |
| 3. Reverse the order of the linked list of x's children, and set head[H'] to point to the head of the resulting list |
| 4. H <-- BINOMIAL-HEAP-UNION(H,H') |
| 5. return x |
การจินตทัศน์
| การจินตทัศน์การวิเคราะหถัวเฉลี่ย ไบโนเมียลฮีพ ในการดำเนินงานการแทรก การลบโหนดที่มีค่าน้อยที่สุด และการลดค่าคีย์ | |
| การจินตทัศน์การวิเคราะหถัวเฉลี่ย ไบโนเมียลฮีพ ในการดำเนินงานการรวมฮีพ |
![]()
[การวิเคราะห์อัลกอริทึม] [ตารางไดนามิก] [ไบโนเมียลฮีพ] [เลซี่ไบโนเมียลฮีพ] [ฟิโบนักซี่ฮีพ] [สคริวฮีพ][รายการอ้างอิง]