दूरी से संबंधित लागत को कम करते हुए एक संख्या रेखा पर अंक प्राप्त करना


18

मुझे इस ACM ICPC समस्या पर कुछ मदद चाहिए। मेरा वर्तमान विचार इसे सबसे छोटी पथ समस्या के रूप में प्रस्तुत करना है, जिसे समस्या कथन के अंतर्गत वर्णित किया गया है।

मुसीबत

कर रहे हैं N = 1000परमाणु कचरे में एक 1-डी नंबर लाइन के किनारे स्थित कंटेनर अलग से पदों -500,000 to 500,000को छोड़कर, x=0। एक व्यक्ति को सभी बेकार डिब्बे इकट्ठा करने का काम सौंपा जाता है। प्रत्येक सेकंड कि एक बेकार कंटेनर एकत्र नहीं किया जाता है, यह विकिरण की 1 इकाई का उत्सर्जन करता है। व्यक्ति शुरू होता है x = 0और 1हर सेकंड में इकाई को स्थानांतरित कर सकता है , और कचरे को इकट्ठा करना समय की नगण्य मात्रा लेता है। हम सभी कंटेनरों को एकत्रित करते हुए कम से कम विकिरण जारी करना चाहते हैं।

नमूना इनपुट:

4कंटेनरों में स्थित है [-12, -2, 3, 7]

इन कंटेनरों को इकट्ठा करने का सबसे अच्छा क्रम इकाइयों के [-2, 3, 7, -12]न्यूनतम उत्सर्जन के लिए है 50। स्पष्टीकरण: व्यक्ति -22 सेकंड में जाता है और उस दौरान 2 unitsविकिरण उत्सर्जित होता है। वह तब 3(दूरी :) पर जाता है 5ताकि बैरल ने 2 + 5 = 7विकिरण की इकाइयां जारी कीं। उस बैरल को उत्सर्जित करने वाली इकाइयाँ 4प्राप्त करने में उसे अधिक सेकंड लगते हैं । वह उस बैरल को पाने के लिए कुछ सेकंड लेता है जहां उस बैरल ने यूनिट्स उत्सर्जित की हैं। , जिसका उत्तर है।x = 72 + 5 + 4 = 1119x = -122 + 5 + 4 + 19 = 302 + 7 + 11 + 30 = 50

टिप्पणियाँ

एक स्पष्ट O(N!)समाधान है। हालाँकि, मैंने लालची तरीकों की खोज की है जैसे निकटतम एक पर जाना, या निकटतम क्लस्टर में जाना लेकिन उन लोगों ने काम नहीं किया है।

मैंने इस समस्या के बारे में काफी समय से सोचा है, और इसे एक ग्राफ खोज समस्या के रूप में चित्रित किया है:

  1. हम 0आधार रेखा स्थिति के रूप में सम्मिलित करते हैं (यह प्रारंभिक स्थिति होगी)
  2. फिर, हम स्थिति को कम से कम से सबसे बड़े तक क्रमबद्ध करते हैं।
  3. हम फिर एक बीएफएस / पीएफएस करते हैं, जहां के stateहोते हैं
    • दो पूर्णांकों lऔर rउस सॉर्ट किए गए स्थान सरणी में एक सन्निहित सीमा का प्रतिनिधित्व करते हैं जिसे हमने पहले ही देखा है
    • एक पूर्णांक locजो हमें बताता है कि हम सीमा के बाएं या दाएं छोर पर हैं या नहीं
    • एक पूर्णांक timeजो हमें बीता हुआ समय बताता है
    • एक पूर्णांक 'लागत' जो हमें अब तक की कुल लागत बताती है (हमारे द्वारा देखे गए नोड्स के आधार पर)
  4. प्रत्येक राज्य से हम [l - 1, r] और [l, r + 1] की ओर बढ़ सकते हैं, अन्य 3 पूर्णांकों को उसी के अनुसार बदल सकते हैं
  5. अंतिम स्थिति [0, N] है, दोनों समाप्ति स्थिति की जाँच कर रही है।

