নোডগুলি পুনরায় প্রবেশের পরিবর্তে হ্রাস-কী ব্যবহার করার কারণটি হল অগ্রাধিকারের সারিতে নোডের সংখ্যা ছোট রাখা, এভাবে অগ্রাধিকারের সারির মোট সংখ্যাটি ছোট এবং প্রতিটি অগ্রাধিকারের সারির ব্যালেন্সের দাম কম রাখা।
ডিজকস্ট্রার অ্যালগরিদমের একটি বাস্তবায়নে নোডগুলিকে তাদের নতুন অগ্রাধিকারগুলির সাথে অগ্রাধিকারের সারিতে পুনরায় স্থাপন করে, গ্রাফের প্রতিটি মি প্রান্তের জন্য অগ্রণীতার সারিতে একটি নোড যুক্ত করা হয়। এর অর্থ হ'ল এম সারিবদ্ধ ক্রিয়াকলাপ এবং এম ডিক্যু ক্রিয়াকলাপগুলি অগ্রাধিকারের কাতারে রয়েছে, যা হে (এম টি ই + এম টি ডি ) এর মোট রানটাইম দেয় , যেখানে টি ই হল অগ্রাধিকারের সারিটিতে প্রান্তিককরণের জন্য প্রয়োজনীয় সময় এবং টি ডি হয় অগ্রাধিকার সারি থেকে সময় নির্ধারণের জন্য প্রয়োজনীয় সময়।
ডিজকস্ট্রার অ্যালগরিদম যা হ্রাস-কী সমর্থন করে তার বাস্তবায়নে নোডগুলি ধারণ করে এমন অগ্রাধিকারের সারিটি এর নোড দিয়ে শুরু হয় এবং অ্যালগরিদমের প্রতিটি ধাপে একটি নোড সরিয়ে দেয়। এর অর্থ হিপ ডিকুইজের মোট সংখ্যা এন। প্রতিটি নোডের হ্রাস-কী থাকবে এটির প্রতিটি প্রান্তের জন্য একবার এটির দিকে ঝুঁকির সাথে যোগাযোগ করা, সুতরাং হ্রাস-কীগুলির মোট সংখ্যাটি বেশিরভাগ মি। এটি (এন টি ই + এন টি ডি + এম টি কে ) এর একটি রানটাইম দেয় , যেখানে টি কে হ্রাস-কী বলার জন্য প্রয়োজনীয় সময়।
সুতরাং রানটাইমের উপর এর কী প্রভাব আছে? এটি নির্ভর করে আপনি কোন অগ্রাধিকারের সারিটি ব্যবহার করেন। এখানে একটি দ্রুত সারণী যা বিভিন্ন অগ্রাধিকার সারি এবং বিভিন্ন ডিজকস্ট্রার অ্যালগরিদম বাস্তবায়নের সামগ্রিক রানটাইমগুলি দেখায়:
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)
আপনি দেখতে পাচ্ছেন, বেশিরভাগ ধরণের অগ্রাধিকারের সারি সহ, অ্যাসিম্পটোটিক রানটাইমটিতে আসলেই কোনও পার্থক্য নেই এবং হ্রাস-কী সংস্করণটি আরও ভাল করার সম্ভাবনা নেই। তবে, আপনি যদি অগ্রাধিকারের সারিটির কোনও ফাইবোনাচি হিপ বাস্তবায়ন ব্যবহার করেন, তবে হ্রাস-কী ব্যবহার করার সময় ডিজকাস্ট্রার অ্যালগোরিদম asyptotically আরও দক্ষ হবে।
সংক্ষেপে, হ্রাস-কী এবং আরও ভাল অগ্রাধিকারের সারিটি ব্যবহার করে, আপনি যদি এনকুই এবং ডিকুইগুলি চালিয়ে যান তবে সম্ভব হ'ল ডিজজস্ট্রার অ্যাসেম্পটোটিক রানটাইমকে ছাড়িয়ে যেতে পারে।
এই বিন্দুটি ছাড়াও, আরও কয়েকটি উন্নত অ্যালগরিদম, যেমন গ্যাবোর সবচেয়ে সংক্ষিপ্ত পথ অ্যালগরিদম, ডিজকস্ট্রার অ্যালগরিদমকে সাবরুটিন হিসাবে ব্যবহার করে এবং হ্রাস-কী বাস্তবায়নের উপর প্রচুর নির্ভর করে। তারা এই সত্যটি ব্যবহার করে যে আপনি যদি আগে থেকে বৈধ দূরত্বের পরিধিটি জানেন তবে আপনি সেই সত্যের উপর ভিত্তি করে একটি সুপার দক্ষ অগ্রাধিকারের সারি তৈরি করতে পারেন।
আশাকরি এটা সাহায্য করবে!