मल्टीसेट की संख्या ऐसी है कि 1 से


11

मेरी समस्या। को देखते हुए , मैं मान्य मल्टीसेटसेट की संख्या गिनना चाहता हूं । यदि एक मल्टीसेट वैध हैnSS

  • के तत्वों का योग है , औरSn
  • 1 से तक की प्रत्येक संख्या nको के कुछ तत्वों के योग के रूप में विशिष्ट रूप से व्यक्त किया जा सकता है S

उदाहरण। उदाहरण के लिए यदि n=5 तो {1,1,1,1,1},{1,2,2},{1,1,3} मान्य हैं।

हालाँकि, S={1,1,1,2} अमान्य है क्योंकि 2 का गठन {1,1} और दोनों द्वारा किया जा सकता है {2}(अर्थात, 2 को 2=1+1 और दोनों के रूप में व्यक्त किया जा सकता है 2=2) , इसलिए दूसरी शर्त नहीं है। इसी तरह 3 का गठन {2,1} और {1,1,1}

S={1,2,4 } भी अमान्य है क्योंकि1 से तक की सभी संख्याओं को5विशिष्ट रूप से बनाया जा सकता है, लेकिन के तत्वों का योग 5S नहीं है।5


मैंने काफी समय से इस समस्या के लिए एक अच्छा एल्गोरिथ्म खोजने की कोशिश की है, लेकिन इसे हल नहीं कर सकता। यह codec से है । मैंने कुछ प्रस्तुत समाधान देखे हैं, लेकिन मैं अभी भी समस्या को हल करने के लिए तर्क नहीं दे पाया। नोट: प्रश्न के लिए समय सीमा 10 सेकंड और n<109

एक मल्टीसेट के लिए मैं संकेतन का उपयोग होगा S={(a1,c1),(a2,c2)...} ai<aj अगर i<j , जिसका अर्थ है ai होता ci मल्टीसेट एस में कई बार

अब तक मैंने कुछ निष्कर्ष निकाले हैं

  • आवश्यक सॉर्ट किए गए मल्टीसेट का पहला तत्व 1 होना चाहिए1
  • Let दो गुण निम्नलिखित तो एक सेट हो आर < कश्मीर एक आर + 1 = एक आर  या  ( Σ आर मैं = 0 एक मैं ) + 1S={1,a2ak}|a1a2akr<k  ar+1=ar or (i=0rai)+1
  • चलो , जहां एक मैं हो रहा है मैं बार, ऊपर निष्कर्ष हम कह सकते हैं कि से तो आवश्यक गुण इस प्रकार मैं एक मैं | एन + 1 औरS={(1,c1),(a2,c2)(ak,ck)}|a1a2akaicii ai|n+1 अगर j > i । सबूत: एक मैं + 1 = ( एक मैं मैं + एक मैं - 1 ) + 1 एक मैं | एक i + 1ai|ajj>i
    ai+1=(aici+ai1)+1ai|ai+1
  • अब विचार करना यानी सभी 1 के बाद के बाद के नंबर डी के एक से अधिक होंगे । तो चलो एफ ( एन )S={1,11d1,d,dd,dm1,dm1dm1,dm2,dm2dm2,}df(n)इस तरह के मल्टीसेट की गिनती संभव हो तो जहाँ मैं के सभी संभव नंबर पर संक्षेप हूँ1'एस(=-1)। अन्य शब्दों में(n-1)=जी(एन)=Σ| n,एनजी()f(n)=d|n+1,d1f(n(d1)d)1s=d1f(n1)=g(n)=d|n,dng(d)

अंत में मेरी समस्या इसे कम कर दी गई है - एक कुशल तरीके से ढूंढें ताकि यह समय सीमा से अधिक न हो।g(n)


2
क्या आपने जाँच की है कि क्या अन्य लोगों के लिए सार्वजनिक रूप से समाधान और एल्गोरिदम को अभ्यास समस्याओं के लिए पूछना उचित है? Codechef अकसर किये गए सवाल से लगता है कि समाधान सार्वजनिक रूप से (कुछ बहुत बुनियादी समस्याओं को छोड़कर) पोस्ट नहीं किए जाएंगे। क्या यहां कोई समाधान पोस्ट करना दूसरों के लिए अभ्यास की समस्याओं को "खराब" करेगा, या क्या इसे ठीक माना जाता है? मैं Codechef समुदाय के मानदंडों और शिष्टाचार से परिचित नहीं हूं।
DW

