เหตุผลในการใช้คีย์ลดลงแทนที่จะใส่โหนดใหม่คือเพื่อให้จำนวนโหนดในคิวลำดับความสำคัญมีขนาดเล็กจึงทำให้จำนวนคิวลำดับความสำคัญทั้งหมดมีขนาดเล็กและค่าใช้จ่ายของยอดคงเหลือของคิวลำดับความสำคัญแต่ละรายการต่ำ
ในการใช้อัลกอริทึมของ Dijkstra ที่แทรกโหนดเข้าไปในคิวลำดับความสำคัญอีกครั้งด้วยลำดับความสำคัญใหม่ของพวกเขาโหนดหนึ่งจะถูกเพิ่มลงในคิวลำดับความสำคัญสำหรับแต่ละขอบ m ในกราฟ ซึ่งหมายความว่ามีการดำเนินการ m enqueue และการดำเนินการ m dequeue บนคิวลำดับความสำคัญโดยให้รันไทม์ทั้งหมดเป็น O (m T e + m T d ) โดยที่ T eคือเวลาที่ต้องจัดคิวในลำดับความสำคัญและ T dคือ เวลาที่ต้องใช้ในการจัดคิวจากคิวลำดับความสำคัญ
ในการใช้อัลกอริทึมของ Dijkstra ที่รองรับคีย์ลดลงคิวลำดับความสำคัญที่ถือโหนดจะเริ่มต้นด้วยโหนดในนั้นและในแต่ละขั้นตอนของอัลกอริทึมจะลบหนึ่งโหนด ซึ่งหมายความว่าจำนวนทั้งหมดของ heap dequeues คือ n แต่ละโหนดจะมีคีย์ลดลงที่เรียกว่าหนึ่งครั้งสำหรับแต่ละขอบที่นำเข้ามาดังนั้นจำนวนคีย์ลดลงทั้งหมดที่ทำได้สูงสุด m สิ่งนี้ให้รันไทม์เป็น (n T e + n T d + m T k ) โดยที่ T kคือเวลาที่ต้องใช้ในการเรียกคีย์ลดลง
แล้วสิ่งนี้มีผลอย่างไรกับรันไทม์? ขึ้นอยู่กับลำดับความสำคัญที่คุณใช้ นี่คือตารางสั้น ๆ ที่แสดงลำดับความสำคัญที่แตกต่างกันและเวลาทำงานโดยรวมของการใช้อัลกอริทึมของ Dijkstra:
Queue | T_e | T_d | T_k | w/o Dec-Key | w/Dec-Key
---------------+--------+--------+--------+-------------+---------------
Binary Heap |O(log N)|O(log N)|O(log N)| O(M log N) | O(M log N)
Binomial Heap |O(log N)|O(log N)|O(log N)| O(M log N) | O(M log N)
Fibonacci Heap | O(1) |O(log N)| O(1) | O(M log N) | O(M + N log N)
อย่างที่คุณเห็นในคิวลำดับความสำคัญส่วนใหญ่ไม่มีความแตกต่างในรันไทม์แบบไม่แสดงอาการและเวอร์ชันคีย์ลดลงไม่น่าจะทำได้ดีกว่ามากนัก อย่างไรก็ตามหากคุณใช้การใช้งานFibonacci heapของลำดับความสำคัญอัลกอริทึมของ Dijkstra จะมีประสิทธิภาพมากขึ้นอย่างไม่มีอาการเมื่อใช้การลดคีย์
ในระยะสั้นการใช้ปุ่มลดขนาดบวกกับคิวลำดับความสำคัญที่ดีสามารถทำให้รันไทม์ที่ไม่แสดงอาการของ Dijkstra เกินกว่าที่จะเป็นไปได้หากคุณยังคงทำ enqueues และ dequeues
นอกเหนือจากจุดนี้แล้วอัลกอริทึมขั้นสูงบางอย่างเช่นอัลกอริทึมเส้นทางที่สั้นที่สุดของ Gabow ใช้อัลกอริทึมของ Dijkstra เป็นรูทีนย่อยและอาศัยการใช้คีย์ลดลงอย่างมาก พวกเขาใช้ความจริงที่ว่าหากคุณทราบช่วงของระยะทางที่ถูกต้องล่วงหน้าคุณสามารถสร้างลำดับความสำคัญที่มีประสิทธิภาพสูงสุดตามข้อเท็จจริงนั้น
หวังว่านี่จะช่วยได้!