अलग-अलग डंडियों से बराबर कटाई करना


10

आपके पास मनमाने ढंग से लंबाई की n लाठी है, जरूरी नहीं कि अभिन्न हो।

कुछ छड़ियाँ काट कर (एक कट एक कट को काटता है, लेकिन हम जितनी बार चाहें उतनी बार काट सकते हैं), आप k<n स्टिक को ऐसे प्राप्त करना चाहते हैं :

  • इन सभी k लाठी की लंबाई समान होती है;
  • सभी k लाठी कम से कम तब तक हैं जब तक कि अन्य सभी छड़ें।

ध्यान दें कि हम C कट्स करने के बाद n+C स्टिक्स प्राप्त करते हैं ।C

आप किस एल्गोरिथम का उपयोग करेंगे ताकि आवश्यक कटौती की संख्या कम से कम हो? और वह संख्या क्या है?

उदाहरण के लिए, ले k=2 और किसी भी n2 । निम्नलिखित एल्गोरिथ्म का उपयोग किया जा सकता है:

  • लंबाई ऐसी है कि के अवरोही क्रम द्वारा लाठी आदेश L1L2Ln
  • यदि L12L2 तो कटौती छड़ी # 1 के लिए दो बराबर टुकड़ों। अब लंबाई की दो छड़ें हैं L1/2 जो लंबे समय शेष लाठी के रूप में के रूप में कम से कम कर रहे हैं, 2n
  • अन्यथा ( ), कट स्टिक # 1 से दो असमान टुकड़ों एल 2 और एल 1 - एलL1<2L2L2 । अब लंबाई की दो छड़ें हैं एल 2 , जो अधिक लंबी है एल 1 - एल 2 और अन्य छड़ें 3 ... एनL1L2L2L1L23n

दोनों ही मामलों में, एक भी कटौती पर्याप्त है।

मैंने इसे बड़े को सामान्य बनाने की कोशिश की , लेकिन विचार करने के लिए बहुत सारे मामले हैं। क्या आप एक सुरुचिपूर्ण समाधान पा सकते हैं?k

जवाबों:


6

इस समस्या को हल करने के लिए पहला मुख्य अवलोकन यह है कि काटने की लंबाई की व्यवहार्यता ,l

,Feasible(l)=[i=1nLilk]

टुकड़े-स्थिर, स्थिर, निरंतर और में बढ़ती नहीं है । चूंकि आवश्यक कटौती की संख्या समान रूप से व्यवहार करती है, इसलिए इष्टतम लंबाई ढूंढना बस हैl

l=max{lFeasible(l)}

इसके अलावा, जैसा कि अन्य जवाबों ने प्रस्तावित किया है, सभी जंप डिसकंटिनिटी में । यह हमें एक असतत, एक आयामी खोज समस्या के साथ छोड़ देता है जो द्विआधारी खोज के लिए उत्तरदायी है (उम्मीदवारों के एक सीमित सेट को छांटने के बाद)।Li/j

इसके अलावा ध्यान दें कि हमें केवल एल पर विचार करने की आवश्यकता है कि की तुलना में कम कर रहे हैं कश्मीर एक -largest, कि एक हमेशा संभव है के बाद से।Lik

फिर, अलग सीमा पर अलग क्षमता के एल्गोरिदम के लिए सीसा।j

  • 1jk द्विघात आकार का एक खोज अंतरिक्ष में परिणाम (में ),k
  • 1jk/i एक linearithmic एक (यह मानते हुए में आकार को कम करके हल कर रहे हैं), औरLi
  • एक रैखिक एक में थोड़ा अधिक शामिल सीमा।

