एल्गोरिदम में आवर्ती और उत्पन्न कार्य


18

कंप्यूटर विज्ञान में Combinatorics एक महत्वपूर्ण भूमिका निभाती है। हम अक्सर दोनों विश्लेषणों के साथ-साथ एल्गोरिदम में डिजाइन के साथ संयोजन के तरीकों का उपयोग करते हैं। उदाहरण के लिए एक ग्राफ में सेट -vertex कवर खोजने के लिए एक विधि सभी \ binom {n} {k} सबसेट सबसेट का निरीक्षण कर सकती है । जबकि द्विपद कार्य तेजी से बढ़ता है, यदि कश्मीर कुछ निश्चित स्थिर है तो हम एक बहुपद समय एल्गोरिथ्म के साथ स्पर्शोन्मुख विश्लेषण द्वारा समाप्त करते हैं।k(nk)

अक्सर वास्तविक जीवन की समस्याओं के लिए अधिक जटिल दहनशील तंत्र की आवश्यकता होती है जिसे हम पुनरावृत्ति के संदर्भ में परिभाषित कर सकते हैं। एक प्रसिद्ध उदाहरण के रूप में परिभाषित अनुक्रम (भोले) है:

f(n)={1if n=10if n=0f(n1)+f(n2)otherwise

अब n वें पद के मान की गणना इस पुनरावृत्ति का उपयोग करते हुए तेजी से बढ़ती है, लेकिन गतिशील प्रोग्रामिंग के लिए धन्यवाद, हम इसे रैखिक समय में गणना कर सकते हैं। अब, सभी पुनरावर्ती स्वयं को डीपी (ऑफ हैंड, फैक्टरियल फंक्शन) के लिए उधार नहीं देते हैं, लेकिन यह एक संभावित शोषणकारी संपत्ति है, जब जनरेटिंग फंक्शन के बजाय कुछ गिनती को पुनरावृत्ति के रूप में परिभाषित किया जाता है।

दी गई संरचना के लिए कुछ गणना को औपचारिक रूप देने के लिए जनरेटिंग फ़ंक्शन एक सुंदर तरीका है। शायद सबसे प्रसिद्ध द्विपद उत्पादक समारोह है जिसे इस प्रकार परिभाषित किया गया है:

(x+y)α=k=0(αk)xαkyk

सौभाग्य से इसका एक बंद रूप समाधान है। सभी उत्पादक कार्य इस तरह के एक कॉम्पैक्ट विवरण की अनुमति नहीं देते हैं।

अब मेरा सवाल यह है: एल्गोरिदम के डिजाइन में उपयोग किए जाने वाले फ़ंक्शन कितनी बार उत्पन्न कर रहे हैं ? यह देखना आसान है कि विश्लेषण के माध्यम से एल्गोरिथ्म द्वारा आवश्यक विकास की दर को समझने के लिए उनका कैसे शोषण किया जा सकता है, लेकिन कुछ समस्या को हल करने के लिए एक विधि बनाते समय वे हमें एक समस्या के बारे में क्या बता सकते हैं?

यदि कई बार एक ही गणना को पुनरावृत्ति के रूप में सुधार किया जा सकता है, तो यह गतिशील प्रोग्रामिंग के लिए उधार दे सकता है, लेकिन शायद एक ही उत्पन्न होने वाले फ़ंक्शन का एक बंद रूप है। इसलिए यह समान रूप से कटा हुआ नहीं है।


यदि जनरेटिंग फंक्शन एक फॉर्मूला देता है (उदाहरण के लिए, रिटेन नंबरों के लिए बिनेट का फॉर्मूला) जो कि रिकरेंस (शायद अधिक कुशलता से) का उपयोग करने के बजाय संख्या की गणना करने के लिए इस्तेमाल किया जा सकता है, तो क्या आप इसे एक उत्तर मानते हैं?
आर्यभट्ट

जवाबों:


11

जब आप गणना एल्गोरिदम डिजाइन कर रहे हों तब जनरेटिंग कार्य उपयोगी होते हैं। यही है, न केवल जब आप एक निश्चित संपत्ति वाले ऑब्जेक्ट की संख्या की तलाश कर रहे हैं, बल्कि जब आप इन ऑब्जेक्ट्स को एन्यूमरेट करने का एक तरीका ढूंढ रहे हैं (और, शायद, ऑब्जेक्ट्स को गिनने के लिए एक एल्गोरिथ्म उत्पन्न करते हैं)। रोनाल्ड ग्राहम, डोनाल्ड नुथ और ओरेन पेटशनिक द्वारा कंक्रीट गणित के अध्याय 7 में एक बहुत अच्छी प्रस्तुति है । नीचे दिए गए उदाहरण इन पुस्तकों से हैं (गलतियां और स्पष्टता की कमी मेरा है)।

मान लीजिए कि आप दिए गए सिक्कों के साथ बदलाव करने के तरीकों की तलाश कर रहे हैं। उदाहरण के लिए, सामान्य अमेरिकी संप्रदायों के साथ, संभव सिक्के । परिवर्तन में give ४२ देने के लिए, एक संभावना है ; एक और संभावना है । हम । आम तौर पर, हम परिवर्तन देने के सभी तरीकों के लिए एक जनरेटिंग फंक्शन लिख सकते हैं: अधिक तकनीकी शब्दों में, पांच वेरिएबल्स पर से अधिक शक्ति श्रृंखलाओं की अवधि में एक शब्द है[ २५ ] [ १० ] [ ] [ ] [ ] [ १० ] [ १० ] [ १० ] [ १० ] [ ] [ ] 1 ] 42 [ 25 ] [ 10 ][1],[5],[10],[25],[100][25][10][5][1][1][10][10][10][10][1][1]एच = Σ 0 Σ क्ष 0 Σ 0 Σ n 0 Σ पी 0 [ 100 ] [ 25 ] क्ष [ 10 ] डी [ 5 ] एन [ 1 ] पी42[25][10][5][1]2=[10]4[1]2

