कतारों के लिए कुछ अच्छे, सरल उदाहरण क्या हैं? [बन्द है]


9

मैं CS2 ( Java and data structures) सिखा रहा हूं , और जब शिक्षण कतारों का उपयोग करने के लिए अच्छे उदाहरणों के साथ आने में कुछ कठिनाई हो रही है। मेरे द्वारा उपयोग किए जाने वाले दो प्रमुख एप्लिकेशन multithreadedमैसेज पासिंग हैं (लेकिन एमटी प्रोग्रामिंग पाठ्यक्रम के दायरे से बाहर है), और BFS-style algorithms(और मैं इस शब्द को बाद के समय तक ग्राफ में शामिल नहीं करूंगा)।

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

अच्छे, सरल एल्गोरिदम या कतारों के किसी भी सुझाव जो मैं उदाहरण के रूप में उपयोग कर सकता हूं, लेकिन इसके लिए न्यूनतम पूर्व ज्ञान की आवश्यकता होती है?


+1, लेकिन मैं 'कतार' टैग बनाने से बचना चाहूँगा, यह देखते हुए कि इसमें केवल आपका प्रश्न है। मैंने 'डेटा-स्ट्रक्चर्स' का उपयोग किया है।
केप्टे

@ K.Steff, आपके पास दोनों :-) हो सकता है कि कोई भी नया टैग शुरुआत में केवल एक ही प्रश्न के साथ जुड़ा हो।
पेर्ट टॉर्क

1
जब आप बीएफएस को कवर करते हैं, तो कतारों को कवर करना स्वाभाविक है। तब तक क्यूँ नहीं बचा? आपको लिंक किए गए सूचियों और सरणी सूचियों के साथ कतार को कवर करने की आवश्यकता नहीं है, क्योंकि उनके पास एक रैखिक प्रतिनिधित्व भी है।
केविन क्लाइन

@ PéterTörök मुझे एहसास है कि सभी टैग खाली शुरू होते हैं, लेकिन एक 'कतार' खोज से 313 प्रश्न मिलते हैं, और किसी अन्य ने 'कतार' टैग नहीं बनाया है। यह सिर्फ IMO है, वैसे भी
Ktete

उत्तरों में एक आवर्ती विषय वास्तविक-विश्व कतारों का अनुकरण प्रतीत होता है। मेरी अब तक की सोच यह है कि मैं उन चीज़ों के उदाहरणों का उपयोग करना पसंद करूँगा जहाँ मैं एक समस्या को हल करने के लिए एक कतार का उपयोग करूँगा जो वास्तव में प्रोग्रामिंग में उत्पन्न होती है, और यह कि भौतिक-दुनिया के बहुत से उदाहरण समवर्ती वातावरणों में सर्वश्रेष्ठ चमकते हैं। हालांकि, इस विषय की पुनरावृत्ति को देखते हुए, यह अच्छी तरह से हो सकता है कि मैं सोच की एक उपयोगी रेखा पर नहीं हूं। सुझाव आते रहें! और आपकी बहुत मदद के लिए धन्यवाद।
माइकल एकस्ट्रैंड

जवाबों:


14

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

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


जैसा कि मैंने कहा, यह उदाहरण दोनों बहुत सहज है और लगभग अक्सर इस्तेमाल भी किया जाता है;)
निशान्तानी

1
आप भत्तों (एयरो प्लान) वाले ग्राहकों के लिए प्राथमिकता कतार लगाकर जटिलता जोड़ सकते हैं।
साठफुटेरसुडे

1
IMO, सबसे आसान उदाहरण हैं जिनका हम जीवन में सामना करते हैं। एक 'लाइन' उदाहरण एक कतार का एक शानदार प्रतिनिधित्व है और इससे आपके छात्रों को सीखने में मदद मिलेगी। वास्तव में, जब मैं कतार के बारे में सोचता हूं और उनके संचालन को कैसे परिभाषित किया जाता है, तो मैं अक्सर इसे बेहतर रूप से देखने में मदद करने के लिए 'लाइन' उदाहरण के बारे में सोचता हूं।
निकोलस

