2008-11-26 14 views
12

मेरे पास आइटम की एक सूची है (नीचे नीले नोड्स) जिन्हें मेरे आवेदन के उपयोगकर्ताओं द्वारा वर्गीकृत किया गया है। श्रेणियों को स्वयं समूहीकृत और वर्गीकृत किया जा सकता है।डीएजी में दिए गए नोड्स के सेट के माध्यम से मैं सभी पथ कैसे ढूंढूं?

परिणामी संरचना को Directed Acyclic Graph (DAG) के रूप में दर्शाया जा सकता है जहां आइटम ग्राफ़ की टोपोलॉजी के नीचे सिंक होते हैं और शीर्ष श्रेणियां स्रोत होती हैं। ध्यान दें कि कुछ श्रेणियों को अच्छी तरह से परिभाषित किया जा सकता है, लेकिन उपयोगकर्ता को परिभाषित किया जा रहा है और बहुत गन्दा हो सकता है।

उदाहरण:

example data http://theuprightape.net/dag.png

कि संरचना पर, मैं निम्न कार्य करना चाहते हैं:

  • एक विशेष नोड से नीचे के सभी आइटम (डूब) (सभी आइटम यूरोप में) को खोजने
  • सभी पथ (यदि कोई है) को खोजें जो एन नोड्स के सभी सेट (उदाहरण के लिए एसएमटीपी के माध्यम से भेजे गए सभी आइटम) से गुज़रते हैं
  • एफ Ind सभी नोड्स कि नोड्स का एक सेट के सभी नीचे झूठ (चौराहे: goyish भूरे रंग के खाद्य पदार्थ)

पहले काफी सरल लगता है: नोड पर शुरू करते हैं, नीचे करने के लिए सभी संभव मार्ग का अनुसरण और वहाँ आइटम एकत्र। हालांकि, क्या एक तेज दृष्टिकोण है? नोड्स को याद रखना जो मैंने पहले ही पारित किया है, शायद अनावश्यक पुनरावृत्ति से बचने में मदद करता है, लेकिन क्या अधिक अनुकूलन हैं?

मैं कैसे एक दूसरे के बारे में जाते हैं? ऐसा लगता है कि पहला चरण सेट में प्रत्येक नोड की ऊंचाई निर्धारित करना होगा, यह निर्धारित करने के लिए कि किस (ओं) को शुरू करना है और फिर नीचे दिए गए सभी पथ ढूंढें जिनमें शेष सेट शामिल है। लेकिन क्या यह सबसे अच्छा (या यहां तक ​​कि एक अच्छा) दृष्टिकोण है?

graph traversal algorithms listed at Wikipedia सभी को एक विशेष नोड या दो नोड्स के बीच सबसे छोटा या अन्यथा सबसे प्रभावी मार्ग खोजने के साथ चिंतित लगता है। मुझे लगता है कि दोनों मैं नहीं चाहता हूं, या क्या मैं यह देखने में असफल रहा कि यह मेरी समस्या पर कैसे लागू होता है? मुझे और कहां पढ़ना चाहिए?

+0

मैं थोड़ा surpirised रहा है कि इस पोस्ट सिर्फ विचारों 1K करने के लिए मिला है और अभी भी वहाँ जवाब पर कोई मतदान है। क्या यह सिर्फ आलस्य है, क्या दर्शकों को वोटिंग अधिकारों की कमी है या क्या उत्तर में कुछ गड़बड़ है? –

उत्तर

2

मुझे ऐसा लगता है कि अपनी अनिवार्य रूप से सभी 3 प्रश्न के लिए एक ही आपरेशन। आप हमेशा पूछ रहे हैं "नोड (एस) वाई के नीचे सभी एक्स खोजें, जहां एक्स प्रकार जेड है"। आपको केवल 'नोड के नीचे सभी नोड्स का पता लगाने' के लिए एक सामान्य तंत्र है, (क्यू 3 हल करता है) और फिर आप 'nodetype = sink' (समाधान Q1) के परिणामों को फ़िल्टर कर सकते हैं। क्यू 2 के लिए, आपके पास प्रारंभिक बिंदु (आपका नोड सेट) और आपका अंतिम बिंदु (प्रारंभ बिंदु से नीचे कोई सिंक) है, इसलिए आपका समाधान सेट सिंक को निर्दिष्ट नोड शुरू करने से सभी पथ है। तो मैं सुझाव दूंगा कि आपके पास मूल रूप से एक पेड़ है, और मूल पेड़-ट्रैवर्सल एल्गोरिदम जाने का रास्ता होगा।

1

इस तथ्य के बावजूद कि आपका ग्राफ विश्वकोश है, आपके द्वारा उद्धृत ऑपरेशन मुझे नियंत्रण प्रवाह ग्राफ विश्लेषण के समान पहलुओं की याद दिलाता है। dominance पर आधारित एल्गोरिदम का एक समृद्ध सेट है जो लागू हो सकता है। उदाहरण के लिए, आपका तीसरा ऑपरेशन मुझे od कंप्यूटिंग प्रभुत्व सीमाओं को याद दिलाता है; मेरा मानना ​​है कि अगर आप अस्थायी रूप से "एंट्री" और "बाहर निकलें" नोड्स पेश करते हैं तो एल्गोरिदम सीधे काम करेगा। एंट्री नोड "नोड्स के दिए गए सेट" को जोड़ता है और निकास नोड्स सिंक को जोड़ता है।

Robert Tarjan's मूल एल्गोरिदम भी देखें।

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