इस का उपयोग करते हुए, हम समय में प्रस्तावित समस्या को हल कर सकते हैं और अंतरिक्ष Θ (Θ(n+klogk)Θ(n+k)

आगे अवलोकन है कि में योग है में बढ़ता एल द्वारा 1 प्रत्येक उम्मीदवार के लिए एल मैं / j "पारित कर दिया", गिनती डुप्लिकेट। इस का उपयोग करना, हम बजाय Binar खोज के पद चयन का उपयोग करें और एक एल्गोरिथ्म प्राप्त कर सकते हैं कि समय और अंतरिक्ष में रन ΘFeasiblel1Li/j है, जो इष्टतम है।Θ(n)

हमारे लेख में विवरण पाएं ईवेस्ट -फ्री स्टिक डिवीज़न विथ फ़ेवेस्ट कट्स (रीइटिग एंड वाइल्ड, 2015 द्वारा) के लिए कुशल एल्गोरिदम


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

4

जैसा कि @randomA ने सुझाव दिया है, हम दो चरणों में आगे बढ़ेंगे: हम पहले स्टिक्स का सेट ढूंढते हैं जो कट जाएगा और फिर कटौती की संख्या को कम करेगा।

प्रश्न में विशेष मामले में, हम प्रकार / ताकि लाठी नाम । यह O ( n लॉग एन ) लेता हैL1L2LnO(nlogn) समय लगता है।

के रूप में @ user1990169 ने बताया, हम एक टुकड़ा काट करने की आवश्यकता नहीं ik

पहले चरण में हम एक द्विआधारी खोज को रोजगार संख्या को खोजने के लिए , 1 रों कश्मीर , तो लाठी कि 1 , ... , रों में कटौती हो सकती है कम से कम कश्मीर आकार के टुकड़े एल एस (प्लस कुछ छोटे टुकड़ों में), लेकिन लाठी 1 , ... , रों - 1 नहीं में कटौती हो सकती है कश्मीर के आकार के टुकड़े एल एस - 1 । इसमें O ( k log k ) समय लगेगा।s1sk1,,skLs1,,s1kLs1O(klogk)

यदि , तो यह मान इष्टतम आकार है और हम चरण दो को छोड़ सकते हैं।Ls1=Ls

अन्यथा हम जानते हैं कि इष्टतम आकार संतुष्ट एल एस - 1 > एल एस और अगर > एल एस तो बराबर आकार के टुकड़ों में लाठी की कम से कम एक काटने से परिणाम। चरण दो निर्धारित करेगा :oLs1>oLso>Lsoo

प्रत्येक छड़ी , 1 i s के लिए , उम्मीदवार के आकार का एक सेट निम्नानुसार निर्धारित करें: यदि आकार के टुकड़ों में कटौती L s छड़ी को r i टुकड़ों में बदल देती है (छोटे वाले, यदि कोई हो तो), तो इसके लिए उम्मीदवार स्टिक सभी मान L i हैंi1isLsri , जहांjआरमैंऔरएलमैंLijjri। (देखLij<Ls1 @ user1990169 का जवाब क्यों ये केवल उम्मीदवार आकार हैं।)

प्रत्येक उम्मीदवार के आकार के लिए बनाए रखें, यह कितनी बार हुआ। एक संतुलित खोज पेड़ का उपयोग करना, इस में किया जा सकता , के बाद से उम्मीदवार आकार की कुल संख्या से बाध्य है Σ मैं r मैं2 कश्मीरO(klogk)iri2k

अब उम्मीदवार का आकार जो सबसे अधिक बार घटित होता है और एक वैध काटने की ओर जाता है, वह है जो हमें इष्टतम समाधान देता है। इसके अलावा, यदि किसी उम्मीदवार का आकार वैध कटिंग की ओर जाता है, तो कोई भी छोटा आकार वैध कटिंग की ओर ले जाएगा।

इसलिए हम फिर से सबसे बड़ी उम्मीदवार की लंबाई का पता लगाने के लिए द्विआधारी खोज को नियुक्त कर सकते हैं जो में वैध कटिंग की ओर जाता है । फिर हम इस सीमा तक उम्मीदवार के सेट पर पुनरावृत्ति करते हैं और ( के ) में उनके बीच सबसे बड़ी भीड़ के साथ एक पाते हैं।O(klogk)O(k)

कुल में हमें , या O ( k log k ) में रनटाइम मिलता है , यदि हम प्रारंभिक प्रकार को अनदेखा करते हैं (या नहीं करना है)।O(nlogn)O(klogk)


द्विआधारी खोज चरण में, आप कैसे वास्तव में जाँच करते हैं, तो "लाठी में कम से कम कटौती हो सकती है कश्मीर के आकार के टुकड़े एल एस "? 1,,skLs
एरेल सहगल-हलेवी

के लिए गणना एल मैं / एल एस । इन मूल्यों का योग आपके द्वारा प्राप्त किए जा सकने वाले टुकड़ों की संख्या है। 1isLi/Ls
फ्रैंकडब्ल्यू

"उम्मीदवार का आकार जो सबसे अधिक बार होता है ... वह है जो हमें इष्टतम समाधान देता है" - क्यों?
एरगल सहगल-हलेवी

हर बार होने के बाद, हमारे पास एक छड़ी होती है जो टी - 1 कट के साथ टी टुकड़े देती tt1
फ्रैंकव सिप

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

1

के बाद आप अपने लंबाई के अवरोही क्रम में लाठी का आदेश दिया है, तो एक छड़ी केवल अगर सब चिपक में कटौती की जाएगी एल 1 , एल 2 , L i - 1 कट गया है।LiL1,L2,...Li1

अब के बाद से , हम लाठी पर कोई कटौती नहीं करेगा एल कश्मीर के बाद से, के बाद से हम हमेशा हो सकता है कश्मीर लंबाई के साथ लाठी एल कश्मीरk<nLkkLk

इसलिए अब बजाय , हम केवल k - 1 स्टिक (संभवतः k -th स्टिक को एक पूरे के रूप में जोड़ रहे हैं) के साथ काम कर रहे हैं , और सबसे खराब कट की अधिकतम संख्या जो कि सबसे खराब स्थिति में आवश्यक होगी = k - 1nk1k=k1

इसके अलावा, अगर कटौती की इष्टतम संख्या , तो उन k - 1 छड़ियों में से कम से कम एक सेट होगा जो कि 1 मूल छड़ी<k1k1 (या तो भागों में या 1 टुकड़े में) से पूरी तरह से लिया जाएगा। , यानी, उस मूल छड़ी का कोई भी हिस्सा 'अनकहा' नहीं रहेगा। ऐसा इसलिए है, क्योंकि कबूतर-छेद से सिद्धांत द्वारा, कम से कम 1 कट होगा जो 1 से अधिक वैध छड़ी का उत्पादन करना होगा।

फिर आप दो छोरों के लिए नेस्टेड कर सकते हैं (दोनों को तक )। बाहरी पाश छड़ी संख्या को निरूपित करेगा मैं जिसका सभी भागों है लिया जाना और भीतरी पाश भागों की संख्या को निरूपित करेगा जे कि छड़ी के बने। प्रत्येक आकार के लिए L ikij
जाँच करें कि क्या आपक्रमिक रूप से,L L कोएकस्टिक से काट कर संभव हो सकते हैं, और यदि आप कर सकते हैं, तो अभी तक आवश्यक न्यूनतम कटौती को अपडेट करें यदि वर्तमान आवश्यक संख्या कम है।LijL1

उपरोक्त एल्गोरिथ्म की कुल जटिलता O(nlog(n)+k3)


1

उच्च स्तरीय विचार द्विआधारी खोज होगा।

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

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

उम्मीद है, मैं अन्य उत्तरों से कुछ उपयोगी देख सकता हूं।


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

@FrankW मैं चल रहे समय के बारे में बहुत निश्चित नहीं हूं। मैं देखूंगा कि अन्य लोगों के पास क्या है, यह पूछने के लिए काफी दिलचस्प सवाल है।
सूचित
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.