मुझे सार्वजनिक डोमेन पर प्रश्न पोस्ट न करने से संबंधित कुछ भी नहीं मिला और यह प्रतिबंध चल रही प्रतियोगिता समस्याओं पर है, अभ्यास समस्या पर नहीं।
न्याय लीग

1
@ मैं नहीं सोचता कि अगर हम उन चर्चाओं पर चर्चा करेंगे जो चल रही प्रतियोगिताओं से नहीं हैं।
रवि उपाध्याय

1
आप इनपुट नंबर के विभाजन की संख्या की तलाश कर रहे हैं । मेरा सुझाव है कि आप इस चर्चा का उपयोग करके कुछ शोध करें।
राफेल

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

जवाबों:


2

यहां सबसे तेज समाधान क्या है। यह वास्तव में कंप्यूटिंग है अपने समारोह देखते हुए n , हम इसे कारक (देखें नीचे) और फिर सभी कारकों की गणना (नीचे देखें)1 , ... , मीटर कुछ क्रम में ऐसा है किमैं | जे तात्पर्य मैं j (संपत्ति पी)। अब हमदिए गए क्रम में कारकों पर जाकर सूत्र के अनुसार g की गणनाकरते हैं। संपत्ति पी सुनिश्चित है कि जब हम गणना जी ( ) , हम पहले से ही गणना की है जी ( ) के लिए सभी गैर तुच्छ कारकों

g(n)=dnd<ng(d),g(1)=1.
nf1,,fmfi|fjijgg(d)g(e)eके । एक अनुकूलन भी है (नीचे देखें)।d

अधिक विस्तार से, हम कारकों के क्रम में चलते हैं, और प्रत्येक कारक , हम इसके गैर-तुच्छ कारकों में से सभी को खोजते हैं, जो f 1 , , f i - 1 में से 1 को विभाजित करता है i ifif1,,fi1fi

फैक्टरिंग: प्रीप्रोसेसिंग: हम एराटोस्थनीज छलनी का उपयोग करके नीचे के सभी अपराधों की एक सूची बनाते हैं । N को देखते हुए , हम बस ट्रायल डिवीजन का उपयोग करते हैं।109n

सभी कारकों को उत्पन्न करना: यह पुनरावर्ती रूप से किया जाता है। मान लीजिए । हम चलाने टी नेस्टेड छोरों एल 1{ 0 , ... , कश्मीर 1 } , ... , एल टी{ 0 , ... , कश्मीर टी } , और आउटपुट पी एल 1 1पी एल टी टी । आप संपत्ति पी को प्रेरण से साबित कर सकते हैं।n=p1k1ptkttl1{0,,k1},,lt{0,,kt}p1l1ptlt

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


यदि का अभाज्य गुणनखंडन p k 1 1 , , p k t t है , तो f ( n ) केवल ( k 1 , , k t ) पर निर्भर करता है , और वास्तव में केवल इस वेक्टर के छांटे गए संस्करण पर। । 10 9 से नीचे की प्रत्येक संख्या में सबसे अधिक 29 प्रमुख कारक हैं (पुनरावृत्ति के साथ), और चूंकि पी ( 29 ) = 4565 , यह f की गणना के लिए संभव लगता हैn+1p1k1,,ptktf(n)(k1,,kt)10929p(29)=4565f(या बल्कि ) उन सभी के लिए, पुनरावर्ती रूप से। यदि कई अलग-अलग इनपुट थे, तो यह समाधान तेज हो सकता है; जैसा कि यह है, अधिकतम 10 हैंg10

यह भी संभव है कि इस फ़ंक्शन, संबंधित लिए विभाजन मैपिंग , एक स्पष्ट विश्लेषणात्मक रूप है। उदाहरण के लिए, g ( p k ) = 2 k - 1 , g ( p 1p t ) A000670 द्वारा दिया गया है , और g ( p 2 1 p 2p t ) A005649 या A172109 द्वारा दिया गया है ।gg(pk)=2k1g(p1pt)g(p12p2pt)


1

ठीक है, तो आप के लिए एक आवर्ती संबंध है (अपने प्रश्न के अंत देखें)।g()

