ه) اعمال محاسباتی روی اعداد صحیح بزرگ

Download Report

Transcript ه) اعمال محاسباتی روی اعداد صحیح بزرگ

‫اهداف‬
‫درس این جلسه‬
‫‪ (1‬یادگیری رویکرد تمرین و حل برای مساله‌ای دیگر‬
‫‪(1‬‬
‫استفاده از این رویکرد در کاهش پیچیدگی محاسباتی در ضرب اعداد صحیح‬
‫بزرگ‬
‫‪ (2‬تعیین اینکه الگوریتم‌های تقسیم و حل با مرتبه پیچیدگی کمتر از چه مقدار‬
‫‪ n‬به بعد مناسب هستند‪.‬‬
‫ه) اعمال محاسباتی روی اعداد صحیح بزرگ‬
‫انجام اعمال محاسباتی روی اعداد صحیحی که بزرگتر از حدی هستند که سخت‌افزار کامپیوتر می‌تواند آنها‬
‫را نمایش دهد‪.‬‬
‫نوشتن الگوریتمی با زمان خطی که جمع و تفریق اعدادی صحیح با چنین ساختاری را انجام دهند مشکل‬
‫نمی‌باشد‪.‬‬
‫ه) اعمال محاسباتی روی اعداد صحیح بزرگ‬
‫ضرب اعداد صحیح بزرگ‪:‬‬
‫ه) اعمال محاسباتی روی اعداد صحیح بزرگ‬
‫بنابراین چنانچه دو عدد با ‪ n‬رقم به صورت زیر داشته باشیم‪:‬‬
‫در این صورت ضرب آنها را به صورت زیر می‌توان نوشت‪:‬‬
‫به عنوان مثال دو عدد زیر را در نظر بگیرید‪:‬‬
‫ه) اعمال محاسباتی روی اعداد صحیح بزرگ‬
function R=largeIntProd(U,V)
nu=length(U);nv=length(V);n=max([nu nv]);
s=2; %The value of threshold
if (n<=s)
result=U*V;
else
m=floor(n/2);
[x,y]=devision(U,m);
[w,z]=devision(V,m);
R=largeIntSum(
largeIntSum(
shift(largeIntProd(x,w),2*m),
shift(largeIntSum(largeIntProd(x,z),largeIntProd(w,y)),m)
),
largeIntProd(y,z)
);
end
end
‫ه) اعمال محاسباتی روی اعداد صحیح بزرگ‬
‫تحلیل پیچیدگی زمانی در بدترین حالت‪:‬‬
‫زمانی اتفاق می‌افتد که هیچکدام از دو عدد صحیح هیچ رقمی برابر صفر نداشته باشند‪.‬‬
‫بر اساس قضیه بیان شده‪:‬‬
‫ه) اعمال محاسباتی روی اعداد صحیح بزرگ‬
‫بهبود‪:‬‬
‫در تابع ‪ largeIntProd‬که نوشته شد‪ ،‬می‌بایست سه مقدار زیر را محاسبه می‌کردیم ‪...‬‬
‫که عمال این تابع به صورت بازگشتی می‌بایست چهار بار صدا زده‌ می‌شد‪:‬‬
‫چنانچه تغییر متغیری به صورت زیر انجام دهیم ‪...‬‬
‫آنگاه خواهیم داشت ‪...‬‬
‫در این حالت برای محاسبات دیگر نیاز به چها ضرب نیست‪ .‬بلکه تنها سه ضرب انجام‬
‫می‌شود‪ .‬هرچند که تعدادی جمع و ضرب انجام می‌شود ولی زمان آنها در محاسبات خطی‬
‫است‪.‬‬
‫ه) اعمال محاسباتی روی اعداد صحیح بزرگ‬
‫تحلیل پیچیدگی زمانی در بدترین حالت‪:‬‬
‫زمانی است که هیچ یک از دو عدد صحیح رقمی برابر با صفر نداشته باشند‬
‫اگر ‪ n‬توانی از ‪ 2‬باشد آنگاه ‪ w ،y ،x‬و ‪ z‬همگی ‪ n/2‬رقم خواهند داشت‬
‫با توجه به مثالی که در جدول زیر آورده شده است‪:‬‬
‫ه) اعمال محاسباتی روی اعداد صحیح بزرگ‬
‫در آخرین الگوریتم ارائه شده ‪ 3‬بار فراخوانی ‪ prod‬را داریم‪:‬‬
‫همانند تحلیل پیچیدگی که برای حالتی که دارای ‪ 4‬بار فراخوانی ‪ prod‬بود‪ ،‬دیگر عملیاتها نظیر‬
‫‪ sum‬و ‪ shift‬دارای پیچیدگی زمانی خطی )‪ (cn‬نسبت به ‪ n‬میباشند‪.‬‬
‫بنابراین رابطه ز ‌یر را داریم‪:‬‬
‫ه) اعمال محاسباتی روی اعداد صحیح بزرگ‬
‫بر اساس قضیه بیان شده در‬
‫همچنین‬
‫نشان می‌دهیم که در‬
‫پس در نهایت‪:‬‬
‫داریم‪:‬‬
‫داریم‪:‬‬
‫ه) اعمال محاسباتی روی اعداد صحیح بزرگ‬
‫برای مرتبه پیچیدگی محاسباتی در‬
‫می‌کنیم که ‪...‬‬
‫بر اساس قضیه بیان شده خواهیم داشت‪:‬‬
‫و همچنین‪:‬‬
‫اینگونه بیان‬
‫و) تعیین مقادیر آستانه‬
‫فرآیند بازگشتی از لحاظ زمانی سربار به همراه دارد‪:‬‬
‫‪ )1‬قرار دادن پارامترها در پشته قبل از فراخوانی‬
‫‪ )2‬بازیابی پارامترها از پشته پس از پایان فراخوانی‬
‫بنابراین بحث این است که اگر مثال می‌خواهیم ‪ 8‬عدد را مرتب کنیم آیا سربار اضافه شده ارزش‬
‫آن را دارد که‪:‬‬
‫به جای )‪( Ɵ(n2‬مرتب سازی تعویض ی)‪،‬‬
‫از )‪( Ɵ(nlog n‬مرتب سازی ادغامی) استفاده کنیم؟‬
‫بنابراین در این بخش روش ی را بیان می‌کنیم که تعیین می‌کند که الگوریتم به ازای چه‬
‫مقادیری از ‪( n‬مقدار آستانه)‪ ،‬آنقدر سریع است که دیگر‬
‫نیاز به تقسیم کردن نمونه نباشد‪.‬‬
‫و) تعیین مقادیر آستانه‬
‫دار آستانه به‬
‫سربار مربوط می‌شود‪ ،‬بنابراین تعیین مق ‌‬
‫‌‬
‫مقدار آستانه به هزینه‬
‫‌‬
‫چون‌ تعیین‬
‫در آن اجرا می‌شود‬
‫ی بستگی دارد که برنامه ‌‬
‫کامپیوتر ‌‬
‫مقدار آستانه (‪ )threshold‬می‌گویی برای ‪‌ n<=t‬از الگوریتم بدون‌ بازگشتی‬
‫‌‬
‫پس ‌از تعیین‬
‫‌و برای ‪‌ n>t‬از روش بازگشتی (تقسیم‌وحل) استفاده می‌کنیم‪.‬‬
‫و) تعیین مقادیر آستانه‬
‫فرض می‌کنیم روی کامپیوتر مورد نظر‪ ،‬زمانی‌که مرتب‌سازی ادغامی برای‬
‫‪ -1‬تقسیم (فراخوانی پشته)‬
‫‪ -2‬ترکیب (بازیابی مقادیر از پشته و ‪)merge‬‬
‫نیاز دارد‪ 32nµs ،‬باشد‪.‬‬
‫پس‪:‬‬
‫و) تعیین مقادیر آستانه‬
‫می‌خواهیم مقدار بهینه ‪ t‬را پیدا کنیم‪.‬‬
‫مقدار بهینه برای ‪ ،t‬مقداری است که عبارت باالیی و پایینی را در معادله باال به هم مساویاند‪.‬‬
‫چون‬
‫و‬
‫هر دو از ‪ t‬کوچکترند‪ ،‬پس زمان آنها از رابطه‬
‫محاسبه میشود‪.‬‬
‫حل این معادله زمانیکه ‪ t‬زوج است با زمانیکه ‪ t‬فرد است متفاوت میباشد‬
‫و) تعیین مقادیر آستانه‬
‫پس یکبار فرض می‌کنیم که‪:‬‬
‫‪ t‬زوج است‪ ،‬یعنی ‪ ....‬پس از حل معادله داریم ‪t=128‬‬
‫‪ t‬فرد است‪ ،‬یعنی ‪ ....‬پس از حل معادله داریم ‪t=128.008‬‬
‫پس ‪t=128‬‬
‫اگر پس از حل معادله مقادیر زیر را بدست آوریم‪:‬‬
‫‪ t‬زوج است‪ ،‬یعنی ‪ ....‬پس از حل معادله داریم ‪t=64‬‬
‫‪ t‬فرد است‪ ،‬یعنی ‪ ....‬پس از حل معادله داریم ‪t=70‬‬
‫چون دو مقدار ‪ t‬با هم برابر نیستند پس هیچ مقدار آستانه‌ای وجود ندارد‬
‫اگر ‪ n‬عددی زوج بین ‪ 64‬و ‪ 70‬باشد باید یکبار دیگر تقسیم کرد و‬
‫اگر ‪ n‬عددی فرد بین ‪ 64‬و ‪ 70‬باشد از رویکرد بدون بازگشتی استفاده میکنیم‬
‫کجا نمیتوان از روش تقسیموحل استفاده کرد؟‬
‫پرهیز کرد‪:‬‬
‫در موارد ز ‌یر باید ‌از روش تقسیم ‌و حل ‌‬
‫‌‬
‫دو یا چند نمونه به اندازه تقریبا ‪ n‬تقسیم می‌شود‬
‫‪ -1‬نمونه‌ای به اندازه ‪ n‬به ‌‬
‫مانند فیبوناجی به روش بازگشتی‬
‫در این صورت مرتبه پیچیدگی محاسباتی به صورت نمایی مانند )‪ Ɵ(2n‬خواهد بود‬
‫‌‬
‫مانند محاسبه دنباله فیبوناجی‬
‫مقدار ثابتی است) تقسیم‬
‫‌‬
‫‪ -2‬نمونه‌ای به اندازه ‪ n‬به ‪ n‬نمونه به اندازه تقریبا ‪c( n/c‬‬
‫می‌شود‬
‫در این صورت مرتبه پیچیدگی محاسباتی به صورت )‪ nƟ(logn‬خواهد بود‬
‫‌‬
‫پرسشهای‬
‫درس این جلسه‬
‫‪(1‬‬
‫‪(2‬‬
‫‪(3‬‬
‫‪(4‬‬
‫‪(5‬‬
‫الگوریتمی مبتنی بر رویکرد تقسیم و حل برای ضرب اعداد صحیح بزرگ ارائه دهید‪.‬‬
‫با چه بهینه‌سازی می‌توان پیچیدگی محاسباتی در ضرب اعداد صحیح بزرگ را کاهش داد؟‬
‫مرتبه پیچیدگی در حالت بهینه شده را بدست آورید‪.‬‬
‫بازگشتی‬
‫به چه دلیلی نیاز است تا حد آستانه‌ای برای استفاده یا عدم استفاده از الگوریتم‌های ‌‬
‫بدست آوریم؟‬
‫در چه مواردی استفاده از روش تقسیم‌وحل مناسب نیست؟‬