2011-06-17 6 views
6

मैं एक स्थिति है पर एक आंशिक आदेश प्राप्त करने, इस प्रकार के लिए:एल्गोरिथ्म जल्दी से लिंक किए हुए एकाधिक सूचियों

  • मैं n दोगुना से जुड़े सूचियों
  • प्रत्येक सूची एक प्रहरी शुरुआत और अंत
  • है
  • सूचियों में समान प्रारंभ और अंत नोड (आवश्यक नहीं है, लेकिन सादगी के लिए)
  • सूचियां समरूप हैं और आइटम साझा कर सकती हैं

मैं सभी n सूचियों में अंत नोड, सभी नोड्स के एक आंशिक आदेश को खोजने के लिए, शुरुआत नोड के साथ शुरू और के साथ समाप्त, ठीक है, करना चाहते हैं इस तरह है कि किसी भी नोड जो NX सूचियों में प्रकट होता है , जहां x < n, सभी सूचियों में अन्य नोड्स के संबंध में सॉर्ट किया जाएगा जिसमें यह प्रतीत होता है।

सूचियों का एक उदाहरण सेट उपलब्ध कराने के लिए सरणियों का उपयोग करना:

first = [a, b, d, f, h, i]; 
second = [a, b, c,  f, g, i]; 
third = [a,   e, f, g, h, i]; 

जाहिर है, एक संभावित जवाब [, ए, बी, सी, डी, ई, एफ, जी, एच मैं] होगा, लेकिन एक और स्वीकार्य आदेश [ए, बी, डी, ई, सी, एफ, जी, एच, मैं] होगा।

मुझे पता है कि ऐसा करने के लिए एक तेज़ एल्गोरिदम है, क्या किसी को याद है कि यह कैसे जाता है या इसे क्या कहा जाता है? मेरे पास पहले से ही कुछ धीमे संस्करण हैं, लेकिन मुझे यकीन है कि कहीं नथ में कहीं तेज़ है।

(। और, इससे पहले आप से पूछना, इस होमवर्क या परियोजना यूलर के लिए नहीं है, और मैं इस किसी भी अधिक ठोस नहीं कर सकता यह समस्या है।)

संपादित करें: मुझे लगता है कि आंशिक अपेक्षाकृत यकीन ऑर्डरिंग केवल तभी परिभाषित की जाती है जब तक कि अंतराल सभी सूचियों में और उसी स्थिति में (शुरुआत और अंत) में हों। मैं उन अंतराल को खोजने के लिए एक रैखिक-समय की खोज के खिलाफ नहीं होगा, और यदि वे नहीं मिल पा रहे हैं, तो वहां एक त्रुटि उठाई जा सकती है।

+2

सूचियों के विरोधी आदेश होने पर उत्तर क्या होगा यदि उदा। 'पहला = [ए, बी]' और 'दूसरा = [बी, ए]'? – antinome

+0

एंटीनोम: उपरोक्त संपादन में उल्लिखित अनुसार, यदि वैध अंतराल प्राप्त करने का कोई तरीका नहीं है, तो मैं समय से पहले एक त्रुटि उठाऊंगा। – Corbin

उत्तर

2

मेरे लिए Topological sort जैसा दिखता है। आपको एक स्थलीय रूप से क्रमबद्ध राज्य प्राप्त करने के लिए कई एल्गोरिदम हैं। जिसे मैं विशेष रूप से पसंद करता हूं वह एक चौड़ाई पहली खोज के समान है। दो सूचियों को बनाए रखें, जिनमें सभी नोड्स हैं, जिनमें L (प्रारंभ में केवल a नोड), दूसरा आंशिक आदेशित नोड्स, F है।अब हर कदम,

pick a node from `L`, 
do some operations (explained later), 
and move the chosen node to the `F` list. 

"कुछ कार्य कर कदम" में, कम से

choose all successors of the source node which have exactly one in-link add them to L. 
Remove the link from the source node to all the successors in the previous step 

अब, सूची F अपने सभी नोड्स सांस्थितिकी अनुसार क्रमबद्ध हैं। मुझे भयानक स्पष्टीकरण के बारे में खेद है, विकी लिंक में अच्छे चित्र हैं :)

+0

आंशिक आदेशों के संबंध में भी एक अनुभाग है। मुझे यह विचार बहुत पसंद है, और इसमें लालित्य देख सकते हैं। समस्या, तब, एक डीएजी में एकाधिक लिंक्ड सूचियों (जो गुणा-जुड़े नहीं हैं!) से एक कुशल परिवर्तन होगा। विचार? – Corbin

+0

तो पहली सूची में ऑब्जेक्ट 'ए' दूसरी सूची में एक ही वस्तु' ए 'नहीं है? मैं पालन नहीं करता हूं। यदि ऐसा है, तो प्रत्येक ऑब्जेक्ट को एक सामान्य संख्या में मैप करने के लिए हैशटेबल (या कोई समान संरचना) का उपयोग करें। फिर डीएजी का निर्माण करें। उदाहरण के लिए 'ए' = 1,' बी' = 2 इत्यादि इत्यादि। अब, 'ए' और 'बी के – kyun

+0

@MostAwesomeDude के बजाय 1s और 2s का उपयोग करके अपना डीएजी बनाएं: मुझे आपका प्रश्न समझ में नहीं आया: कुछ भी एक डीएजी पर लागू होना निश्चित रूप से किसी डीएजी से अधिक कुछ पर लागू होना चाहिए (इस अर्थ में कि किनारों दोनों किनारों पर जाते हैं)। यदि आप अपनी सूचियों को ग्राफ में परिवर्तित करने के तरीके पर फंस गए हैं, तो आपने उस समस्या के लिए एक आदर्श धारणा बनाई है: प्रत्येक सूची में सभी पहले नोड बराबर हैं। इसलिए यह आपके ग्राफ का आदर्श जड़ है, और प्रत्येक सूची शाखा – JBSnorro

0

या तो मैं गलतफहमी कर रहा हूं, या एलियनहार्ड का एल्गोरिदम विफल हो सकता है। (मैं एक टिप्पणी के रूप में जोड़ना होगा, लेकिन मैं भी यहाँ नया टिप्पणी करने के लिए कर रहा हूँ।)

इस उदाहरण पर विचार:

first = [a, b, c, d,    i]; 
second = [a,  d, e, f,  i]; 
third = [a,    f, g, h, i]; 

Alienhard एल्गोरिथ्म दे देंगे: a=0, b=1, c=2, d=3, e=2, f=3, g=2, h=3, i=4

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

+0

हाँ, धन्यवाद, आप सही हैं। मैंने यह भी सोचा कि छोटे मामले हैं जहां यह विफल रहता है। अगर यह इतना आसान और तेज़ काम करता तो बहुत अच्छा होता;)। मैंने हटाने के लिए अपना जवाब फ़्लैग किया है। – alienhard

+0

आप सही हैं। – Corbin

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