हालांकि, ऐसा लगता है कि [L, R, loc]विशिष्ट रूप से एक राज्य को परिभाषित नहीं करता है, और हमें इनमें से प्रत्येक पर L, R, loc, and timeन्यूनतम करते हुए स्टोर costकरना होगा। यह एक घातीय एल्गोरिथ्म की ओर जाता है, जो अभी भी किसी भी अच्छे के लिए बहुत धीमा है।

क्या कोई मुझे मेरे विचार पर विस्तार करने या सही दिशा में धकेलने में मदद कर सकता है?

संपादित करें: शायद इसे एक गतिशील प्रोग्रामिंग अनुकूलन समस्या के रूप में चित्रित किया जा सकता है? इसके बारे में सोचते हुए, इसमें ग्राफ़ खोज समाधान के समान मुद्दे हैं - सिर्फ इसलिए कि वर्तमान costकम है इसका मतलब यह नहीं है कि यह उस उप समस्या के लिए इष्टतम उत्तर है, क्योंकि यह timeभी उत्तर को बहुत प्रभावित करता है।

लालची काम नहीं करता है: मेरे पास एक लालची चयन एल्गोरिथ्म है जो एक निश्चित स्थान पर जाने की लागत का अनुमान लगाता है (जैसे अगर हम दाएं चलते हैं, तो हम बाईं बैरल और इस तरह की दूरी को दोगुना कर देते हैं)।

क्या आप एक प्राथमिकता के साथ एक प्राथमिकता-पहली खोज कर सकते हैं? अनुमानी वर्तमान यात्रा की लागत को समय बीतने की मात्रा के साथ जोड़ सकता है।


सबसे कम पथ एल्गोरिदम के बारे में कैसे? दीजकस्ट्रा के एल्गोरिथ्म की तरह?
सुराज_फेल

मैंने कोशिश की, लेकिन मुझे लगता है कि मैं वास्तव में कुछ गलत कर रहा हूं। मैंने अपने एल्गोरिथ्म का वर्णन किया (जो प्राथमिकता पहले खोज या बीएफएस था) नीचे दी गई सूची के साथ।
बैरन डब्ल्यू।

यह आपकी मदद कर सकता है ... stackoverflow.com/q/14639346/585398
suraj_fale

क्षमा करें, मैं नहीं देखता कि ये दोनों समस्याएं कैसे संबंधित हैं। क्या तुम समझा सकते हो?
बैरन डब्ल्यू।

2
यह एक एसीएम ICPC अभ्यास समस्या है, न कि वास्तविक जीवन की समस्या। एक और नोट पर, मैंने राज्य को कम करने की कोशिश की लेकिन कोई फायदा नहीं हुआ। मैंने एक डीपी समाधान लिखने की कोशिश की लेकिन वह भी काम नहीं किया। राज्य एल, आर, पीओएस था।
बैरन डब्ल्यू।

जवाबों:


4

मुझे लगता है कि आप इस समस्या को पदों के जोड़े के निर्देशित ग्राफ के रूप में देख सकते हैं।

इस उदाहरण के लिए मैं मान -9, -6, -1, 3 और 5 के साथ लाइन का उपयोग करूंगा।

क्योंकि सिर्फ पाठ के साथ एक ग्राफ खींचना बहुत कठिन है, मैं एक तालिका के रूप में जोड़े का प्रतिनिधित्व करने जा रहा हूं। हम कोशिकाओं के बारे में सोच सकते हैं कि राज्य का प्रतिनिधित्व करने के लिए जहां उन दो पदों के बीच सभी कंटेनर एकत्र किए गए हैं। प्रत्येक कोशिका के दो मूल्य होते हैं, एक बाईं ओर जाने की लागत का प्रतिनिधित्व करता है, दूसरा सही (अगले कंटेनर में) जाने के लिए लागत का प्रतिनिधित्व करता है।

मूल्यों को केवल उन दो बिंदुओं + 1 के बाहर बैरल की संख्या से गुणा किए गए दो बिंदुओं के बीच की दूरी के रूप में गणना की जा सकती है । कोशिकाएँ जहाँ दोनों संख्याओं में समान चिन्ह होते हैं, ऐसे मामलों का प्रतिनिधित्व करती हैं जब विपरीत संकेत के सभी बैरल एकत्र किए जाते हैं। इनकी गणना शून्य से दूर दिशा में केवल बैरल की संख्या का उपयोग करके की जाती है।

