मैंने पहले एक प्रश्न पूछा था कि एक संभावना को जल्दी और सही तरीके से कैसे गणना करें। हालाँकि, जाहिर है यह बहुत आसान था क्योंकि एक बंद फॉर्म समाधान दिया गया था! यहाँ एक और अधिक कठिन संस्करण है।
यह कार्य वास्तव में एक संभावना की गणना करने के कोड लिखने के बारे में है और जल्दी से । आउटपुट एक सटीक संभाव्यता होना चाहिए जो कि इसके सबसे कम रूप में एक अंश के रूप में लिखा गया हो। वह यह है कि उत्पादन कभी नहीं 4/8
बल्कि होना चाहिए 1/2
।
कुछ सकारात्मक पूर्णांक के लिए n
, लंबाई के 1s और -1s के समान रूप से यादृच्छिक स्ट्रिंग पर विचार n
करें और इसे कॉल करें। अब A
स्वयं की एक प्रति के लिए सहमति दें । A[1] = A[n+1]
अगर यह 1 से अनुक्रमण है, A[2] = A[n+2]
और इसी तरह। A
अब लंबाई है 2n
। अब लंबाई के दूसरे यादृच्छिक स्ट्रिंग पर भी विचार करें n
जिनके पहले n
मान -1, 0 या 1 हैं, प्रायिकता के साथ 1 / 4,1 / 2, 1/4 प्रत्येक और इसे बी कहते हैं।
अब अलग के B
साथ के आंतरिक उत्पाद पर विचार करें ।A[1+j,...,n+j]
j =0,1,2,...
उदाहरण के लिए, विचार करें n=3
। संभावित मान हैं A
और B
हो सकता है A = [-1,1,1,-1,...]
और B=[0,1,-1]
। इस मामले में पहले दो आंतरिक उत्पाद हैं 0
और 2
।
कार्य
प्रत्येक के लिए , आपके कोड के j
साथ शुरू j=1
, इस संभावना को आउटपुट करना चाहिए कि सभी पहले j+1
आंतरिक उत्पाद हर के लिए शून्य हैं n=j,...,50
।
मार्टिन ब्युटनर द्वारा निर्मित तालिका की नकल करना j=1
हमारे लिए निम्न नमूना परिणाम है।
n P(n)
1 1/2
2 3/8
3 7/32
4 89/512
5 269/2048
6 903/8192
7 3035/32768
8 169801/2097152
स्कोर
आपका स्कोर j
मेरे कंप्यूटर पर आपका कोड 1 मिनट में सबसे बड़ा है । थोड़ा स्पष्ट करने के लिए, प्रत्येक j
को एक मिनट मिलता है। ध्यान दें कि पिछले लिंक किए गए प्रश्न में डायनामिक प्रोग्रामिंग कोड आसानी से ऐसा करेगा j=1
।
टाई ब्रेकर
यदि दो प्रविष्टियों को समान j
स्कोर मिलता है, तो जीतने वाली प्रविष्टि वह होगी जो उसके लिए n
मेरी मशीन पर एक मिनट में उच्चतम हो जाती है j
। यदि इस कसौटी पर भी दो सर्वश्रेष्ठ प्रविष्टियाँ समान हैं तो विजेता सबसे पहले प्रस्तुत किया गया उत्तर होगा।
भाषा और पुस्तकालय
आप किसी भी स्वतंत्र रूप से उपलब्ध भाषा और अपनी पसंद की लाइब्रेरी का उपयोग कर सकते हैं। मुझे आपका कोड चलाने में सक्षम होना चाहिए ताकि कृपया अपने कोड को लिनक्स में चलाने / संकलित करने के लिए एक पूर्ण विवरण शामिल करें यदि संभव हो तो।
मेरी मशीन मेरी मशीन पर टाइमिंग चलाई जाएगी। यह एक मानक ubuntu एक AMD FX-8350 आठ-कोर प्रोसेसर पर स्थापित है। इसका मतलब यह भी है कि मुझे आपका कोड चलाने में सक्षम होना चाहिए।
प्रविष्टियां जीतना
j=2
मिच श्वार्ट्ज द्वारा पायथन में ।j=2
में अजगर feersum द्वारा। वर्तमान में सबसे तेज प्रविष्टि है।