بخشی از پاورپوینت

اسلاید 1 :

در جلسات قبل گفته شد که روش تقسيم و حل يك روش از بالا به پايين است.

در اين روش مسئله با سايز ورودي n را به انواع زير مسائل مي شكنيم ( انواع روش هاي شكستن را آزمايش مي كنيم ) . این شکستن را ادامه می دهیم تا به مرحله ای برسیم که مسئله دیگر قابل شکستن نباشد و یا پاسخ بدیهی به نظر برسد .

  معمولا با كوچك ترين و در نتيجه ساده ترين نمونه حل را آغاز مي كنيم . سپس از تركيب حل نمونه هاي كوچك تر حل نمونه هاي بزرگ تر به دست مي آيد و اين روند ادامه مي يابد تا سرانجام حل نمونه اصلي يا كامل حاصل شود .

  اين روش زماني مفيد است كه معيار حريصانه ای وجود نداشته باشد و مسئله اصلي قابل شكستن باشد .

 

اسلاید 2 :

انواع شكستن مسئله باعث مي شود كه تعدادي زير مسائل تكراري توليد شود . هزينه حل يا محاسبه اين تعداد از مرتبه نمايي است .

در روش برنامه نويسي پويا براي كاهش اين مرتبه زماني هر زير مسئله در حافظه نگهداري شده و در مواقع توليد، زير مسائل تكراري ديگر حل    نمي شوند و تنها عمل واكشي اطلاعات صورت مي گيرد .

تفاوت اصلي بين روش حريصانه و برنامه نويسي پويا آن است كه در روش حريصانه فقط يك مجموعه ي انتخا ب ها ( جوابها ) توليد مي شود در حالي كه در برنامه نويسي پويا ممكن است مجموعه ي زيادي از انتخاب ها  ( جوابها ) توليد شود.هر چند كه مجموعه هاي شامل زير مجموعه هاي بهينه نمي تواند بهينه باشند ( اگر اصل بهينه سازي برقرار باشد ) و       بنا براين تا حد امكان نبايد توليد شوند .

اسلاید 3 :

حل مسئله به روش برنامه نويسي پويا

گام اول : مشخص كردن انواع روش هاي شكستن مسئله و ارائه اين موضوع در يك طرح درخت واره اي

اين فاز يكي از مهمترين فازها مي باشد و يك طرح واحد نيست ولي بهينه ترين در نظر گرفته مي شود .

گام دوم : كشف بهترين نوع تركيب زير مسائل كوچكتر

گام سوم : جلوگيري از محاسبات تكراري ، با طراحي يك جدول و ثبت جواب هر زير مسئله در آن در ادامه كار اگر آن زير مسئله دوباره تكرار شد از جدول استفاده مي كنيم .

گام چهارم : پياده سازي برنامه

گام پنجم : تحليل زماني / حافظه اي

اسلاید 4 :

ضرب زنجیره ای ماتریس ها

 مسئله اینست که ماتريس هاي زير را به چه روشي با یکدیگر ضرب كنيم تا كمترين هزينه ضرب و جمع را بپردازيم ؟

 M1 ×  M2 × M3 × … × Mn

مثال

فرض می کنیم چهار ماتريس داريم به طوري كه سطر و ستون آن به ترتيب زير باشد :

اسلاید 5 :

 روشن است که روش هاي مختلف محاسبه ،  هزينه هاي مختلف را در بر دارد .

    به عنوان مثال :

((M1 × M2) × M3) × M4 =   (2 × 5 × 3) + (2 × 3 × 8) +(2 × 8 × 1)

                                    =  30 + 48 + 16 = 94

(M1 × M2) ×(M3 × M4)  =  (2 × 5 × 3) +(3 × 8 × 1) + (2 × 3 × 1)

                                    =  30 + 24 + 6 = 60

با توجه به مثال بالا تعداد كل حالات ضرب n ماتريس از رابطه ی بازگشتی ذیل محاسبه   می شود :

رياضيات رابطه بازگشتي بالا را حل كرده است.

اسلاید 6 :

اگر n برابر 4 باشد آنگاه عدد كاتالان برابر 5 است. به عبارت ديگر تعداد كل حالات ممكن ضرب زنجيره اي 4 ماتريس برابر 5 است .

( (M1 × M2) × M3 ) × M4

( M1 × (M2 × M3) ) × M4

( M1 × M2 ) × ( M3 × M4 )

M1 × ( (M2 × M3) × M4 )

M1 × ( M2 × (M3 × M4) )

در این مسئله هدف یافتن بهینه ترین حالت ضرب است از نظر کمترین تعداد اعمال محاسباتی

اسلاید 7 :

گام دوم : نحوه ترکیب یا محاسبه ی هزینه ضرب در طرح درخت واره ای

M11=M22=M33=M44=0

M12 = min ( M11 + M22 + 2 × 5 × 3)=30

M23 = min ( M22 + M33 + 5 × 3 × 8)=120

M34 = min ( M33 + M44 +3 × 8 × 1)=24

M13 = min ( M11 + M23 + 2 × 5 × 8 , M12 + M33 + 2 × 3 × 8)

        = min (120+80 , 30+48) = min(200 , 78)=78

M24 = min ( M22 + M34 + 5 × 3 × 1 , M23 + M44 + 5 × 8 × 1)

        = min ( 24+15 , 120+40)=min(39 , 160)=39

 

M14 = min(M11 + M24 + 2×5×1,M12+M34 +2×3×1,M13+M44+ 2×8 ×1)          = min (39+10 , 30+24+6 , 78+16)=min(49,60,94)=49

اسلاید 8 :

گام چهارم  : پياده سازي

براي پياده سازي طرح و ساختار حافظه اي مطرح شده ( براي نگهداري عناصر تكراري ) نياز به يك آرايه دو بعدي جهت ذخيره كردن حالت بهينه در هر گذر و همچنين نياز به يك آرايه يك بعدي جهت نگهداري ابعاد ماتريس ها داريم :

به عنوان مثال داريم :

آرايه ابعاد ماتريس ها :

A :

اسلاید 9 :

 for (i=1 ; i<= n ; i++)

  m[i][i] = 0;

for (r=2 ; r<= n ; r++)

  for(c=r-1 ; c>=1 ; c--)

  {

  min = 99999 ; // +∞

  for (k=c ; k<r ; k++)

  {

        if (m[c][k]+m[k+1][r]+ A[c-1]*A[k]*A[r] < min)

  min = m[c][k]+m[k+1][r]+ A[c-1]*A[k]*A[r];

  m[c][r]= min;

  }

  }

اسلاید 10 :

گام پنجم: هزينه زماني/ حافظه اي

هزينه حافظه اي :

—با توجه به ساختارهاي حافظه اي استفاده شده داريم :

هزينه حافظه اي = هزينه آرايه دوبعدي ساختار حافظه اي + حافظه يك بعدي ابعاد ماتريس ها

 

هزينه زماني:

—با توجه به حلقه هاي for  استفاده شده در كد پياده سازي برنامه  هزينه زماني برابر است با

در متن اصلی پاورپوینت به هم ریختگی وجود ندارد. برای مطالعه بیشتر پاورپوینت آن را خریداری کنید