रूबी - रूबी, डेटा-स्ट्रक्चर, डिजस्ट्रा, आसन्नता-सूची, ग्राफ़-एल्गोरिदम में मानचित्र को स्टोर करने और बीएफएस के साथ ग्राफ उत्पन्न करने के लिए कैसे करें

तो मुझे लगता है कि यह सीएस में एमएससी के साथ किसी के लिए शास्त्रीय सवाल है।

मेरे पास एन तत्व है और मेरे पास दूरी भी है। मान लें कि मेरे पास निम्नलिखित दूरी के साथ 3 तत्व हैं। यह सममित है, इसलिए

A -> B == B -> A

यह एक मैट्रिक्स की तरह दिखता है:

   A,  B,  C,
A  0, 10,  20
B 10,  0,  30
C 20, 30,   0

मेरा सवाल होगा:

  • मैं इसे कुशलता से कैसे स्टोर कर सकता हूं (डेटा संरचना)
  • एक लिंक की गई सूची प्राप्त करने का सबसे प्रभावी तरीका क्या है जहां दूरी की राशि न्यूनतम है

इस मामले में सबसे अच्छा है

B -> A -> C = 30 which equals to C -> A -> B

अन्य मामला:

A -> B -> C = 40 which equals to C -> B -> A

मुझे लगता था कि बीएफएस इसके लिए उपयुक्त हो सकता है। अंग्रेजी में प्रलेखन के लिए लिंक अच्छा है, यहां तक ​​कि अमेज़ॅन पर किताबें भी ...

उत्तर:

उत्तर № 1 के लिए 4

आपके डेटा संरचना के लिए आदर्श समाधान एक है आसन्न सूची

एक आसन्न सूची केवल वस्तुओं की एक सूची है (आपके ग्राफ पर शिखर का प्रतिनिधित्व करती है)। प्रत्येक ऑब्जेक्ट में एक सूची होती है जिसमें सभी कोष्ठक होते हैं जिनके पास आसन्न किनारे और संबंधित वजन होता है।

रूबी में, एक साधारण कार्यान्वयन कुछ ऐसा दिख सकता है:

vertices = {}
a = Vertex.new
b = Vertex.new

a.add(b, 10)
b.add(a, 10)

vertices[a] = a
vertices[b] = b

सबसे छोटा, भारित पथ खोजने के लिए एल्गोरिदम कहा जाता है डिज्कस्ट्रा "रों

यदि आप बाद में सबसे छोटा रास्ता प्राप्त करना चाहते हैंएल्गोरिदम चला रहा है, आप एक ट्रेसबैक कर सकते हैं। यह प्रत्येक नोड के (इष्टतम) अभिभावक को संग्रहीत करके किया जाता है जब आप इसे प्राप्त करते हैं। ऐसा करने के लिए, आपके पास प्रत्येक विज़िट नोड के लिए हैश हो सकता है जो नोड को मानचित्र करता है जो इसे कम से कम लागत के साथ ले जाता है।

एक बार जब आप एल्गोरिदम समाप्त कर लेंगे, तो आपका रिकर्सिव ट्रेसबैक ऐसा कुछ दिखाई दे सकता है:

def traceback(parent, start, node, path)
if(start == node)
(path + start.to_s).reverse
else
path += node.to_s + " "
traceback(parent, start, parent[node], path)
end
end

उत्तर № 2 के लिए -1

मैंने सुना डिज्कस्ट्रा एक भारित ग्राफ नेविगेट करने के लिए एक एल्गोरिदम है।


संबंधित सवाल
सबसे लोकप्रिय