X के तालिका मानों का अर्थ है कि आप उस दिशा में नहीं जा सकते (उस दिशा में सभी बैरल ले लिए गए हैं)। पंक्तियाँ कलेक्टर की वर्तमान स्थिति का प्रतिनिधित्व करती हैं और कॉलम अगले विपरीत बैरल के स्थान का प्रतिनिधित्व करते हैं।

    +------+------+------+------+------+
    |  -9  |  -6  |  -1  |   3  |   5  |
+---+------+------+------+------+------+
|-9 |      |      |      | X, 24| X, 14|
+---+------+------+------+------+------+
|-6 | 3, X |      |      | 9, 27| 6, 22|
+---+------+------+------+------+------+
|-1 |      |10, X |      |20, 8 |15, 18|
+---+------+------+------+------+------+
| 3 |24, 4 |27, 6 |16, 8 |      | X, 2 |
+---+------+------+------+------+------+
| 5 |14, X |22, X |18, X |      |      |
+---+------+------+------+------+------+

वर्गों के बीच बढ़ने के नियम कुछ भ्रामक हो सकते हैं।

नकारात्मक संख्या वाले कॉलम के लिए, नियम इस प्रकार हैं:

  • सही जा रहा है एक सेल नीचे चला जाता है।
  • बाईं ओर जाने से एक कोशिका नीचे जाती है और फिर विकर्ण के पार दर्पण बन जाता है।
  • यदि सही मान X है, तो बाईं ओर तिरछे (जहाँ स्तंभ और पंक्ति बराबर हैं) और एक द्वारा छोड़ दिया जाता है।

सकारात्मक संख्या वाले स्तंभों के लिए, नियम इस प्रकार हैं:

  • बाईं ओर जाने से एक कोशिका ऊपर जाती है।
  • सही जा रहा है एक सेल ऊपर ले जाता है और फिर विकर्ण भर में दर्पण।
  • यदि बाएं मान X है, तो दाईं ओर तिरछे और दाएं से एक नीचे जाता है।

अब हम ग्राफ को पार करने के लिए इन आंदोलन के नियमों का उपयोग करते हुए, सर्वश्रेष्ठ पथ की गणना करने के लिए दिज्कस्ट्रा के एल्गोरिथ्म को चला सकते हैं। क्रमशः 5 और 15 की शुरुआती लागतों के साथ हमारे शुरुआती स्थान (-1, 3) और (3, -1) हैं। एक बार जब हम दो अंत पदों (बाएं में -9, -9) और दाईं ओर (5, 5) के लिए मानों की गणना कर लेते हैं, तो दोनों में से छोटा हमारा उत्तर है।

प्रत्येक चरण के लिए समय चल रहा है:

  • प्रारंभ में लाइन के साथ इनपुट मानों को सॉर्ट करने के लिए O (N log N)
  • तालिका / ग्राफ़ की गणना के लिए O (N ^ 2)
  • ओ (एन ^ 2 लॉग एन) डिक्स्ट्रा के ग्राफ पर चलने के लिए (नोट: किसी भी दिए गए शीर्ष के लिए अधिकतम दो किनारों पर हैं)।

पहले दो चरणों में अंतिम का प्रभुत्व है, इसलिए आपका समग्र रनटाइम O (N ^ 2 लॉग एन) है जो चुनौती के लिए एक अच्छा रनटाइम होना चाहिए।


1

सबसे कम दूरी

मैंने समस्या को हल करने के लिए कल एक जावा एप्लिकेशन लिखा। समस्या मूल रूप से सबसे छोटी दूरी की समस्या है, जैसा कि SRJ ने अपनी टिप्पणी में कहा है। विकिरण केवल दिखाता है कि आप कम से कम दूरी के साथ एक मूल्य जमा कर सकते हैं।

मूल रूप से, यहाँ मैंने क्या किया।

  • कंटेनर नंबर एक सूची <Integer> में रखें
  • जबकि सूची में तत्व शामिल हैं;
    • वह तत्व खोजें जो निकटतम हैं
    • यदि एक तत्व है, तो वहां चलें और तत्व को हटा दें।
    • यदि दो तत्व हैं, तो पथ को कॉपी करें और दोनों तत्वों को चलें
  • सबसे छोटे विकिरण मान के साथ रास्ता खोजें।

