ه) اعمال محاسباتی روی اعداد صحیح بزرگ
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
الگوریتمی مبتنی بر رویکرد تقسیم و حل برای ضرب اعداد صحیح بزرگ ارائه دهید.
با چه بهینهسازی میتوان پیچیدگی محاسباتی در ضرب اعداد صحیح بزرگ را کاهش داد؟
مرتبه پیچیدگی در حالت بهینه شده را بدست آورید.
بازگشتی
به چه دلیلی نیاز است تا حد آستانهای برای استفاده یا عدم استفاده از الگوریتمهای
بدست آوریم؟
در چه مواردی استفاده از روش تقسیموحل مناسب نیست؟