पूर्णांक किनारों के भार के साथ आप सबसे बुरी स्थिति O(1)
जटिलता के साथ प्राथमिकता कतार प्राप्त करने के लिए बाल्टीिंग का उपयोग कर सकते हैं, लेकिन अतिरिक्त O(U)
अंतरिक्ष जटिलता।
एमएसटी एल्गोरिदम के भीतर आपने उल्लेख किया है कि आप इस पूर्णांक संरचना के साथ तुलना आधारित प्राथमिकता कतारों को प्रतिस्थापित करने में सक्षम होना चाहिए, और इसलिए जटिलता आवश्यकताओं में O(log(n))
depenedence को हटा दें। मुझे उम्मीद है कि आप O(n + m)
की शैली में एक समग्र जटिलता के साथ समाप्त हो जाएंगे।
मूलतः
आप सेटअप संकुचित लिंक्ड सूचियों, जहां प्रत्येक सूची द्वारा अनुक्रमित की लागत एक सेट है कि बाल्टी के साथ जुड़े (पूर्णांक!):
struct bucket_list
{
_cost; // array[0..N-1] holding current cost for each item
_head; // array[0..U-1] holding index of first item in each bucket
_next; // array[0..N-1] where _next[i] is the next item
// in a list for the ith item
_prev; // array[0..N-1] where _prev[i] is the last item
// in a list for the ith item
};
यह संरचना तथ्य पर आधारित है कि प्रत्येक आइटम कर सकते हैं केवल एक ही बाल्टी सूची में एक बार में रहें।
push(item, cost); // push an item onto the head of the appropriate bucket list
_pop(item, cost); // _pop an item from (anywhere!) within a bucket list
update(item, old_cost, new_cost); // move an item between buckets by combining
// push and _pop
इस संरचना एक प्राथमिकता कतार के रूप में आप बस एक सूचकांक स्कैन करने के लिए वर्तमान न्यूनतम बाल्टी पर इशारा करते हुए बनाए रखने का उपयोग करें:
इस संरचना आप इन कार्यों के लिए बुरी से बुरी हालत O(1)
जटिलता प्राप्त कर सकते हैं के आधार पर। जब आप अगली सबसे कम लागत वाली वस्तु प्राप्त करना चाहते हैं, तो आप बस इस बाल्टी से मुख्य आइटम पॉप करें। यदि बाल्टी खाली है तो आप अपनी बाल्टी इंडेक्स बढ़ाते हैं जब तक आपको एक खाली नहीं मिलता है।
बेशक अगर U
अतिरिक्त अंतरिक्ष जटिलता बहुत बड़ा हो जाता है, और बाल्टी पर वस्तुओं के एक दुर्लभ वितरण की संभावना इस तरह के दृष्टिकोण को अनैतिक बना सकती है।
स्रोत
2012-01-16 00:39:09
क्या लंबाई भी पूर्णांक होने के लिए प्रतिबंधित है, या केवल उस सीमा तक सीमित है? – harold
@ हेरोल्ड- वे पूर्णांक हैं। मैं एक सुधार पोस्ट करूंगा। – templatetypedef
कई स्रोतों का उल्लेख है कि उसके लिए एक रैखिक समय एल्गोरिदम है, लेकिन कुछ ऐसा लिंक जो मैं नहीं देख सकता। – harold