यहां एप्लिकेशन से कुछ आउटपुट दिए गए हैं

10 containers are located at [-90, -75, -47, -9, 9, 26, 48, 50, 64, 79].

You walk to position -9 and pick up the container.  The total radiation emitted is 90 units.
You walk to position 9 and pick up the container.  The total radiation emitted is 252 units.
You walk to position 26 and pick up the container.  The total radiation emitted is 388 units.
You walk to position 48 and pick up the container.  The total radiation emitted is 542 units.
You walk to position 50 and pick up the container.  The total radiation emitted is 554 units.
You walk to position 64 and pick up the container.  The total radiation emitted is 624 units.
You walk to position 79 and pick up the container.  The total radiation emitted is 684 units.
You walk to position -47 and pick up the container.  The total radiation emitted is 1,062 units.
You walk to position -75 and pick up the container.  The total radiation emitted is 1,118 units.
You walk to position -90 and pick up the container.  The total radiation emitted is 1,133 units.

मैंने एल्गोरिथ्म को किसी भी तरह से ऑप्टिमाइज़ नहीं किया। मैंने यह भी नहीं देखा कि संख्याओं की इनपुट सूची क्रमबद्ध थी। (मैं एक डूफस हूं।)

जब मैंने अपना कोड अधिकतम मूल्यों, 1,000 कंटेनरों और 500,000 से 500,000 तक की सीमा के साथ चलाया, तो मेरे कोड को निष्पादित करने में 3 सेकंड का समय लगा। उस समय का अधिकांश भाग कंसोल पर 1,000 प्रिंट लाइनें लिख रहा था।

मैं एक बड़ा ओ व्यक्ति नहीं हूं, लेकिन मुझे लगता है कि सबसे कम पथ एल्गोरिथ्म चलने वाली मेरी पाशविक शक्ति हे (एन स्क्वॉयर), ओ (एन!) नहीं।

अगर मैंने इस तथ्य का फायदा उठाया कि इनपुट नंबर सॉर्ट किए गए हैं, तो इसके लिए मुझे केवल दो नंबर की जांच करनी होगी कि मैं वर्तमान में कहां स्थित हूं, मुझे एप्लिकेशन को O (N) के करीब मिल सकता है। मुझे केवल 2 नंबरों की जांच करनी है क्योंकि मैं सूची से तत्वों को हटा रहा हूं क्योंकि मैं उन्हें प्राप्त करता हूं।

आपने अनुमानित एल्गोरिथ्म का पता लगाने के लिए लालची एल्गोरिथ्म जैसे विभिन्न एल्गोरिदम का उपयोग किया।

यदि मेरे कार्यक्रम को 3 सेकंड के बजाय चलाने में 3 घंटे लगते हैं, तो आपके पास बनाने के लिए एक विकल्प होगा।

क्या अच्छा पर्याप्त समाधान काफी अच्छा है?

दूसरे शब्दों में, क्या मैं एक अच्छे पर्याप्त उत्तर के लिए प्रसंस्करण गति को व्यापार करने के लिए तैयार हूं?

यदि एक अच्छा पर्याप्त उत्तर काफी अच्छा है, तो आप सन्निकटन एल्गोरिदम का उपयोग करते हैं।

यदि आप सही उत्तर चाहते हैं, तो आपको सभी छोटे रास्तों पर चलना होगा। कोई शॉर्टकट नहीं है।

अगर कोई चाहता है कि मैं अपना कोड पोस्ट करूं, तो मैं करूंगा। मुझे यकीन है कि अभी भी कीड़े हैं, जैसा कि मैं देखना चाहता था कि क्या मैं कम से कम चलना एल्गोरिदम को लागू कर सकता हूं।


1

मेरे पास एक समाधान है जो इस समस्या को 2^Nसमय में हल करेगा , जो खराब है, लेकिन मुझे लगता है कि यह समस्या को हल करने का एक सहायक तरीका है, इसलिए मैंने सोचा कि मैं पोस्ट करूंगा।