यह कतारबद्ध सिद्धांत पर संक्षिप्त रूप से स्पर्श करने का एक शानदार अवसर भी है: क्यों एक रजिस्टर में कई रजिस्टरों की सेवा प्रति रजिस्टर लाइन से बेहतर है। उन्हें एक सिमुलेशन बनाने और इसके साथ खेलने दें। : इंजीनियर लड़का एक महान, सरल व्याख्या है engineerguy.com/videos/video-lines.htm
jpeacock

5

जब मैंने कतारों को सीखा तो मेरे शिक्षक ने पुलिस नियंत्रण में कारों के लिए लाइन-अप का उपयोग करके मुझे उनसे मिलवाया। कारों को पकड़ने वाली एक कतार थी ("प्रतीक्षा-कतार") और पुलिस आदमी हमेशा कतार में अगली कार को नियंत्रित करेगा और या तो आगे के निरीक्षण के लिए अपने सहयोगी को भेजेगा या कार को पास होने देगा।

एक उदाहरण जिसका अक्सर उपयोग किया जाता है, वह है सुपर मार्केट में कतार ...

आप अपने छात्रों से स्वयं कुछ उदाहरण देने के लिए क्यों नहीं कहते?


सुपरमार्केट उदाहरण के लिए +1। आपने इसका उल्लेख किया था जब मैं अपना उत्तर लिख रहा था!
माइक कैपुतो

3

एक उदाहरण जो मेरे दिमाग में आता है वह है मैकडॉनल्ड्स में हैमबर्गर प्रोसेसिंग लाइन। कई प्रकार के विभिन्न बर्गर हैं, प्रत्येक का उत्पादन कई अलग-अलग श्रमिकों द्वारा किया जा सकता है और प्रत्येक की अपनी कतार है। वहाँ से, थोड़ी देर के बाद तैयार बर्गर ले लिए जाते हैं, FIFO ऑर्डर में, एक कैशियर द्वारा, जिसने उस तरह का बर्गर ऑर्डर किया था।

इसलिए कई उत्पादकों और उपभोक्ता हैं, और प्रत्येक कतार बंधी हुई है।


मुझे याद है कि कॉलेज के सहपाठियों ने फास्ट फूड रजिस्टर की विभिन्न शैलियों की तुलना प्रोसेसर डिजाइनों से की है। एकाधिक रजिस्टरों द्वारा नियंत्रित एक कतार? प्रत्येक अपनी खुद की कतार के साथ रजिस्टर? एक ही लाइन पर कई कर्मचारी - सुपर स्केलर प्रसंस्करण। यह मनोरंजक था।

3

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

फिर मुख्य ग्राहकों को पेश करके प्राथमिकता कतार के बारे में बात करना शुरू करना आसान होगा, जो कतार में कूद सकता है, आप प्राथमिकता कतार पेश कर सकते हैं।

आप किस पाठ्यपुस्तक का उपयोग कर रहे हैं?


कैरानो - जावा के साथ डेटा संरचनाएं और अमूर्तता ।
माइकल एकस्ट्रैंड

2

एक कतार का एक आदर्श उदाहरण एक खाते के खिलाफ एक बैंक प्रसंस्करण लेनदेन होगा। आमतौर पर आप दिन के अंत में "लंबित" लेनदेन की एक सूची देखेंगे। जब लेखांकन किया जाता है तो उन लेनदेन को खाते में लागू किया जाता है। आप इसके साथ प्राथमिकता वाली कतारों के क्षेत्र में भी जा सकते हैं। ऐसा लगता है कि अधिकांश बैंक डेबिट पर प्राथमिकता देते हैं, जब वे रात के लेनदेन को संसाधित करते हैं, तो वे किसी भी लंबित क्रेडिट को लागू करने से पहले आपको ओवर ड्राफ्ट फीस के साथ डिंग कर सकते हैं।

लेन-देन समय से पहले निष्पादित और समाप्त हो गया और लेखांकन प्रक्रिया द्वारा खाते पर लागू होने के क्रम में कतार में डाला जाता है।


2

मैं एक टेलीकॉम प्रोग्रामर हुआ करता था, इसलिए यह ध्यान में आता है:

एक ग्राहक सेवा हॉटलाइन। एक कॉल आती है, कॉल को संभालने के लिए पर्याप्त ऑपरेटर नहीं होते हैं और इसे एक कतार में रखा जाता है। अगली कॉल आती है और इसे कतार में भी रखा जाता है। फिर जब अगला ऑपरेटर उपलब्ध हो जाता है तो कतार में प्रवेश करने वाला पहला कॉल उपलब्ध ऑपरेटर को सौंपा जाता है।


2

स्पष्ट वास्तविक दुनिया के उदाहरण चेकआउट लाइनों और इस तरह की चीजें होंगे, लेकिन चूंकि आप कंप्यूटिंग में सख्ती से निहित एक उदाहरण की तलाश कर रहे हैं, क्या मैं नौकरी के समय-निर्धारण के लिए सुझाव दे सकता हूं ?

मुझे नहीं पता कि आपके कितने छात्रों ने ऑपरेटिंग सिस्टम की क्लास ली है, लेकिन यह अच्छी बात है कि उन सभी ने किसी न किसी बिंदु पर अपनी प्रक्रियाओं की जाँच करने के लिए टास्क मैनेजर का उपयोग किया है । आप शेड्यूलिंग कतार का एक सरल उदाहरण पेश कर सकते हैं, और उन्हें एक प्रोग्राम लिखने के लिए कुछ होमवर्क असाइन करें जो किसी दिए गए आकार का "कार्य" उत्पन्न करता है, और उन्हें FIFO क्रम में संसाधित करता है जब वे इसे "शुरू" करते हैं।

यह समझने के लिए एक काफी आसान अवधारणा है, इस विचार को प्रदर्शित करता है कि कतार अपनी सामग्री को इस क्रम में संचालित करती है कि यह उन्हें स्वीकार करता है, और उन्हें सीपीयू निर्धारण के लिए एक (बहुत अल्पविकसित और सरलीकृत) परिचय देता है। बस मेरे दो बिट्स।

आप मल्टीथ्रेडिंग में उनके आवेदन को ला सकते हैं, लेकिन जब तक छात्रों को थ्रेडेड प्रोग्राम लिखने का कुछ अनुभव नहीं होता है, तब तक मैं उन्हें काम नहीं सौंपूंगा जो दो निराशाजनक हो सकते हैं। मुझे याद है कि कॉलेज के अपने दूसरे वर्ष में मुझे डेटा संरचनाओं (विशेष रूप से जावा में, C ++ नहीं किया और पॉइंटर्स के बारे में नहीं सीखा) को सीखने में परेशानी हुई, इसलिए सीधे कंप्यूटिंग से संबंधित एक सरल लेकिन व्यावहारिक उदाहरण शायद सबसे अच्छा है।


1

असली दुनिया:

  • किसी भी समय जो लोग लाइन अप करते हैं: किराने की दुकान पर कैशियर, एक मेज के इंतजार में रेस्तरां में (आप उन बीपर में काम कर सकते हैं जो वे कभी-कभी सादृश्य में देते हैं), आदि यह तब सहायक होता है जब आप नोटिस करते हैं कि यूके में वे अक्सर लाइनों के बजाय इन कतारों को बुलाओ (NA में आम)
  • पुस्तक श्रृंखला पढ़ना ', author.publish => queue.push और student.read => queue.pop

गैर-वास्तविक दुनिया:

  • किसी भी सबमिट किए गए डेटा को एकल-थ्रेडेड वातावरण में संसाधित करना जहाँ प्रसंस्करण सबमिट करने से अधिक समय लगता है (उदाहरण के लिए ऑनलाइन स्टोर के लिए चेकआउट संचालन)।
  • कोई भी FIFO संग्रह, जिसे पुनरावृत्त किया जा सकता है, कूटर के while(queue.peek)बजाय कतारों और उपयोग का उपयोग कर सकता है।

1

मैं एक उदाहरण के रूप में गेम का उपयोग करना पसंद करता हूं क्योंकि यह आमतौर पर फ़ाइल IO या जो कुछ भी आप के साथ आ सकता है, उससे थोड़ा अधिक रोमांचक है।

इसलिए जब आप एक रणनीति गेम में एक इकाई में एक पंक्ति में कई कमांड जारी करना चाहते हैं (जैसे। आधार के 4 कोनों को स्काउट करने के लिए एक Zergling है, तो आधार के केंद्र में आत्महत्या कर लें, एक कतार एक अच्छा विकल्प होगा। ।)