इस बिंदु पर ऐसा लगता है कि एक प्राकृतिक दृष्टिकोण गणना करने के लिए पुनरावर्ती एल्गोरिदम को लिखना होगा , और ज्ञापन को लागू करना होगा ताकि आप एक बार से अधिक जी ( आई ) की गणना न करें । दूसरे शब्दों में, जब आप g ( i ) की गणना करते हैं, तो आप इसे एक हैश तालिका में संग्रहीत करते हैं, जो कि i ( g ( i ) के नक्शे बनाता है ; यदि आपको भविष्य में फिर से g ( i ) को जानने की आवश्यकता है , तो आप इसे हैश तालिका में देख सकते हैं।g(n)g(i)g(i)ig(i)g(i)

इस फैक्टरिंग की आवश्यकता होती है , लेकिन वहाँ फैक्टरिंग के लिए कुशल एल्गोरिदम हैं n जब n 10 9nnn109

तुम भी अनुक्रम इन्टर्जेन्स अनुक्रम के ऑन-लाइन विश्वकोश में देख सकते हैं । यदि आप उनके विश्वकोश में अनुक्रम पाते हैं, तो कभी-कभी वे अतिरिक्त उपयोगी जानकारी प्रदान करेंगे (उदाहरण के लिए, अनुक्रम की गणना के लिए कुशल एल्गोरिदम)। हालांकि, यह मज़ेदार है कि चीजों से मज़ा लिया जाए।g(1),g(2),g(3),g(4),g(5),


0

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

थोड़ा और विस्तार से: मान लीजिए कि आपके पास एक मल्टीसेट । एक नंबर को देखते हुए मैं के साथ 1 मैं n , तुम कैसे की एक submultiset की पहचान कर सकता है एस करने के लिए है कि रकम मैं ? आप कैसे जाँच सकते हैं कि क्या यह सबमुलिसेट अद्वितीय है? परिवर्तन करने के लिए मानक गतिशील प्रोग्रामिंग तकनीकों को अनुकूलित करने का प्रयास करें । ( यह सवाल भी देखें )Si1inSi

एक मल्टीसेट को देखते हुए , आप यह कैसे जांच सकते हैं कि क्या यह दूसरी स्थिति को संतुष्ट करता है, अर्थात, क्या 1 से n तक की प्रत्येक संख्या को विशिष्ट रूप से S के एक उप-कुल के रूप में व्यक्त किया जा सकता है (अद्वितीय परिवर्तनशील स्थिति)? यदि आप पिछले एक को हल करते हैं तो यह बहुत आसान होना चाहिए।SnS

चलो multisets कि अपनी शर्तों के दोनों को संतुष्ट की सूची को दर्शाते हैं। यदि आप पी ( 1 ) , पी ( 2 ) , , पी ( एन ) जानते हैं, तो आप पी ( एन + 1 ) के निर्माण के लिए उस जानकारी का उपयोग कैसे कर सकते हैं ? यहाँ आप एक पूर्णांक के विभाजनों की गणना के लिए मानक गतिशील प्रोग्रामिंग तकनीकों को अनुकूलित करना चाह सकते हैं।P(n)P(1),P(2),,P(n)P(n+1)


यहाँ एक दृष्टिकोण है जो शायद बेहतर होगा।

मान लीजिए कि एक मल्टीसेट है जो आपकी दोनों स्थितियों ( एन के लिए ) को संतुष्ट करता है । हम एक मल्टीसेट टी प्राप्त करने के लिए इसे कैसे बढ़ा सकते हैं जिसमें एक तत्व अधिक है? दूसरे शब्दों में, हम एक नए मल्टीसेट टी को प्राप्त करने के लिए एस को एक और तत्व जोड़ने के सभी तरीकों की पहचान कैसे कर सकते हैं जो आपकी दोनों स्थितियों (कुछ एन ′ के लिए ) को संतुष्ट करता है ?SnTSTn

उत्तर: यदि को S के कुछ तत्वों के योग के रूप में व्यक्त किया जा सकता है , तो इसे S में जोड़ने का कोई मतलब नहीं है : जो T को विशिष्टता की स्थिति का उल्लंघन करने का कारण बनेगा । तो, हम सभी पूर्णांकों की गणना कर सकते हैं एक्स कि नहीं कर सकते हैं की तत्वों में से कुछ की राशि के रूप में व्यक्त किया जा एस ; प्रत्येक एक ऐसी चीज है जो संभवतः एक नया मल्टीसेट टी प्राप्त करने के लिए एस में जोड़ा जा सकता है जो दोनों स्थितियों (कुछ अन्य एन के लिए ) को संतुष्ट करेगा ।xSSTxSSTn

इसके अलावा, यह एन्यूमरेट करना संभव है कि कौन से पूर्णांकों को के कुछ तत्वों के योग के रूप में व्यक्त किया जा सकता है , और जो गतिशील प्रोग्रामिंग का उपयोग नहीं कर सकता है। आप एक दो आयामी सरणी का निर्माण एक [ 1 ... | एस | , 1 ... एन ] बूलियन्स, जहां की एक [ मैं , जे ] अगर वहाँ पूर्णांक व्यक्त करने के लिए एक तरीका है सच है j पहले से कुछ की राशि के रूप में मैं के तत्वों एस (केवल पहला मैं के तत्वों एस करने के पात्र हैं इस्तेमाल किया जा सकता है, जहां एसSA[1|S|,1n]A[i,j]jiSiSSसॉर्ट किया गया है, इसलिए और रों 1रों 2रों कश्मीर )। ध्यान दें कि A [ i , j ] A [ 1 i - 1 , 1 j - 1 ] के मूल्यों का उपयोग करके कंप्यूटिंग कर सकता है : विशेष रूप से, A [ i , j ]S={s1,s2,,sk}s1s2skA[i,j]A[1i1,1j1] अगर j > एस मैं , या एक [ मैं , जे ] = एक [ मैं - 1 , जे ] अन्यथा। यह हमें उन सभी नंबरों की पहचान करने में सक्षम बनाता है जो एस में जोड़े जाने वाले उम्मीदवार हैं।A[i,j]=A[i1,j]A[i1,jsi]j>siA[i,j]=A[i1,j]S

इसके बाद, प्रत्येक उम्मीदवार विस्तार के लिए के एस (एक तत्व जोड़कर प्राप्त एस ), हम है कि क्या जाँच करना चाहते हैं टी संतुष्ट दोनों स्थितियों। चलो n के तत्वों का योग निरूपित एस , और n ' के तत्वों का योग टी । हम जांच करने के लिए है कि क्या रेंज में हर पूर्णांक जरूरत n + 1 , n + 2 , ... , n ' के तत्वों में से कुछ की राशि के रूप में व्यक्त किया जा सकता है टीTSSTnSnTn+1,n+2,,nT। यह भी परिवर्तनशील के लिए मानक एल्गोरिदम का उपयोग करते हुए, गतिशील प्रोग्रामिंग का उपयोग करके हल किया जा सकता है। (वास्तव में, अगर आप अभी भी सरणी है ऊपर उल्लेख किया है आप आसानी से इसे थोड़ा सा इस समस्या को हल करने के लिए विस्तार कर सकते हैं: हम इसे एक सरणी बनाने के एक [ 1 ... | टी | , 1 ... n ' ] , सभी में भरने के लिए जारी अतिरिक्त प्रविष्टियों की, और सुनिश्चित करें कि A [ | T | , n + 1 ] , A [ | T | , n + 2 ] ,AA[1|T|,1n] सभी सही हैं।) तो, अब हम सभी multisets गणना कर सकते हैं टी कि विस्तार एस एक भी तत्व से और है कि दोनों शर्तों को पूरा।A[|T|,n+1],A[|T|,n+2],,A[|T|,n]TS

यह तुरंत सभी multisets की गणना करने के लिए एक एल्गोरिथ्म का सुझाव सभी के लिए, कि अपनी हालत को संतुष्ट n बाध्य कुछ करने के लिए कहते हैं, n 20 । हम एक सरणी होगा पी [ 1 ... 20 ] , जहां पी [ 5 ] भंडार सभी multisets एस 5 के लिए उस राशि, और आम तौर पर, पी [ एन ] भंडार सभी multisets के सेट एस करने के लिए उस राशि एनSnn20P[120]P[5]SP[n]Sn

अगला, हम पुनरावृति में भर सकते हैं । केवल एक मल्टीसेट { 1 } सम्‍मिलित करने के लिए P [ 1 ] सेट करके प्रारंभ करें । अगला, प्रत्येक के लिए n (1 से 20 से ऊपर बढ़ रहा है), प्रत्येक के लिए एस पी [ एन ] , सभी संभव एक्सटेंशन गणना टी के एस (ऊपर तकनीक का उपयोग), चलो n ' के तत्वों का योग निरूपित टी , और T को P [ n ] में डालेंP[n]P[1]{1}nSP[n]TSnTTP[n]अगर यह पहले से ही मौजूद है और अगर नहीं है n20

यह बहुत उल्लेखनीय होना चाहिए। सौभाग्य! मज़े करो! विवरणों के माध्यम से काम करना गतिशील प्रोग्रामिंग में एक अच्छा शिक्षण-व्यायाम होगा।


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