एक ग्राफ के रूप में समस्या को मॉडल करने के बजाय, मैं मॉडल करूँगा कि यह एक द्विआधारी निर्णय वृक्ष (कहना T) है। प्रत्येक स्तर पर आपको दाएं या बाएं जाने के बीच चयन करना होगा। प्रत्येक किनारे की 'लागत' की गणना करना काफी आसान है। चलो h(K)वर्तमान नोड की ऊंचाई हो K, फिर किनारे की लागत left_child(K) = h(K) x dist(K, left_child(K))। एक समान गणना सही बच्चे के लिए किनारे की लागत के लिए पर्याप्त है। आप इस पेड़ का निर्माण करते हैं, और सभी तरह से किनारों की संचयी लागत का ट्रैक रखते हैं, और सबसे छोटी कुल लागत के साथ पत्ती नोड के लिए मार्ग की रिपोर्ट करते हैं।

ध्यान दें कि लागत गणना काम करती है क्योंकि प्रत्येक किनारे की लंबाई dist(K, left_child(K))अगली साइट पर जाने के लिए समय का प्रतिनिधित्व करती है, जबकि सबट्री की ऊंचाई शेष साइटों की संख्या है (जैसे अभी भी विकिरण उत्सर्जित करना)।

अब इस ढाँचे के भीतर की चाल यह निर्धारित करने के लिए है कि क्या कुछ ऐसे आंकड़े हैं जिनका उपयोग आप 'साबित' करने के लिए कर सकते हैं कि आप अपनी शाखा के साथ-साथ खोज के विस्तार को अनदेखा कर सकते हैं। मेरा अंतर्ज्ञान यह है कि इस तरह के किसी भी अनुमान के लिए साइटों की एक व्यवस्था है जो इसे पराजित करेगी, लेकिन शायद कोई व्यक्ति कुछ लेकर आ सकता है।

एक संख्या ने रेखांकन के लिए सबसे छोटे पथ समाधानों को लागू करने का प्रस्ताव दिया है, मुझे कुछ संदेह है कि क्या ऐसा समाधान काम कर सकता है। समस्या में 'ग्राफ़' में आपके पड़ोसी आपके द्वारा अनुसरण किए गए पथ के आधार पर बदल जाएंगे। उदाहरण के लिए अपनी मूल पोस्ट में [-12, -2, 3, 7]यदि आप -2तब -12जाकर 3'पड़ोसी' बन जाते हैं और यदि आप 3तब जाते हैं -2और 7पड़ोसी होते हैं। सकारात्मक और नकारात्मक मूल्यों की हर संभव 'जोड़ी' अंतिम ग्राफ में संभावित रूप से नीग्रो हो सकती है। मुझे किसी भी छोटे पथ एल्गोरिदम का पता नहीं है जो एक गतिशील ग्राफ़ में काफी सही हैं।


0

मुझे लगता है कि यह प्रत्येक चरण के बारे में सोचने के लिए सबसे अधिक समझदार है, जैसे कि निकटतम बैरल के दाईं ओर जाने और निकटतम बैरल पर बाएं जाने के बीच एक द्विआधारी विकल्प। बस एक लागत फ़ंक्शन होता है जो किसी भी गति को बनाते हुए कुल विकिरण इकाइयों की संख्या का विवरण देता है और सबसे कम लागत के साथ एक का चयन करता है।

बस निकटतम बैरल पर विचार न करें, बल्कि यह मान लें कि एक बैरल से दूर जाने से आप प्रभावी रूप से दो बार विकिरण जोड़ रहे हैं क्योंकि दूर जाने से आपको बाद में उस दिशा में वापस जाने की लागत भी लगी है।

[-12, -2,3,7] के आपके उदाहरण में, बाईं ओर बढ़ने पर बाईं ओर कुल 14 (2 + 2 + 10) और दाईं ओर 18 (2 + 2 + 5 + 9) होंगे। कुल 22 के लिए। दाईं ओर बढ़ने पर दाईं ओर 10 (3 + 3 + 4) और दाईं ओर 26 (3 + 3 + 5 + 15) होगा। स्पष्ट रूप से बाईं ओर पहले सही समाधान है। एक समान गणना हर क्रमिक आंदोलन के लिए की जा सकती है।

