दोनों को बिल्कुल सामान्य जेनेरिक एल्गोरिथ्म का उपयोग करके लागू किया जा सकता है:
Inputs:
G: Graph
s: Starting vertex (any for Prim, source for Dijkstra)
f: a function that takes vertices u and v, returns a number
Generic(G, s, f)
Q = Enqueue all V with key = infinity, parent = null
s.key = 0
While Q is not empty
u = dequeue Q
For each v in adj(u)
if v is in Q and v.key > f(u,v)
v.key = f(u,v)
v.parent = u
प्राइम के लिए, पास f = w(u, v)
और दिज्क्स्ट्रा के लिए f = u.key + w(u, v)
।
एक और दिलचस्प बात यह है कि ऊपर जेनेरिक भी चौड़ाई पहली खोज (बीएफएस) को लागू कर सकते हैं, हालांकि यह ओवरकिल होगा क्योंकि महंगी प्राथमिकता कतार वास्तव में आवश्यक नहीं है। जेएफएस में जेनेरिक अल्गोरिदम से ऊपर जाने के लिए, f = u.key + 1
जो 1 से सभी भार को लागू करने के समान है (यानी बीएफएस बिंदु ए से बी तक पार करने के लिए आवश्यक किनारों की न्यूनतम संख्या देता है)।
सहज बोध
यहां सामान्य एल्गोरिथम के बारे में सोचने का एक अच्छा तरीका है: हम दो बाल्टी A और B से शुरू करते हैं। शुरुआत में, B में अपनी सभी लंबियाँ डालें, तो बाल्टी A खाली है। फिर हम बी से ए तक एक शीर्ष को स्थानांतरित करते हैं। अब ए में कोने से सभी किनारों को देखें जो कि बी में कोने से अधिक है। हमने इन क्रॉस-ओवर किनारों से कुछ मानदंडों का उपयोग करते हुए एक किनारे को चुना और बी से इसी शीर्ष को स्थानांतरित करें। A. इस प्रक्रिया को तब तक दोहराएं जब तक B खाली न हो जाए।
इस विचार को लागू करने के लिए एक क्रूर बल तरीका ए में कोने के लिए किनारों की एक प्राथमिकता कतार को बनाए रखना होगा जो कि बी को पार करता है। जाहिर है कि ग्राफ विरल नहीं था तो परेशानी होगी। तो सवाल यह होगा कि क्या हम वर्टीकल की प्राथमिकता कतार बनाए रख सकते हैं? यह वास्तव में हम अपने निर्णय के रूप में हो सकता है जो बी से लेने के लिए शीर्ष पर है।
ऐतिहासिक संदर्भ
यह दिलचस्प है कि दोनों एल्गोरिदम के पीछे तकनीक का सामान्य संस्करण वैचारिक रूप से 1930 के रूप में पुराना है जब इलेक्ट्रॉनिक कंप्यूटर आसपास नहीं थे।
कहानी की शुरुआत ओटकार बोरोव्का से होती है, जिन्हें मोराविया देश (अब चेक गणराज्य का हिस्सा) के शहरों में न्यूनतम लागत वाली विद्युत लाइनों के साथ जुड़ने की कोशिश करने वाले पारिवारिक मित्र के लिए एक एल्गोरिथम की आवश्यकता थी। उन्होंने 1926 में गणित से संबंधित पत्रिका में अपना एल्गोरिथ्म प्रकाशित किया, क्योंकि तब कंप्यूटर साइंस का अस्तित्व नहीं था। यह वोजटच जर्नकी के ध्यान में आया जिन्होंने बोरोवका के एल्गोरिथ्म में सुधार के बारे में सोचा और इसे 1930 में प्रकाशित किया। उन्होंने वास्तव में उसी एल्गोरिथ्म की खोज की जिसे हम अब प्राइम के एल्गोरिथ्म के रूप में जानते हैं जिसने 1957 में इसे फिर से खोजा था।
इन सभी से स्वतंत्र, 1956 में एक संस्थान द्वारा विकसित एक नए कंप्यूटर की क्षमताओं को प्रदर्शित करने के लिए एक कार्यक्रम को लिखने के लिए डीजकस्ट्रा की आवश्यकता थी। उसने सोचा कि नीदरलैंड के दो शहरों के बीच यात्रा करने के लिए कंप्यूटर के कनेक्शन के लिए यह अच्छा होगा। उन्होंने एल्गोरिथ्म को 20 मिनट में डिज़ाइन किया। उन्होंने कुछ सरलीकरणों के साथ 64 शहरों का एक ग्राफ बनाया (क्योंकि उनका कंप्यूटर 6-बिट था) और इस 1956 के कंप्यूटर के लिए कोड लिखा था। हालाँकि उन्होंने अपना एल्गोरिथ्म प्रकाशित नहीं किया क्योंकि मुख्य रूप से कोई कंप्यूटर विज्ञान पत्रिका नहीं थी और उन्हें लगा कि यह बहुत महत्वपूर्ण नहीं हो सकता है। अगले वर्ष उन्होंने नए कंप्यूटरों के टर्मिनलों को जोड़ने की समस्या के बारे में सीखा, जैसे कि तारों की लंबाई कम से कम। उन्होंने इस समस्या के बारे में सोचा और Jarník / Prim की खोज की। एस एल्गोरिथ्म जो फिर से एक ही तकनीक का उपयोग करता है सबसे छोटा पथ एल्गोरिथम जो उसने एक साल पहले खोजा था। वहउल्लेख किया है कि उनके दोनों एल्गोरिदम कलम या कागज का उपयोग किए बिना डिजाइन किए गए थे। 1959 में उन्होंने दोनों एल्गोरिदम को एक पेपर में प्रकाशित किया जो सिर्फ ढाई पेज लंबा है।