मंजिल आदेशों की यात्रा के लिए सबसे छोटा रास्ता खोजने के लिए एलिवेटर्स द्वारा किस एल्गोरिथ्म का उपयोग किया जाता है?


27

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

इसलिए इस समय मैं एक बहुत ही सरल और "शॉर्ट विज़र्ड" तर्क का उपयोग कर रहा हूं, जो कि वर्तमान मंजिल के लिए मेरे लिए सबसे नज़दीकी मंजिल को ढूंढता है और इसे मेरी अगली मंजिल के रूप में सेट करता है और जब तक कोई और मंजिल सूची में न हो।

लेकिन यह हमेशा काम नहीं करता है, उदाहरण के लिए एलेवेटर एक 5 मंज़िला इमारत की तीसरी मंज़िल में था और उसे ऑर्डर मिला 4,5,2 सबसे छोटा रास्ता 2-> 4-> 5 होगा जिसकी लागत 4 मंज़िल होगी लेकिन इस लॉजिक का उपयोग करना 4-> 5-> 2 जिसकी कीमत 5 है, को कोड के आधार पर उठाया जाने की समान संभावना है।

मैं सबसे छोटा रास्ता कैसे ढूंढूं और लिफ्ट को अधिक कुशल बनाऊं?


2
कुछ हद तक संबंधित: programmers.stackexchange.com/q/96278/149904
Manlio

6
मैं आपको अपने कार्यालय में आमंत्रित करना चाहता हूं और एल्गोरिथ्म का पता लगाना चाहता हूं जो कि लिफ्ट वहां उपयोग करते हैं। क्योंकि मैं बिल्कुल नहीं कर सकता।
gnasher729

1
@ gnasher729 ओह, मैं भले ही मैं आपको नहीं जानता, क्योंकि यह निश्चित रूप से मेरे कार्यालय में समान है: मैं जिस मंजिल पर हूं, उसे कभी नहीं छोड़ना चाहिए, सिवाय इसके कि पहले से ही लोगों से भरा हो। क्या मैं सही हू?
एंड्रेस एफ।

2
काफी नहीं। चार लिफ्ट हैं। आप बटन दबाते हैं, बहुत लंबे समय तक कुछ भी नहीं चलता है। यदि कोई अपनी मंजिल से ठीक पहले रुक जाता है और उम्र का इंतजार करता है, जब तक कि वह एक दूसरे से आगे नहीं निकल जाता है जो आपकी मंजिल को पार करता है और फिर नीचे आता है। जमीन के नीचे जाने के रास्ते में यह कम से कम तीन बार रुकता है जिसमें कोई प्रवेश नहीं करता है।
gnasher729

2
प्रासंगिक प्रोग्रामिंग गेम / चुनौती: play.elevatorsaga.com
dwikle

जवाबों:


30

"दक्षता" सबसे महत्वपूर्ण विशेषता नहीं है, सबसे महत्वपूर्ण यह सुनिश्चित करना है कि प्रत्येक आदेश का पालन किया जाए, कि कोई भुखमरी न हो। अगर कोई 100 दबाता है और लोग 1 और 2 दबाते रहते हैं, तो उन मंजिलों के बीच जाना जारी रखना कुशल हो सकता है, लेकिन किसी बिंदु पर 100 का दौरा करना अच्छा होगा।

मुझे लगता है (व्यक्तिगत अवलोकन से जब मुझे यह पता लगाने में दिलचस्पी थी) कि उनमें से अधिकांश करते हैं:

  1. दबाए गए पहले बटन की दिशा में जाना शुरू करें, हम किस दिशा में जा रहे हैं, इस पर नज़र रखें
  2. जब एक मंजिल तक पहुँच जाता है और उस बटन को दबाया जाता है, तो दरवाजे को बंद करें और खोलें, इस मंजिल के बटन को चिह्नित करें जैसा कि अब और नहीं दबाया गया है।
    • यदि अभी और मंजिलें हैं जिन्हें हमें उसी दिशा में जाने की आवश्यकता है, तो उस दिशा में चलते रहें
    • यदि नहीं और अभी भी फर्श हैं तो हमें उस दिशा में जाने की जरूरत है।
    • यदि नहीं तो हम कर रहे हैं और 1 पर शुरू होगा जब एक बटन फिर से दबाया जाता है।

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

आपको कभी भी एक पूरे रास्ते का पता नहीं लगाना है , बस आगे किस दिशा में जाना है।


