2011-11-13 17 views
6

हाय मैं एक कार्यक्रम तैयार कर रहा हूं जिसमें छात्र एक परीक्षा के लिए साइन अप कर रहे हैं जो देश के बाहर कई शहरों में आयोजित की जाती है। साइन अप करते समय छात्र तीन शहरों की एक सूची प्रदान करते हैं जहां वे अपनी वरीयता के लिए परीक्षा देना चाहते हैं। तो एक छात्र कह सकता है कि परीक्षा केंद्र के लिए उनकी पहली वरीयता न्यूयॉर्क के बाद शिकागो के बाद बोस्टन है।एल्गोरिदम

अब ध्यान रखें कि परीक्षा केंद्रों की सीमित क्षमता है, इसलिए वे प्रत्येक छात्र को पहली पसंद नहीं जोड़ सकते हैं। हालांकि हम कई छात्रों को या तो केंद्रों की अपनी पहली या दूसरी पसंद प्रदान करने और छात्रों को जितना संभव हो सके एक छात्र को तीसरा विकल्प केंद्र

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

+0

मेरे पेट लग रहा है कि एक "सही" एल्गोरिथ्म एन पी-सम्पूर्ण होगा है, और आप एक सन्निकटन के लिए समझौता करना होगा। –

+1

क्यों साइन अप करने वाले पहले छात्रों को प्राथमिकता न दें? आपको वैसे भी उन्हें अस्वीकार करना होगा। – alexpirine

+1

समस्या यह है कि हमें विशेष रूप से ग्राहक द्वारा बताया गया है कि पहले आने वाले पहले दृष्टिकोण के साथ न जाएं।इसका कारण यह है कि अलग-अलग स्थानों में छात्रों को अपनी परीक्षा फॉर्म भरने के लिए अलग-अलग तिथियां होती हैं। इसलिए यह उनकी गलती नहीं है कि उन्होंने दूसरों के मुकाबले अपना फॉर्म भर दिया। – user992010

उत्तर

5

क्लासिक stable marriages problem या college admission problem के एक संस्करण की तरह लगता है। विकिपीडिया में रैखिक-समय (प्राथमिकताओं की संख्या में, ओ (एन ²) व्यक्तियों की संख्या में) पूर्व के लिए एल्गोरिदम सूचीबद्ध करता है; एनआरएमपी बाद के लिए efficient algorithm का वर्णन करता है।

मुझे संदेह है कि यदि आप यादृच्छिक रूप से छात्रों के लिए परीक्षा स्थानों की प्राथमिकताओं (एक Fisher–Yates shuffle प्रति परीक्षा स्थान) उत्पन्न करते हैं और फिर स्थिर विवाह एल्गोरिदम लागू करते हैं, तो आपको एक सुंदर निष्पक्ष और कुशल समाधान मिल जाएगा।

2

यह समस्या minimum cost flow के उदाहरण के रूप में तैयार की जा सकती है। एन छात्रों की संख्या होने दें। प्रत्येक छात्र को क्षमता 1 के साथ स्रोत वर्टेक्स बनने दें। प्रत्येक परीक्षा केंद्र को क्षमता के साथ एक सिंक वर्टेक्स होना चाहिए, ठीक है, इसकी क्षमता। प्रत्येक छात्र से अपने पहले, दूसरे और तीसरे विकल्पों में एक चाप बनाओ। पहली पसंद arcs की लागत 0 पर सेट करें; दूसरी पसंद की लागत 1 से arcs; और तीसरी पसंद की लागत एन + 1.

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

-1

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

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