PDA

توجه ! این یک نسخه آرشیو شده میباشد و در این حالت شما عکسی را مشاهده نمیکنید برای مشاهده کامل متن و عکسها بر روی لینک مقابل کلیک کنید : آموزشی تحلیل مقدماتی الگوریتمها



آبجی
10th May 2010, 11:30 PM
سوال:

چگونه می‌توانیم زمان اجرای یک الگوریتم را محاسبه کنیم؟
چگونه می‌توانیم دو تا الگوریتم را با هم مقایسه کنیم؟
چگونه می‌توانیم بگوییم که یک الگوریتم بهینه هست؟

جواب:
تعداد عملیات پایه که الگوریتم با بدترین ورودی اجرا می‌کند.

عملیات پایه می‌توانند یکی از موارد زیر باشند:

یک انتساب (Assignment)
مقایسه‌ى دو تا متغییر (Comparison)
یک محاسبه ریاضی بین دو تا متغیر (Arithmatic Operation)

بدترین ورودی هم، آن ورودیی است که باعث اجرای بیشترین عملیات پایه می‌شود. به عنوان مثال در حلقه زیر با بدترین ورودی بیشترین تکرار 5 است:

کد:
کد:

n := 5; loop get(m); n := n -1; until (m=0 or n=0)
و در حلقه زیر با بدترین ورودی بیشترین تکرار n می‌باشد:

کد:
کد:

get(n); loop get(m); n := n -1; until (m=0 or n=0)
حالا چطور تعداد عملیات پایه را بشماریم؟ برای ساختارهای مختلف الگوریتم به شرح زیر عمل می‌کنیم:

توالی (Sequence):
P و Q قسمتهای یک الگوریتم هستند.

زمان کل = زمان(P) + زمان(Q)

حلقه (Iteration):

کد:
کد:

while < condition > loop P; end loop
یا
کد:
کد:

for i in 1..n loop P; end loop
زمان کل = زمان<span dir=ltr>x (P)</span> بیشترین تعداد تکرار

شرط (Conditional):

کد:
کد:

if &lt; condition > then P; else Q; end if;
زمان کل = زمان(P) اگر شرط برقرار باشد
زمان کل = زمان(Q) اگر شرط برقرار نباشد

روتینهای بازگشتی (Recursive Procedures):
در اینجا تنها به این نکته بسنده می‌کنم که زمان اجرای این روتینها بسته به اندازه ورودی تابعی (توابعی) لگاریتمی است.

خوب٬ برای نمونه الگوریتم زیر رو در نظر بگیرید:

کد:
کد:

for i in 1..n loop for j in 1..n loop if i &lt; j then swop (a(i,j), a(j,i)); -- Basic operation end if; end loop; end loop;
تعداد عملیات پایه &lt; <span dir=ltr>n^2</span> = <span dir=ltr>(n * n * 1)</span

استفاده از تمامی مطالب سایت تنها با ذکر منبع آن به نام سایت علمی نخبگان جوان و ذکر آدرس سایت مجاز است

استفاده از نام و برند نخبگان جوان به هر نحو توسط سایر سایت ها ممنوع بوده و پیگرد قانونی دارد