অ্যালগরিদমগুলিতে পুনরাবৃত্তি এবং উত্পন্ন কার্য


18

সংযুক্তিবিদ্যা কম্পিউটার বিজ্ঞানে একটি গুরুত্বপূর্ণ ভূমিকা পালন করে। আমরা প্রায়শই অ্যালগরিদমের নকশার পাশাপাশি বিশ্লেষণে সমন্বয়মূলক পদ্ধতি ব্যবহার করি। উদাহরণস্বরূপ, গ্রাফের মধ্যে k বারটেক্স কভার সেট সন্ধানের জন্য একটি পদ্ধতি কেবল সমস্ত ( এন) পরীক্ষা করতে পারে(nk) সম্ভাব্য সাবসেটগুলি। বাইনোমিয়াল ক্রিয়াকলাপগুলি তাত্পর্যপূর্ণভাবে বৃদ্ধি পেলে,যদি কিছু স্থির ধ্রুবক হয় তবে আমরা অ্যাসিপোটোটিক বিশ্লেষণের মাধ্যমে বহুবর্ষীয় সময়ের অ্যালগরিদম দিয়ে শেষ করি।k

প্রায়শই বাস্তব জীবনের সমস্যার জন্য আরও জটিল সংমিশ্রণ ব্যবস্থার প্রয়োজন হয় যা আমরা পুনরাবৃত্তির ক্ষেত্রে সংজ্ঞা দিতে পারি। একটি বিখ্যাত উদাহরণ হ'ল ফিবোনাচি সিক্যুয়েন্স (নির্বাক):

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

