2013-08-19 9 views
13

के साथ डिजस्ट्रा एल्गोरिदम मैं प्राथमिकता कतार के साथ डिज्कास्ट्रा एल्गोरिदम लागू करने की कोशिश कर रहा हूं, लेकिन मुझे समझ में नहीं आता कि यह कैसे काम करता है। मैंने वेब पर कई मार्गदर्शिकाएं पढ़ी हैं लेकिन मैं इस एल्गोरिदम को बिल्कुल समझ नहीं पा रहा हूं।न्यूनतम प्राथमिकता कतार

मेरा प्रश्न है: प्रत्येक नोड के लिए प्राथमिकता क्या है? मुझे लगता है कि यह आने वाले किनारे का वजन कम से कम मूल्य के साथ है, लेकिन मुझे यकीन नहीं है। क्या ये सच है?

दूसरा प्रश्न, जब मैं कतार की जड़ निकालने के लिए, यह कैसे काम करता है अगर यह नोड किसी न किसी नोड के साथ निकटता नहीं है?

+0

आप डिज्कस्ट्रा के रूप में के बारे में सोच तो "भारित रेखांकन के लिए चौड़ाई-पहले खोज," यह काफी आसान हो जाता है समझना। अपने सवालों के जवाब देने के लिए: 1. काफी नहीं - यह किनारों का न्यूनतम है ** ** तक की ओर जाता है। 2. बस बीएफएस के साथ, अगर यह किसी नजदीकी नोड के नजदीक नहीं है, तो इसे अभी तक नहीं देखा जा सकता है। यदि यह किसी नजदीकी नोड से * पहुंच योग्य * नहीं है, तो इसका कभी भी दौरा नहीं किया जाएगा। –

उत्तर

16

आपको priority queue का उपयोग करना चाहिए जहां vertexvertex से सबसे कम दूरी के साथ उच्च प्राथमिकता प्राप्त करेगा। प्रारंभ में, सभी vertices अनंत की कम से कम दूरी और PQ अंदर ग्राफ से (अपने edges के साथ) सभी vertices के डालने से शुरू करने vertex कम से कम दूरी होगा 0.

प्रारंभ होगा। PQ से vertex निकालें और अपने सभी edges का पता लगाएं। सभी निकटवर्ती vertices के साथ सबसे छोटी दूरी की तुलना करें और यदि vertex पर सबसे कम दूरी से कोई दूरी कम है, तो PQ के अंदर निकटतम vertex छोटी दूरी अपडेट करें। जारी रखें जबकि PQ खाली नहीं है। Vertices जो edges नहीं मिला अनंतता की सबसे छोटी दूरी के साथ खत्म हो जाएगा क्योंकि vertex से 'उन्हें प्राप्त करें' संभव नहीं है। हालांकि, उन्हें अभी भी PQ से निकाल दिया जाएगा।

स्यूडोकोड

initialize graph 
initialize pq 
pq.insertAll(graph.getVertices()) 

while (pq is not empty) { 
    vertex = pq.remove() 
    edges = vertex.getEdges() 

    for all edges { 
    destination = edge.getDestination() 
    newDistance = edge.getLength() + vertex.getDistance() 
    if (newDistance < destination.getDistance()) { 
     destination.setShortestDistance(newDistance) 
     pq.update(destination) 
    } 
    } 
} 

एमआईटी ओपन कोर्स वेयर लिंक:
Path problems overview
Dijkstra

+0

पाठ को या तो पढ़ना चाहिए "** जारी रखें ** जबकि ** पीक्यू खाली नहीं है" या "पीक्यू खाली होने तक जारी रखें"। स्यूडोकोड सही है। –

+0

@CorpusGigantus धन्यवाद, तय –

संबंधित मुद्दे