H=h0q0d0n0p0[100]h[25]q[10]d[5]n[1]p
[ १०० ] , [ २५ ] , [ १० ] , [ ] , [ ]H[100],[25],[10],[5],[1]। इस स्थान में एक मोनोमियल के को फिर परिवर्तन में सेंट देने के तरीके मोनोमियल की संख्या है जिसका मूल्यांकन । हम को एक वृद्धिशील फैशन में व्यक्त कर सकते हैं , पहले को केवल pennies में परिवर्तन देने के तरीके लिखकर , फिर को pennies और निकल में परिवर्तन करने के तरीके , और इसी तरह। ( मतलब है कोई सिक्का नहीं।) वी वी एच पी एन मैं पी = मैं + [ 1 ] + [ ] + [ ] +
[100]h[25]q[10]d[5]n[1]p=100h+25q+10d+5n+p
vvHPNI
P=I+[1]+[1]2+[1]3+=II[1]N=(I+[5]+[5]2+[5]3+)P=PI[5]D=(I+[10]+[10]2+[10]3+)N=NI[10]Q=(I+[25]+[25]2+[25]3+)D=DI[25]H=(I+[100]+[100]2+[100]3+)Q=QI[100]
यदि आप गिनना चाहते हैं और न केवल बदलाव देने के तरीकों की गणना करते हैं, तो हमारे द्वारा प्राप्त औपचारिक श्रृंखला का उपयोग करने का एक सरल तरीका है। समरूपता में का गुणांक परिवर्तन में सेंट देने के तरीकों की संख्या है । एक्स वी एस ( सी ) v
S:[1]X,[5]X5,[10]X10,[25]X25,[100]X100
XvS(C)v