এখন মান কম্পিউটিং ম মেয়াদ ব্যাখ্যা মূলকভাবে এই পুনরাবৃত্তি ব্যবহার বৃদ্ধি, কিন্তু ধন্যবাদ গতিশীল প্রোগ্রামিং, আমরা রৈখিক সময়ের মধ্যে তা গনা পারে। এখন, সমস্ত পুনরাবৃত্তি নিজেকে ডিপিকে (ণ দেয় না (হাতের মুঠোয়, ফ্যাক্টরিয়াল ফাংশন), তবে জেনারেটিং ফাংশনের পরিবর্তে কিছু গণনা পুনরাবৃত্তি হিসাবে সংজ্ঞায়িত করার সময় এটি একটি সম্ভাব্য শোষক সম্পত্তি।n

উত্পন্ন ফাংশন একটি নির্দিষ্ট কাঠামোর জন্য কিছু গণনা আনুষ্ঠানিক করার একটি মার্জিত উপায়। সম্ভবত সর্বাধিক বিখ্যাত দ্বিপদী উত্পাদক ফাংশন হিসাবে সংজ্ঞায়িত:

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

ভাগ্যক্রমে এটির একটি বদ্ধ ফর্ম সমাধান রয়েছে। সমস্ত উত্পন্ন ফাংশন যেমন একটি কমপ্যাক্ট বর্ণনার অনুমতি দেয় না।

এখন আমার প্রশ্নটি হ'ল: অ্যালগরিদমের নকশায় প্রায়শই কীভাবে উত্পাদিত ফাংশন ব্যবহার করা হয় ? অ্যালগোরিদম দ্বারা বিশ্লেষণের মাধ্যমে প্রয়োজনীয় বৃদ্ধির হার বুঝতে কীভাবে তাদের শোষণ করা যেতে পারে তা দেখতে সহজ, তবে কিছু সমস্যা সমাধানের জন্য একটি পদ্ধতি তৈরি করার সময় তারা কী আমাদের সমস্যা সম্পর্কে বলতে পারে?

যদি বহুবার একই গণনা পুনরাবৃত্তি হিসাবে সংস্কার করা যায় তবে এটি গতিশীল প্রোগ্রামিংয়ের জন্য নিজেকে ধার দিতে পারে, তবে আবার সম্ভবত একই উত্পন্নকরণের ফাংশনটির একটি বন্ধ রূপ রয়েছে। সুতরাং এটি এত সমানভাবে কাটা হয় না।


যদি জেনারেটিং ফাংশন কোনও সূত্র দেয় (উদাহরণস্বরূপ, ফিনোনাচি সংখ্যাগুলির জন্য বিনেটের সূত্র) যা পুনরাবৃত্তিটি ব্যবহারের পরিবর্তে সংখ্যাটি গণনা করতে (সম্ভবত আরও দক্ষতার সাথে) ব্যবহার করা যেতে পারে, আপনি কি তাকে উত্তর হিসাবে বিবেচনা করছেন?
আর্যভট্ট

উত্তর:


11

জেনারেশন ফাংশনগুলি কার্যকর হয় যখন আপনি গণনা অ্যালগোরিদম ডিজাইন করেন। এটি হ'ল কেবল যখন আপনি কোনও নির্দিষ্ট সম্পত্তি সম্বলিত বস্তুর সংখ্যা অনুসন্ধান করছেন তা নয়, আপনি যখন এই বিষয়গুলি গণনা করার কোনও উপায় অনুসন্ধান করছেন (এবং, সম্ভবত, অবজেক্টগুলি গণনা করার জন্য একটি অ্যালগরিদম তৈরি করেছেন)। রোনাল্ড গ্রাহাম, ডোনাল্ড নুথ এবং ওরেন পাতাসনিকের কংক্রিট গণিতের 7 তম অধ্যায়ে খুব ভাল উপস্থাপনা রয়েছে । নীচের উদাহরণগুলি এই বইগুলি থেকে রয়েছে (ভুল এবং স্পষ্টতার অভাব আমার)।

মনে করুন যে আপনি দেওয়া মুদ্রার সেট দিয়ে পরিবর্তন করার উপায়গুলি সন্ধান করছেন। উদাহরণস্বরূপ, সাধারণ মার্কিন denominations¹ সঙ্গে, সম্ভব কয়েন হয় । পরিবর্তে ¢ 42 দেওয়ার জন্য, একটি সম্ভাবনা [ 25 ] [ 10 ] [ 5 ] [ 1 ] [ 1 ] ; আরেকটি সম্ভাবনা হ'ল [ 10 ] [ 10 ] [ 10[1],[5],[10],[25],[100][25][10][5][1][1] । আমরা লিখতে হবে 42 [ 25 ] [ 10 ] [ 5 ] [ 1 ] 2= [ 10 ] 4 [ 1 ] 2 । আরও সাধারণভাবে, আমরা পরিবর্তনটি দেওয়ার সমস্ত উপায়ের জন্য একটি জেনারেটিং ফাংশন লিখতে পারি: H = h 0 q 0 d 0 [10][10][10][10][1][1]42[25][10][5][1]2=[10]4[1]2 আরও প্রযুক্তিগত ভাষায়,এইচপাঁচটি ভেরিয়েবলের উপর পাওয়ার সিরিজের স্পেসে একটি শব্দ[100],[25],[10],[5],[1]। এই স্থানটিতে একচেটিয়া মূল্য নির্ধারণ করুন Def

H=h0q0d0n0p0[100]h[25]q[10]d[5]n[1]p
H[100],[25],[10],[5],[1] তারপর উপায়ে দিতে বনাম monomials সংখ্যা পরিবর্তন সেন্ট হয় যার মূল্যায়ন v । আমরাকেবলমাত্র পেনিগুলিতে পরিবর্তনআনার জন্য পি উপায়গুলি লিখে প্রথমে এন ,বর্ধিত ফ্যাশনে এইচ প্রকাশ করতে পারি
[100]h[25]q[10]d[5]n[1]p=100h+25q+10d+5n+p
vvHPNপেনি এবং নিকেল পরিবর্তন করার জন্য, এবং আরও অনেক কিছু। ( কোন মুদ্রা মানে।) পি = আমি + + [ 1 ] + + [ 1 ] 2 + + [ 1 ] 3 + + ... = আমিI আপনি যদি পরিবর্তনটি দেওয়ার উপায়গুলি গণনা করতে এবং কেবল গণনা করতে না চান, তবে আমরা যে আনুষ্ঠানিক সিরিজ পেয়েছি সেগুলি ব্যবহার করার সহজ উপায় রয়েছে। হোমোর্ফিজমএসপ্রয়োগ করুন :
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]
সহগ এক্স বনাম মধ্যে এস ( সি ) উপায়ে দিতে সংখ্যা বনাম পরিবর্তন সেন্ট।
S:[1]X,[5]X5,[10]X10,[25]X25,[100]X100
XvS(C)v

