एक डेटा प्रतिनिधित्व चुनें
सबसे पहले, परिणाम का आकार देखें। आप से कम से कम पथ का संग्रह चाहते हर दूसरे नोड के लिए। जब तक एक मार्ग की औसत लंबाई एक निरंतर (जो यह नहीं है से घिरा है: किसी भी सूची unipath है, और अगर आप रूट लेने के लिए है रास्तों की कुल लंबाई है n ( n - 1 ) / 2 जहां n है सूची की लंबाई), आपको अपने डेटा प्रतिनिधित्व में सावधानी बरतने की आवश्यकता होगी: पथ वाले संरचना को पथों के बीच साझाकरण का उपयोग करना होगा।रोंरोंn ( n - 1 ) / 2n
चक्रों को छोड़कर, से किसी भी अन्य नोड यू के लिए एक ही रास्ता है । यदि वह मार्ग मध्यवर्ती नोड t से होकर जाता है , तो पथ का पहला खंड s से t तक का वांछित पथ है । रोंयूटीरोंटी
मैं एक सरणी, से गिने नोड्स द्वारा अनुक्रमित में परिणाम की दुकान का प्रस्ताव करने के लिए | ई | - 1 , s = 0 के साथ । सरणी में प्रत्येक तत्व उस नोड के पथ पर पिछले नोड के सूचकांक को संग्रहीत करता है (उदाहरण के लिए - 1 नोड्स के लिए एक विशेष मार्कर के रूप में जो एस से पहुंच से बाहर है )। से पथ रों को0| इ| -1s=0−1ssहोगा ( s = R [ … R [ t ] … ] , … , R [ R [ t]t ।( एस = आर [ … आर [ टी ] … ] , … , आर [ आर [ टी ] ] , आर [ टी ] , टी )
ग्राफ को पार करें
को सभी को प्रारंभ करें - 1 ।आर- 1
से शुरू होने वाले ग्राफ की गहराई-पहले या चौड़ाई-पहले ट्रावेल करें । हर बार एक नोड यू पर पहुंचने पर, आर [ यू ] को उसके पूर्ववर्ती पर सेट करें ।रोंयूआर [ यू ]
चूंकि चक्र हैं, एक नोड एक से अधिक बार पहुंचा जा सकता है। बीत रहा है इंगित करता है कि यू पहले से ही दौरा किया गया है।आर [ यू ] ≠ - १यू
शुद्धता साबित करो
एकतरफा संपत्ति के कारण, यह कोई फर्क नहीं पड़ता कि हम प्रत्येक नोड तक कैसे पहुंचते हैं, जब तक कि हमने एक चक्र पूरा नहीं किया है। केवल एक सरल मार्ग है।
जटिलता साबित करो
एल्गोरिथ्म प्रत्येक नोड तक एक से अधिक बार पहुंच सकता है, इसलिए यह स्पष्ट नहीं है कि इसकी जटिलता । किया गया कार्य वास्तव में हैओ ( | वी| ) जहाँ V 0 वे किनारे हैं जो स्रोत से उपलब्ध हैं। अधिक सटीक रूप से, हम केवल एक परिस्थिति में एक से अधिक बार नोड तक पहुंचते हैं: यदि नोड पहला है जो हम एक विशेष चक्र पर पहुंचते हैं, और इस मामले में हम इसे दो बार (एक सरल पथ से एक बार, और एक बार चक्र पूरा करने के बाद) तक पहुंचते हैं )।Θ ( | ई0| )वी0
ठीक है फिर। आइए साबित करते हैं कि एक यूनीपैथिक ग्राफ में, प्राथमिक चक्रों की संख्या नोड्स की संख्या के साथ सबसे अधिक रैखिक रूप से बढ़ती है। (एक प्राथमिक चक्र वह है जिसमें एक छोटा चक्र नहीं होता है।) निम्नलिखित चर्चा में, मैं मान लूंगा कि ग्राफ में कोई आत्म-किनारे नहीं है (नोड से स्वयं के लिए कोई किनारा नहीं है; ऐसे किनारों को पथ निर्माण के लिए वैसे भी अप्रासंगिक है; )।
यूनीपैथिक ग्राफ़ में चक्र हो सकते हैं, लेकिन बहुत विवश तरीके से। यह अच्छा होगा अगर हम किसी चक्र को प्रत्येक नोड को एक अलग नोड (या कम से कम, प्रति नोड चक्र की एक सीमित संख्या में) से जोड़ सकें। क्या चक्र एक नोड साझा कर सकते हैं? दुर्भाग्य से हाँ।
आप हो सकता है चक्र से चीज़ों को शेयर एक नोड एक और कोई अन्य नोड्स। परिणामी ग्राफ एकतरफा है। लंबाई 2 के चक्र के साथ, यह एक स्टार पैटर्न है जिसमें केंद्रीय नोड ए और किसी भी संख्या में नोड होते हैंमएए ऐसा है कि ∀ मैं , एक ⇆ ख मैं ।खमैं∀ i , a । Bमैं
इसलिए हमें और कड़ी मेहनत करने की आवश्यकता है। ठीक है, चलो इसे प्रेरणादायक साबित करने की कोशिश करें। बता दें कि एक ग्राफ G , # E ( G ) किनारों की संख्या और # C ( G ) प्राथमिक चक्रों की संख्या है, जो स्वयं के किनारे नहीं हैं। मैं जोर देकर कहता हूं कि अगर G एकतरफा है और खाली नहीं है तो ## वी( जी )जी# ई( जी )# सी( जी )जी ।# सी( जी ) ≤ # वी( जी ) - १
एक या दो नोड्स वाले ग्राफ़ के लिए, यह स्पष्ट है। मान लीजिए कि सभी ग्राफ्स के लिए अभिकथन ऐसा है कि और G को n नोड्स के साथ एक यूनीपैथिक ग्राफ होने दें । यदि G का कोई चक्र नहीं है, तो 0 = # C ( G ) < # V ( G )# वी( जी ) < एनजीnजी0 = # सी( जी ) < # वी( जी ) , केस बंद है। अन्यथा, चलो एक प्राथमिक चक्र हो।( a)1, … , एम)
चक्र को संकुचित करें: चलो ग्राफ जिसका नोड्स के हैं हो जी शून्य से { एक 1 , ... , एक मीटर } के साथ साथ एक नोड एक और जिनके किनारे सभी के किनारों हैं जी को शामिल नहीं एक मैं की, प्लस एक → जी ' ख जब भी ∃ मैं , एक मैं → जी ख और ख → जी ' एक जब भी ∃ मैं , खजी'जी{ ए1, … ,एम}एजीएमैंएक →जी'खA i , aमैं→जीखबी →जी'ए सी । में हर पथ जी ' लाती में एक पथ जी (यदि पथ शामिल ख → एक → ग , तब तक इस की जगह ख → एक मैं → एक मैं + 1 → ... → एक j → ग में जी )। इसलिए जी ' unipathic है। इसके अलावा, के बाद से में चक्र जी किनारों का हिस्सा नहीं है, जी ' के सारे चक्र है जी एक हम सफाया के लिए छोड़कर: # ( जी∃ i , b →जीएमैंजी'जीb → a → cb → aमैं→ एमैं + 1→ … → एजे→ सीजीजी'जीजी'जी । प्रेरण रखकर # सी ( जी ' ) ≤ # वी ( जी ' ) - 1 # सी ( G ) = # सी ( जी ' ) +# सी( जी') = # सी( जी ) - १# सी( जी') ≤ # वी( जी') - 1। चूंकि , हमारे पास# वी( जी') = # वी( जी ) - एम + १ ।# सी( जी ) = # सी( जी') + 1 ≤ # वी( जी ) - मीटर = n - मीटर ≤ n - 1
यह प्रमाण को समाप्त करता है। ट्रैवर्सल इस प्रकार है किनारों।2 | वी| -२