एक कठिन उदाहरण: मान लीजिए कि आप 2 × 1 डोमिनोज के साथ आयतों को टाइल करने के सभी तरीकों का अध्ययन करना चाहते हैं। उदाहरण के लिए, 2 × 2 आयत को टाइल करने के दो तरीके हैं, या तो दो क्षैतिज डोमिनोज़ के साथ या दो ऊर्ध्वाधर डोमिनोज़ के साथ। आयत को टाइल करने के तरीकों की संख्या की गणना करना काफी आसान है, लेकिन मामला जल्दी से गैर- स्पष्ट हो जाता है। हम एक साथ डोमिनोज़ चिपकाकर ऊंचाई 3 के एक क्षैतिज बैंड के सभी संभावित झुकावों की गणना कर सकते हैं, जो कि दोहराए जाने वाले पैटर्न की पैदावार करता है: 3 × n { यू = + एल वी + गामा Λ + यू वी = मैं2×n3×n

{U=o+LV+ΓΛ+UV=IU+=VΛ=IU+=Λ
जहाँ मज़ेदार आकृतियाँ प्राथमिक डोमिनो व्यवस्था का प्रतिनिधित्व करती हैं: कोई डोमिनोज़ नहीं है, एक क्षैतिज डोमिनोज़ के बाएँ भाग के शीर्ष पर एक वर्टिकल डोमिनोज़ है, एक ऊर्ध्वाधर डोमिनोज़ है जो ऊंचाई 3 के बैंड के नीचे से जुड़ा हुआ है, बैंड के शीर्ष के साथ एक क्षैतिज डोमिनोज़ है जो इसके नीचे दो क्षैतिज डोमिनोज़ है और दाईं ओर एक कदम है, इधर, गुणन क्षैतिज समवर्ती का प्रतिनिधित्व करता है और यह सराहनीय नहीं है, लेकिन इस शक्ति श्रृंखला में चर बनाने वाले प्राथमिक पैटर्न के बीच समीकरण हैं। सिक्कों के साथ पहले की तरह, हम हर डोमिनोज़ के लिए स्थानापन्न कर सकते हैं और एक के झुकाव की संख्या के लिए एक उत्पादक श्रृंखला प्राप्त कर सकते हैंoLI=X3×(2n/3) आयत (यानी का गुणांक क्षेत्र आयत को टाइल करने के तरीकों की संख्या है , जिसमें डोमिनोज़ होते हैं और चौड़ाई )। श्रृंखला का उपयोग अधिक बहुमुखी तरीकों से भी किया जा सकता है; उदाहरण के लिए, ऊर्ध्वाधर और क्षैतिज डोमिनोज़ को अलग करके, हम दिए गए ऊर्ध्वाधर और क्षैतिज डोमिनो के साथ झुकाव की गणना कर सकते हैं।X3k6k3k2k

फिर से, कम गणित की प्रस्तुति के लिए ठोस गणित पढ़ें ।

List मुझे पता है कि मेरी सूची अधूरी है; गणितीय examples.² के लिए एक सरल अमेरिका उपयुक्त मान
² इसके अलावा, अगर यह ऊपर आता है, गोलाकार सिक्के मान।
Et और बेहतर टाइपसेट।


8

मुझे याद है कि 2001 में एक छात्र प्रोग्रामिंग प्रतियोगिता के दौरान मुझे एक समस्या हल करनी थी। समस्या यह थी:

1, 7, 13, के द्रव्यमान को देखते हुए ... (मुझे याद नहीं है कि कौन सा द्रव्यमान है, लेकिन एक परिमित था, जनता का सेट निर्धारित करता है), एक फ़ंक्शन डिज़ाइन करता है जो यह निर्धारित करता है कि क्या दिए गए वजन को इस पैमाने पर तौला जा सकता है जनता का समूह।

मैंने नेस्टेड लूप्स के साथ शुरुआत की, लेकिन जल्दी से एक दीवार को मारा। तब मुझे एहसास हुआ कि मुझे भारी लोगों के साथ जाने से पहले लाइटर जनता के साथ क्या किया जा सकता है, यह समझकर शुरू करना था। मैं बहुत सारे अनावश्यक लूप्स के साथ समस्या को हल कर सकता था।

क्या मैं उस समय युवा रूप से अभिमानी और आत्मनिर्भर नहीं था (और मैं निर्माण कार्यों के बारे में जानता था और अभ्यास करता था), मैंने समस्या को इस प्रकार उत्पन्न करने वाले कार्यों के साथ परिभाषित किया है:

(एक्स)n

दाहिने तवे पर क्या वजन 1 के एक द्रव्यमान का वजन कर सकता है?

तीन संभावनाएँ:

  • यदि मैं द्रव्यमान को बायीं ओर रखता हूं, तो मैं 1 वजन कर सकता हूं।
  • अगर मैं द्रव्यमान को दाहिने तवे पर रखूं, तो मैं -1 वजन कर सकता हूं।
  • यदि मैं द्रव्यमान का उपयोग नहीं करता हूं, तो मैं 0 वजन कर सकता हूं।

-101एक्स-1+1+एक्स

1-एक्स3एक्स(1-एक्स)

xm+1+xm

1x3mxm(1xm)

Mf

f(x)=mM(1x3m)xmMmmM(1xm)

अब, एक पैकेज दिया गया है जो बहुपद पर परिचालन कर सकता है, आपको बस यह करना है:

  • दोनों उत्पादों की गणना करें।
  • सबसे कम डिग्री के साथ शुरू, इन उत्पादों के विभाजन का प्रदर्शन करें। (जो समाप्त होता है)
  • xk

w0wM

मैंने गणितीय रूप से ध्वनि घटकों का उपयोग करके एल्गोरिथ्म को डिज़ाइन किया है। एल्गोरिथ्म का मुख्य भाग, जो पहले सबसे कम डिग्री वाला एक बहुपद विभाजन है, रैखिक है और इसे एक ऑफ-द-शेल्फ पैकेज द्वारा लागू किया जा सकता है। यह इष्टतम नहीं हो सकता है, लेकिन यह निश्चित रूप से मैंने प्रतियोगिता में क्या किया, और कम त्रुटि वाले तरीके से बेहतर प्रदर्शन करता है।

यदि आप विभाजन प्रक्रिया को करीब से देखते हैं, तो आप जल्दी से देखते हैं कि शेष को प्रक्रिया के प्रत्येक राज्य में "वर्तमान छिपे हुए राज्य" के रूप में देखा जा सकता है, और परिणाम के रूप में भागफल। प्रक्रिया समाप्त हो जाती है जब "वर्तमान छिपी हुई स्थिति" हर जगह शून्य तक पहुंच जाती है।

आप बहुपदों को सरणियों के रूप में लागू कर सकते हैं या, यदि वे वास्तव में वास्तव में विरल हैं, जैसा कि सूचकांक-गुणांक आदेश सूचियों, और यह एल्गोरिथ्म नहीं बदलेगा।


3

γ+1(m)=(2m)γ(m)+(m+1)γ1(m),γ0(m)=1,γm+1(m)=e.
γ(m)=m(γ(m1)γ1(m1))γ(0)γ(m), फिर से जनरेटिंग फ़ंक्शंस का उपयोग करना। यदि आप जिज्ञासु हैं, तो आप पेपर में इसका समाधान पा सकते हैं, हालांकि हमने कभी इस व्युत्पत्ति को शामिल करने की जहमत नहीं उठाई।

0

क्विकसॉर्ट का व्यापक अध्ययन, और इसके कई प्रकार, इसका सबसे स्पष्ट उदाहरण है। जुझारू विचारों ने विकल्पों के विचार को नियंत्रित किया, और काफी जटिल समीकरणों के समाधान का विश्लेषण उनमें से प्रदर्शन के फायदे (या नहीं) दर्शाता है।

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