2×n3×n

{U=o+LV+ΓΛ+UV=IU+=VΛ=IU+=Λ
oLI=X3×(2n/3)X3k6k3k2k). The series can also be used in more versatile ways; for example, by distinguishing vertical and horizontal dominoes, we can count the tilings with a given number of vertical and horizontal dominoes.

Again, read Concrete Mathematics for a less rushed³ presentation.

¹ I know my list is incomplete; assume a simplified US suitable for mathematical examples.²
² Also, if it comes up, assume spherical coins.
³ And better typeset.


8

I remember a problem I had to solve during a student programming contest in 2001. The problem was this one:

Given masses of 1, 7, 13, ... (I don't remember which masses, but there was a finite, determinate set of masses), design a function that determines whether a given weight can be weighed on a scale with this set of masses.

I started with nested loops, but quickly hit a wall. Then I came to realize that I had to start with enumerating what can be done with the lighter masses before going on with the heavier ones. I could solve the problem with a lot of unnested loops.

Hadn't I been youthfully arrogant and self-sufficient at that time (and had I known about and practiced generating functions), I might have defined the problem with generating functions as such :

Define f(x) as the OGF for the number of ways that a weight n can be weighed given the set of masses.

What weight on the right pan can I weigh given a single mass of 1?

Three possibilities:

  • If I put the mass on the left pan, I can weigh 1.
  • If I put the mass on the right pan, I can weigh -1.
  • If I don't use the mass, I can weigh 0.

So there is one way to weigh 1, one way to weigh 0, and one way to weigh 1. The generating function for this mass is something like x1+1+x, which corresponds to:

1x3x(1x)

The generating function for a single mass m is xm+1+xm, which is :

1x3mxm(1xm)

Given a multiset M of masses, f is expressed as the product of the single mass generating functions:

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

Now, given a package that can perform operations on polynomials, you just have to :

  • Calculate both products.
  • Perform the division of these products, starting with the lowest degree. (which terminates)
  • Shift the polynomial (euclidian division by xk, keeping the quotient and dumping the remainder)

And you're done. Now your polynomial has the number of ways to weigh w0 at index w. The only input is the multiset of masses M.

I designed the algorithm using mathematically sound components. The main part of the algorithm, which is a polynomial division with lowest degree first, is linear and can be implemented by an off-the-shelf package. It may not be optimal, but it certainly performs better than what I did at the contest, and in a less error-prone way.

If you look closely at the division process, you quickly see that the remainder can be seen as the "current hidden state" at every state of the process, and the quotient as the result. The process terminates when the "current hidden state" reaches zero everywhere.

You can implement polynomials as arrays or, if they are really really sparse, as index-coefficient ordered lists, and this won't change the algorithm.


3

While developing an algorithm for monotone submodular maximization over a matroid, we had to solve the recurrence

γ+1(m)=(2m)γ(m)+(m+1)γ1(m),γ0(m)=1,γm+1(m)=e.
After noticing that γ(m)=m(γ(m1)γ1(m1)), we reduced the problem to computing some universal sequence γ(0). The latter was accomplished using generating functions, and from there we got an explicit formula for γ(m), again using generating functions. You can find the solution in the paper if you're curious, though we never bothered to include this derivation.

0

Perhaps the extensive study of Quicksort, and its many variants, is the clearest example. There combinatoric considerations governed the consideration of alternatives, and analyzing the solutions to quite complex equations shows performance advantages (or not) of them.

আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.