इसने मेरे दिमाग को पूरी तरह से छोड़ दिया, मैं दक्षता पर केंद्रित था और भूल गया कि अन्य चीजें भी महत्वपूर्ण हैं। यह अभी भी कुशल नहीं है कि 2-> 100 और 1 से वापस जाएं क्योंकि यह एक ही दिशा में था, लेकिन कम से कम यह कोई भुखमरी सुनिश्चित करता है। और, पूरी तरह से विषय, शायद यही कारण है कि इस तर्क के साथ दो लिफ्ट खोजने के लिए आम है? अगर मुझे आश्चर्य होता है कि क्या किसी भी समय विपरीत दिशा में जाने वाले लिफ्टों को ढूंढना अधिक आम है। वैसे भी, मैं अभी भी कम से कम पूरे रास्ते को खोजने के लिए उत्सुक हूं, लेकिन यह मेरे सवाल का बहुत ही करीने से जवाब देता है, धन्यवाद
Raed Tabani

7
ध्यान दें कि एक बार जब आप 100 मंजिलों वाली एक इमारत में पहुंच जाते हैं, तो आपके पास आमतौर पर केवल मंजिलों की एक विशिष्ट श्रेणी (जैसे 0-19, 20-39,…) की सेवा करने वाले लिफ्ट होते हैं, साथ ही साथ लिफ्ट भी व्यक्त होती हैं जो केवल लंबी दूरी तक जाती हैं (जैसे 0 50, 0 से 100, 50 से 100, लेकिन बीच में कोई फर्श नहीं), इसलिए आपको अपने गंतव्य पर जाने के लिए लिफ्ट को बदलना पड़ सकता है। आपके पास प्रति शाफ्ट कई एलीवेटर भी हो सकते हैं जो स्पष्ट रूप से एक दूसरे को पास नहीं कर सकते हैं। पूरी तरह से ऑफ-टॉपिक: IIRC, उपयोगकर्ता अनुभव साइट पर उन अप और डाउन एरो बटन की दक्षता के बारे में एक सवाल था जो बहुत ही आकर्षक पढ़ने के लिए बनाया गया था।
जोर्ग डब्ल्यू मित्तग

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

केवल दूसरी चीज जो मैं जोड़ूंगा, वह यह है कि अक्सर उनके पास एक 'घर' मंजिल होती है, जिसका उपयोग करने पर वे वापस लौटेंगे, यह अलग-अलग लिफ्ट के लिए अलग हो सकता है, और संभवतः दिन के समय और अपेक्षित उपयोग पैटर्न के आधार पर भी बदल सकता है
jk ।

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

13

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

अन्य एलिवेटर एल्गोरिदम हैं। उदाहरण के लिए, एक अपार्टमेंट बिल्डिंग पर विचार करें, जहां आप जाते समय अपार्टमेंट अधिक महंगे मिलते हैं। इमारत के मालिक लिफ्ट एल्गोरिथ्म को संशोधित करने के लिए चुन सकते हैं "जब तक संभव हो उसी दिशा में जाएं लेकिन केवल नीचे जाने के रास्ते पर रोकें"। इस तरह अगर आपके पास लिफ्ट में ऐसे लोग हैं जो लॉबी में हैं और 2, 5 और 10 में जा रहे हैं, तो लिफ्ट 10 तक जाती है, फिर 5, फिर 2, वे कितने किराए का भुगतान करते हैं, इसके लिए लोगों को छोड़ दिया जाता है। लेकिन निश्चित रूप से जब 10 पर लोग अपना अपार्टमेंट छोड़ देते हैं, तो उन्हें लॉबी में जाने के लिए अधिक बार इंतजार करना होगा।

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


1
यह दुर्लभ प्रतीत होता है (अन्य योगविद्या)
FindOutIslamNow

10

ध्यान दें कि लिफ्ट कुछ हार्ड ड्राइव नियंत्रकों के समान शेड्यूलिंग एल्गोरिदम का उपयोग करते हैं। मानक SCAN एल्गोरिदम को एलेवेटर एल्गोरिदम के रूप में भी जाना जाता है । मुझे लगता है कि व्यवहार में देखो एल्गोरिथ्म, अधिक आम है के रूप में यह स्कैन की तुलना में थोड़ा अधिक सक्षम है।


जब आप इतना निश्चित रूप से बोलते हैं, तो क्या आपके पास लिफ्ट के लिए कोड लागू करने का पेशेवर अनुभव है? विशेष रूप से नए लिफ्ट सिस्टम? मुझे उत्सुकता है अगर NYC में 9/11 के बाद यात्रियों को नीचे लाने और उन्हें लाने के लिए उच्च प्राथमिकता दी गई है।
जॉन ज़ब्रोस्की
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.