उसके बाद समस्या मूल रूप से एक खोज में कम हो जाती है, इसलिए जटिलता ओ (nlog (n)) होनी चाहिए, जो O (n!) से बेहतर है। मेरा मानना ​​है कि यह आवश्यक रूप से सबसे कम जटिलता है जो इस समस्या के लिए मौजूद हो सकती है क्योंकि यह मूल रूप से एक तुलना आधारित खोज एल्गोरिथ्म है जिसके लिए ओ (nlog (n)) से बेहतर करना संभव नहीं है

जाहिरा तौर पर मैं इस विवरण के साथ पर्याप्त रूप से स्पष्ट नहीं था, इसलिए मैंने इसे थोड़ा और अधिक प्रोग्राम बनाने का फैसला किया है: 1. बाईं ओर जाकर किए गए लागत की गणना करें, और वर्तमान स्थिति के आधार पर सही जाने से होने वाली लागत 2. में स्थानांतरित करें। कम से कम महंगी दिशा 3. एक दिशा में जाने की लागत की गणना करने में विचार किए गए बैरल को हटा दें

लागत की गणना: 1. दिए गए दिशा में निकटतम बैरल की पहचान करें। मान लें कि $ डिस्टेंस मौजूदा स्थिति से दिए गए दिशा में निकटतम बैरल की दूरी है। 2. लागत को N * $ डिस्टर्ब के रूप में आरम्भ किया जाता है जहाँ N केवल सक्रिय बैरल मानता है। 3. इसके लिए, उस दूरी को जोड़ें, जो $ डिस्टिक्ट द्वारा इंगित की गई नई स्थिति में शेष प्रति बैरल से होगी।


1
यह हमेशा काम नहीं करता है। हो सकता है कि आप कोर्ड्स को सॉर्ट कर सकते हैं और फिर एक खोज करते हैं जहां राज्य में एक सीमा होती है [i..j] (जो यह दर्शाता है कि आप किस रेंज में गए हैं) और लागत और वर्तमान समय।
बैरन डब्ल्यू।

यह कब काम नहीं करता है?
स्लेटर विक्टरॉफ़

एक साधारण परीक्षण मामला था जहां यह विफल रहा। मैं इसे खोजने की कोशिश करूंगा, लेकिन यह N = 4 या 5 के साथ था
बैरन डब्ल्यू।

[43, -18, -98, -82, 63]
बैरन डब्ल्यू।

जैसे केस भी [-10,-11, 10,20,30,40,50,60,70]। सही और एकमात्र समाधान सभी नकारात्मक लोगों को इकट्ठा करना है, फिर सकारात्मक लोगों को इकट्ठा करना है। 455 के उत्तर के लिए
बैरन डब्ल्यू।

0

आंशिक समाधान - मैं इसे बाद में वापस लाऊंगा।

"डिफ़ॉल्ट" रणनीति को सभी तरह से छोड़ दिया या सही तरीके से चलाया जाता है, जो भी सस्ता हो। अब पूछें, क्या यह एक बैरल लेने के लिए दूसरी तरफ की यात्रा के लायक है। उत्तर की गणना करना काफी आसान है।

आप नमूना इनपुट के लिए, सभी तरह से चलना सही सभी तरह से सस्ता है। एक यात्रा के लायक -2 जा रहा है? यह सभी तरह से सही चलने की लागत को कम करता है और फिर 0 से 14 तक (क्योंकि आप डिफ़ॉल्ट रणनीति पर 0 से 3 तक प्रति चाल 4 विकिरण इकाइयाँ "भुगतान" कर रहे थे, अब यह 3 से नीचे है, आप 3 से 3 का भुगतान कर रहे थे 7 से, अब यह 2 है, आदि), इसके अलावा 0 से -2 तक जाने की आपकी लागत प्रति एक चाल से घट जाती है, इस प्रकार कुल 16 के लिए 2 और बचत होती है।

हालाँकि, इसमें 14 की 0 (फिर 2 की ओर 4 इकाइयाँ, 3 प्रति चाल से 0 पर वापस), (16-14) = 2 का शुद्ध लाभ होता है। ध्यान दें कि यह गणना करने के लिए आपको प्रत्येक निर्णय के लिए पूरी समस्या को हल करने की सटीक लागत का मूल्यांकन करने की आवश्यकता नहीं है - आपके पास यह जानने के लिए पर्याप्त जानकारी है कि क्या सभी तरह से चलना बाकी सभी तरह से चलाने से सस्ता है, साथ ही साथ कैसे कई अपशिष्ट कंटेनर आप में से प्रत्येक पर हैं, और निकटतम दूरी 2. तो वह ओ (एन ^ 2) है।