या हो सकता है कि आपके पास एक ऐसा एप्लिकेशन हो जो केवल 30 फ्रेम प्रति सेकंड की प्रक्रिया कर सकता है, लेकिन आपको फ्रेम के बीच 4 या 5 इनपुट मिल सकते हैं। यदि आपके पास एक परिवर्तन हथियार इनपुट और एक शूट इनपुट है, तो आप यह सुनिश्चित करना चाहते हैं कि जो क्रम उन्हें प्राप्त हुआ था, उसे संभाल लें अन्यथा जब आप चाकू मारना चाहते थे तो आप ग्रेनेड मार सकते हैं। और अगर आप चाकू मारना चाहते हैं, तो आप बुरा समय मानते हैं। (स्की प्रशिक्षक मेम पर डाल दिया और इसे अपनी स्लाइड में फेंक दें) :)

एक सर्वर हैंडलिंग अनुरोध एक और अच्छा है।

इनपुट लेने वाली एक सीएनसी मशीन। मशीन केवल इतनी तेजी से जा सकती है, इसलिए इसे इनपुट को कतारबद्ध करने की आवश्यकता है।


1

कुछ उदाहरण मैं सोच सकता हूं:

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

1

विनिर्माण लाइनें कतारों से भरी हैं। एक भरने की मशीन के लिए खाली बोतलों की एक पंक्ति के बारे में सोचो। कई वस्तुओं में क्रमिक रूप से प्रक्रिया को लागू करने के लिए पहला-पहला-पहला-आउट प्राकृतिक तरीका है। एक प्रक्रिया को दूसरे से अलग करने के लिए भी कतारों का उपयोग किया जाता है: यदि लेबलिंग मशीन के साथ अल्पकालिक समस्या है, तो भरने की मशीन को तुरंत रोकना नहीं है।

उसी तरीके से सॉफ्टवेयर में कतारों का उपयोग किया जाता है। एक प्रक्रिया के आउटपुट को दूसरी प्रक्रिया के इनपुट के लिए कतारबद्ध किया जा सकता है। यह सच है कि क्या आप अंतर-प्रक्रिया संचार, अंतर-धागा संचार, या बस एक जटिल प्रक्रिया को उन हिस्सों में तोड़ रहे हैं जो सभी एक ही धागे द्वारा नियंत्रित किए जा सकते हैं।

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

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

  • एक इनपुट पढ़ें, इसे इनपुट कतार में जोड़ें, और तब तक दोहराएं जब तक कि अधिक इनपुट न हों

  • कतार से एक आइटम मिलता है

    • यदि आइटम एक संख्या है, तो इसे तर्क स्टैक पर धकेलें
    • यदि आइटम एक ऑपरेटर है, तो आवश्यक तर्क और मूल्यांकन पॉप करें
    • आउटपुट कतार में परिणाम जोड़ें
    • स्टैक खाली होने तक दोहराएं
  • आउटपुट कतार से एक आइटम पढ़ें, इसे प्रिंट करें, और तब तक दोहराएं जब तक आउटपुट कतार खाली न हो


1

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

समस्या निम्नलिखित के आंकड़ों का पता लगाने के लिए प्रक्रिया का अनुकरण करना है: ग्राहकों की कतार में अधिकतम समय (अधिकतम, न्यूनतम, औसत) और कतार में प्रतीक्षा कर रहे ग्राहकों की संख्या। मैं दिन के हर मिनट में नए ग्राहक आने की पूर्वनिर्धारित आवृत्ति और यादृच्छिक संख्या जनरेटर से मूल्यों के साथ सेवा विंडो पर एक ग्राहक के औसत सेवा समय का उपयोग करता हूं।

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


1

किसी भी समय-निर्धारण एल्गोरिथ्म में लगभग हमेशा एक कतार शामिल होती है।

यह एक साधारण पहले आओ पहले पाओ की कतार में एकल उपभोक्ता के लिए बफर अनुरोध कर सकता है।

एक जटिल नौकरी शेड्यूलिंग कतार में जहां "कार्यों" में प्राथमिकताएं हो सकती हैं और "श्रमिकों" में अलग-अलग क्षमताएं हैं।

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

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