जैसा कि @randomA ने सुझाव दिया है, हम दो चरणों में आगे बढ़ेंगे: हम पहले स्टिक्स का सेट ढूंढते हैं जो कट जाएगा और फिर कटौती की संख्या को कम करेगा।
प्रश्न में विशेष मामले में, हम प्रकार / ताकि लाठी नाम । यह O ( n लॉग एन ) लेता हैL1≥L2≥⋯≥LnO(nlogn) समय लगता है।
के रूप में @ user1990169 ने बताया, हम एक टुकड़ा काट करने की आवश्यकता नहीं ।i≥k
पहले चरण में हम एक द्विआधारी खोज को रोजगार संख्या को खोजने के लिए , 1 ≤ रों ≤ कश्मीर , तो लाठी कि 1 , ... , रों में कटौती हो सकती है कम से कम कश्मीर आकार के टुकड़े एल एस (प्लस कुछ छोटे टुकड़ों में), लेकिन लाठी 1 , ... , रों - 1 नहीं में कटौती हो सकती है कश्मीर के आकार के टुकड़े एल एस - 1 । इसमें O ( k log k ) समय लगेगा।s1≤s≤k1,…,skLs1,…,s−1kLs−1O(klogk)
यदि , तो यह मान इष्टतम आकार है और हम चरण दो को छोड़ सकते हैं।Ls−1=Ls
अन्यथा हम जानते हैं कि इष्टतम आकार संतुष्ट एल एस - 1 > ओ ≥ एल एस और अगर ओ > एल एस तो ओ बराबर आकार के टुकड़ों में लाठी की कम से कम एक काटने से परिणाम। चरण दो निर्धारित करेगा ओ :oLs−1>o≥Lso>Lsoo
प्रत्येक छड़ी , 1 ≤ i ≤ s के लिए , उम्मीदवार के आकार का एक सेट निम्नानुसार निर्धारित करें: यदि आकार के टुकड़ों में कटौती L s छड़ी को r i टुकड़ों में बदल देती है (छोटे वाले, यदि कोई हो तो), तो इसके लिए उम्मीदवार स्टिक सभी मान L i हैंi1≤i≤sLsri , जहांj≤आरमैंऔरएलमैंLijj≤ri। (देखLij<Ls−1 @ user1990169 का जवाब क्यों ये केवल उम्मीदवार आकार हैं।)
प्रत्येक उम्मीदवार के आकार के लिए बनाए रखें, यह कितनी बार हुआ। एक संतुलित खोज पेड़ का उपयोग करना, इस में किया जा सकता , के बाद से उम्मीदवार आकार की कुल संख्या से बाध्य है Σ मैं r मैं ≤ 2 कश्मीर ।O(klogk)∑iri≤2k
अब उम्मीदवार का आकार जो सबसे अधिक बार घटित होता है और एक वैध काटने की ओर जाता है, वह है जो हमें इष्टतम समाधान देता है। इसके अलावा, यदि किसी उम्मीदवार का आकार वैध कटिंग की ओर जाता है, तो कोई भी छोटा आकार वैध कटिंग की ओर ले जाएगा।
इसलिए हम फिर से सबसे बड़ी उम्मीदवार की लंबाई का पता लगाने के लिए द्विआधारी खोज को नियुक्त कर सकते हैं जो में वैध कटिंग की ओर जाता है । फिर हम इस सीमा तक उम्मीदवार के सेट पर पुनरावृत्ति करते हैं और ओ ( के ) में उनके बीच सबसे बड़ी भीड़ के साथ एक पाते हैं।O(klogk)O(k) ।
कुल में हमें , या O ( k log k ) में रनटाइम मिलता है , यदि हम प्रारंभिक प्रकार को अनदेखा करते हैं (या नहीं करना है)।O(nlogn)O(klogk)