एक महत्वपूर्ण समस्या को छोड़कर - मैंने मान लिया है कि आप अंत तक सभी तरह से चलेंगे, और हमें पता है कि आप दोगुना हो सकता है। इसे साफ करने के लिए, हमें अपनी गणना को अपडेट करना होगा। नमूना इनपुट के लिए, मैंने माना है कि आप 0 से 7 और पीछे से दौड़ते समय प्रति सेकंड 1 कम कुल विकिरण का उत्सर्जन करके 14 को बचाएंगे। लेकिन, अगर आप 7 तक दौड़ने से पहले दोगुना कर देते हैं, तो बचत कम हो जाएगी।

यह बहुत बुरा है, क्योंकि, मुझे नहीं पता कि सभी संभावनाओं की कोशिश किए बिना अगले डबल-बैक की गणना कैसे करें, जो हमें O (2 ^ N) पर वापस लाती है।

सिवाय - यह 2 ^ एन छंटाई के साथ है। मैंने गणना की कि "साइड ट्रिप" -2 की लागत 14 है, लेकिन 16 प्राप्त हुई, अगर मेरे पास सबसे सही संख्या में यात्रा करने से पहले नहीं था। यदि सबसे सही संख्या 5 थी, तो मैं तुरंत पता करूंगा कि -2 का साइड ट्रिप भुगतान नहीं कर सकता। (लागत अभी भी 14, अधिकतम लाभ 12)। न ही मुझे ६ पर जाने पर विचार करना होगा, तब ६ पर पहुंचने से पहले एक साइड ट्रिप करना होगा, क्योंकि यह हमेशा पहले स्थान पर सीधे उस बिंदु पर जाने से हीन है।


0

मुझे लगता है कि आप इसे चौड़ाई-पहली खोज का उपयोग करके हल कर सकते हैं, (बूलियन, इंट, इंट, इंट, स्ट्रिंग) के 2 * N ^ 2 से अधिक नहीं बनाए रखने के लिए जहां तार जटिल हैं।

ट्यूपल हैं (न्यूनतम या अधिकतम बूलियन, न्यूनतम स्थिति की यात्रा, अधिकतम स्थिति की यात्रा, कुल विकिरण उत्सर्जित, पथ इतिहास)।

मैं देख रहा हूँ एल्गोरिथ्म इस तरह से:

  1. एकल प्रविष्टि के लिए ट्यूपल्स के पूल को प्रारंभ करें, (मिनट, 0, 0, 0, "")
  2. पूल में एक ऐसा तत्व खोजें, जिसमें कम से कम विकिरण उत्सर्जित हो। यदि न्यूनतम और अधिकतम सभी बैरल के न्यूनतम और अधिकतम के अनुरूप है, तो पथ इतिहास इष्टतम समाधान है। अन्यथा इसे पूल से हटा दें।
  3. इस टपल के 2 वंशजों की गणना करें, जिनमें से प्रत्येक अगले असंसाधित बैरल के लिए बाएं या दाएं चलने से मेल खाती है।
  4. वंश को पूल में डालें। यदि पूल में पहले से ही एक तत्व है जिसमें एक ही बूलियन, न्यूनतम, और एक नए वंश के रूप में अधिकतम है, तो उच्च विकिरण गणना के साथ तत्व को छोड़ दें।
  5. गोटो २।

वर्चस्व वाले ट्यूल को खोजने और हटाने से नाटकीय रूप से प्रदर्शन में सुधार होगा। प्रत्येक टपल में 'ब्रेडेड' फ़्लैग जोड़ना और पूल में ब्रेड टुपल्स को छोड़ना सार्थक हो सकता है।

यह भी तय करने के लिए कुछ महत्वपूर्ण निर्णय हैं कि टुपल्स को कैसे स्टोर किया जाए, और उन्हें वर्चस्व और नए तत्वों के प्रजनन के लिए खोजा जाए।

हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.