2010-01-08 13 views
6

हैलो कम करने के लिए Stackoverflow लोगों को,एल्गोरिथ्म वहाँ लागत

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

वर्तमान में मुझे सबसे सस्ता स्टोर मिलता है जो उपयोगकर्ता की सूची में सभी पुस्तकों को बेचता है, लेकिन मैं एक स्मार्ट सिस्टम चाहता हूं। यहां कुछ और जानकारी दी गई है:

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

यह सुनिश्चित नहीं है कि मेरी साइट से लिंक करना अच्छा है, लेकिन यह मेरी उपयोगकर्ता प्रोफ़ाइल में सूचीबद्ध है।

मैं स्टोर और किताबों का सबसे सस्ता संयोजन ढूंढने में सक्षम होना चाहता हूं।

मुझे डर है कि इसके लिए एक ब्रूट फोर्स दृष्टिकोण की आवश्यकता है - और 35 दुकानों के साथ, संयोजनों की संख्या मामूली संख्या में पुस्तकों के लिए बहुत बड़ी होगी। मुझे लगता है कि संयोजन की संख्या है (# दुकान)^(# किताबें) - लेकिन 100%

सवाल यह है कि, मुझे किस दृष्टिकोण का उपयोग करना चाहिए? क्या यह समस्या समस्याओं के एक प्रसिद्ध वर्ग में फिट है? यदि ब्रूट फोर्स की आवश्यकता है, तो रूबी में ऐसा करने का एक अच्छा तरीका क्या है और क्या मैं पहले कोशिश करने के लिए दुकानों को प्राथमिकता दे सकता हूं?

उत्तर

6

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

  1. ऑफलाइन, प्रत्येक दुकान के शिपिंग नीतियों का अनुमान है, इतना है कि, किताबें (और शायद उनके वजन) दिया आप का जिक्र किए बिना शिपिंग की लागत का अनुमान कर सकते हैं:

    यहाँ मैं क्या सलाह देते हैं, तो है उनकी साइटें

  2. प्रत्येक स्टोर के लिए, यदि उपलब्ध हो तो प्रत्येक पुस्तक की लागत कितनी होगी।
  3. ऑफ़लाइन, अपनी ऑफ़लाइन शिपिंग नीतियों का उपयोग करके, प्रत्येक दुकान, या दुकानों का सेट, और अनुमान लगाएं, कुल लागत कितनी होगी।
  4. सबसे सस्ती कीमत के साथ दुकान (या दुकानों) चुनें। यदि ऐसे कई हैं जो समान हैं, तो सटीक उत्तर की गणना करें।

आपको यह शुरू करना चाहिए, और आपको पूर्ण खोज से कम रखेगा।

+0

हाय - प्रतिक्रिया के लिए धन्यवाद। 1-3 पहले से ही जगह पर हैं। शिपिंग लागत निर्धारित करने के लिए एक प्रति-दुकान विधि का उपयोग किया जाता है। कठिनाइयों में से एक यह है कि शिपिंग मूल्य पुस्तकों की संख्या, या आदेश की कुल कीमत द्वारा निर्धारित किया जा सकता है - जो जीवन को थोड़ा जटिल बनाता है। निर्धारित करना कि कौन सी दुकान सबसे कम लागत के लिए सभी पुस्तकों को भेजती है, यह पता लगाना है कि किताबों में से एक को दुकान ए पर खरीदा जाना चाहिए, जबकि शेष दुकान बी से। – dkam

1

ब्रूट फोर्स को हमेशा एक अच्छी ह्युरिस्टिक द्वारा प्रतिस्थापित किया जा सकता है, यानी, एक एल्गोरिदम जिसे अभी तक "पर्याप्त पर्याप्त" करने के लिए जाना जाता है।

हालांकि मुझे 100% यकीन नहीं है, मुझे लगता है कि यह Knapsack problem से संबंधित है (जैसा कि हम सभी अब हाहा ..) एनपी-पूर्ण हैं।

अभी पेशकश करने के लिए कुछ भी बेहतर नहीं मिला, लेकिन शुभकामनाएं!

2

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

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

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

शुभकामनाएं, एक मजेदार समस्या की तरह लगता है!

2

गतिशील प्रोग्रामिंग दृष्टिकोण का उपयोग करने का प्रयास करें। आप इसके बारे में यहां पढ़ सकते हैं: http://www.topcoder.com/tc?module=Static&d1=tutorials&d2=dynProg इसके अलावा आप विकिपीडिया पर या "एल्गोरिदम के परिचय" पुस्तक (कॉर्मन) में इसके बारे में भी पढ़ सकते हैं।

यह काफी मानक समस्या है।

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