स्थानीय रूप से एक बहुपद का उलटा


20

चुनौती

pआदेश 1और डिग्री के वास्तविक गुणांकों के साथ एक बहुपद को देखते हुए n, डिग्री के एक और बहुपद qको nइस तरह से खोजें (p∘q)(X) = p(q(X)) ≡ X mod X^(n+1), या दूसरे शब्दों में ऐसे कि p(q(X)) = X + h(X)जहां hएक बहुपत्नी के साथ मनमाना हो ord(h) ≥ n+1। बहुपत्नी qविशिष्ट रूप से निर्धारित होती है p

एक बहुपद के लिए p(X) = a(n)*X^n + a(n+1)*X^(n+1) + ... + a(m)*X^mजहां n <= mऔर a(n) ≠ 0, a(m) ≠ 0हम कहते हैं nकि का क्रम है pऔर mकी डिग्री है p

सरलीकरण : आप मान सकते हैं कि pपूर्णांक गुणांक हैं, और a(1)=1(इसलिए p(X) = X + [some integral polynomial of order 2])। इस मामले qमें अभिन्न गुणांक भी हैं।

इस सरलीकरण का उद्देश्य फ्लोटिंग पॉइंट संख्या वाले मुद्दों से बचना है। हालांकि चित्रण प्रयोजनों के लिए एक गैर-अभिन्न उदाहरण है।

उदाहरण

  • के टेलर श्रृंखला पर विचार करें exp(x)-1 = x + x^2/2 + x^3/6 + x^4/24 + ...और ln(x+1) = x - x^2/2 + x^3/3 - x^4/4 + ...फिर स्पष्ट रूप से ln(exp(x)-1+1)= x। अगर हम सिर्फ उन दो कार्यों हम नीचे से अंकन के साथ मिल की डिग्री 4 टेलर बहुआयामी पद पर विचार (testcases देखें) p = [-1/4,1/3,-1/2,1,0]और q = [1/24, 1/6, 1/2, 1,0]और(p∘q)(X) ≡ X mod X^5

  • बहुपद पर विचार करें p(X) = X + X^2 + X^3 + X^4। फिर q(X) = X - X^2 + X^3 - X^4हम प्राप्त करते हैं

    (p∘q)(X) = p(q(X)) = X - 2X^5 + 3X^6 - 10X^7 +...+ X^16 ≡ X mod X^5
    

परीक्षण के मामलों

यहाँ इनपुट और आउटपुट बहुपद गुणांक की सूचियों के रूप में लिखे गए हैं (उच्चतम डिग्री मोनोमियल के गुणांक के साथ, स्थिर अवधि अंतिम):

p = [4,3,2,0];  q=[0.3125,-.375,0.5,0]

अभिन्न परीक्षण:

p = [1,0]; q = [1,0]

p = [9,8,7,6,5,4,3,2,1,0]; q = [4862,-1430,429,-132,42,-14,5,-2,1,0]

p = [-1,3,-3,1,0]; q = [91,15,3,1,0]

जवाबों:


5

पायथन 2 + सिम्पी, 128 बाइट्स

हम स्थानीय रूप से उस q (x) = x को मानकर बहुपद में उलटते हैं, इसे p से बनाते हैं, x 2 के गुणांक की जांच करते हैं , और इसे q से घटाते हैं। मान लीजिए कि गुणांक 4 था, तब नया बहुपद q (x) = x - 4x 2 हो जाता है । हम फिर से पी के साथ यह रचना करते हैं, लेकिन x 3 के लिए गुणांक देखें । आदि...

from sympy import*
i=input()
p=Poly(i,var('x'));q=p*0+x
n=2
for _ in i[2:]:q-=compose(p,q).nth(n)*x**n;n+=1
print q.all_coeffs()

2

गणितज्ञ, 45 बाइट्स

Normal@InverseSeries[#+O@x^(#~Exponent~x+1)]&

हाँ, मैथेमेटिका के लिए एक बिलिन है ...।

चर में इनपुट बहुपद के रूप में लेने का कार्य करता है x, जैसे -x^4+3x^3-3x^2+xकि अंतिम परीक्षण मामले के लिए, और इसी तरह के वाक्यविन्यास के साथ एक बहुपद को वापस करना, जैसे x+3x^2+15x^3+91x^4कि अंतिम परीक्षण मामले के लिए।

#+O@x^(#~Exponent~x+1)इनपुट #को एक पावर सीरीज़ ऑब्जेक्ट में बदल देता है , की डिग्री पर काट दिया गया #; InverseSeriesयह क्या कहता है; और Normalपरिणामस्वरूप त्रिशंकु शक्ति श्रृंखला को एक बहुपद में बदल देता है। (यदि फॉर्म में एक उत्तर x+3x^2+15x^3+91x^4+O[x]^5स्वीकार्य था, तो हम उन शुरुआती 7 बाइट्स को बचा सकते हैं । वास्तव में, अगर यह इनपुट और आउटपुट दोनों के लिए स्वीकार्य प्रारूप था, तो InverseSeriesअकेले एक 13-बाइट समाधान होगा।)


2

जावास्क्रिप्ट (ईएस 6), 138 बाइट्स

a=>a.reduce((r,_,i)=>[...r,i<2?i:a.map(l=>c=p.map((m,j)=>(r.map((n,k)=>p[k+=j]=m*n+(p[k]||0)),m*l+(c[j]||0)),p=[]),c=[],p=[1])&&-c[i]],[])

@ Orlp के उत्तर का पोर्ट। I / O रिवर्स ऑर्डर में गुणांक के सरणियों के रूप में होता है अर्थात पहले दो गुणांक हमेशा 0 और 1 होते हैं।


हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.