منو
 صفحه های تصادفی
هجوم به خانه فاطمه علیهاسلام و سقط محسن
یوسف بن ابی‏الساج
مشکلات اولین دولت احمدشاه
انقلاب تکنولوژیک
کاوش کهکشان
ولاء محبت
ابو طاهر شاه خسرو
تورکواز
جنبه دیگر حکومت سلطنتی
نمونه برداری از مایعات
 کاربر Online
789 کاربر online
تاریخچه ی: بهینه سازی

تفاوت با نگارش: 1

Lines: 1-54Lines: 1-55
 ||V{maketoc}|| ||V{maketoc}||
 ||__~~navy:@#13::: این مطلب از بخش آموزش وب‌سایت المپیاد کامپیوتر رشد،انتخاب شده که با فرمت pdf نیز در [http://olympiad.roshd.ir|وب‌سایت المپیاد رشد]موجود می‌باشد. برای مشاهده این موضوعات در وب‌سایت المپیاد، به آدرس [http://olympiad.roshd.ir/computercontentlist.html|فهرست مطالب کامپیوتر] مراجعه کنید. همچنین می‌توانید با کلیک ((مطالب علمی سایت المپیاد رشد|اینجا))‌ ، با ویژگی‌های بخش آموزش این وب‌سایت آشنا شوید.:: #@~~__|| ||__~~navy:@#13::: این مطلب از بخش آموزش وب‌سایت المپیاد کامپیوتر رشد،انتخاب شده که با فرمت pdf نیز در [http://olympiad.roshd.ir|وب‌سایت المپیاد رشد]موجود می‌باشد. برای مشاهده این موضوعات در وب‌سایت المپیاد، به آدرس [http://olympiad.roshd.ir/computercontentlist.html|فهرست مطالب کامپیوتر] مراجعه کنید. همچنین می‌توانید با کلیک ((مطالب علمی سایت المپیاد رشد|اینجا))‌ ، با ویژگی‌های بخش آموزش این وب‌سایت آشنا شوید.:: #@~~__||
 ^@#16: ^@#16:
 !بهینه سازی  !بهینه سازی
 {*مباحث بهینه سازی مباحث پیچیده ای بوده و ختم کلام در این مباحث اصولاً ممکن نیست. در این تعادل تنها چند نکته که از لحاظ دستور زبانی به کمک بهبود سرعت اجرای برنامه می آید بیان می کنیم. مابقی بهینه سازی شامل تحلیلهای مرتبه زمان اجرا{TEX()} {(Order)} {TEX} به بخش طراحی الگوریتم واگذار می شود. {*مباحث بهینه سازی مباحث پیچیده ای بوده و ختم کلام در این مباحث اصولاً ممکن نیست. در این تعادل تنها چند نکته که از لحاظ دستور زبانی به کمک بهبود سرعت اجرای برنامه می آید بیان می کنیم. مابقی بهینه سازی شامل تحلیلهای مرتبه زمان اجرا{TEX()} {(Order)} {TEX} به بخش طراحی الگوریتم واگذار می شود.
 اولین اصل حذر از هر گونه عبارت شرطی است. به این معنا که حتی المقدور از شرط ها استفاده نکنید مثلاً در مورد محاسبه ماکزیمم و مینیمم دو عدد. فرض کنید که تابع قدر مطلق به روشی پیاده سازی شده: اولین اصل حذر از هر گونه عبارت شرطی است. به این معنا که حتی المقدور از شرط ها استفاده نکنید مثلاً در مورد محاسبه ماکزیمم و مینیمم دو عدد. فرض کنید که تابع قدر مطلق به روشی پیاده سازی شده:
 @@{TEX()} {max(a,b)=\frac{|a+b|+|a-b|}{2} \qquad min(a,b)=\frac{|a+b|-|a-b|}{2}} {TEX}@@ @@{TEX()} {max(a,b)=\frac{|a+b|+|a-b|}{2} \qquad min(a,b)=\frac{|a+b|-|a-b|}{2}} {TEX}@@
-برای اینکه ایده ای از پیاده سازی قدر مطلق بدون استفاده از عبارات شرطی داشته باشید، روش زیر را در مورد اعداد صحیح و نمایش " مکمل دو" برای اعداد منفی در نظر بگیرید.
@@{TEX()} {sb:=n \ and \ $ 80000000} {TEX}@@
@@{TEX()} {sb:=sb \ shr \ 31;} {TEX}@@
@@{TEX()} {hn:=sb*$ FFFFFFFF} {TEX}@@
@@{TEX()} {n:=(n-sb)\times \ or \hn;} {TEX}@@
+برای اینکه ایده ای از پیاده سازی قدر مطلق بدون استفاده از عبارات شرطی داشته باشید، روش زیر را در مورد اعداد صحیح و نمایش " مکمل دو" برای اعداد منفی در نظر بگیرید.

@@sb:=n and $ 80000000@@
@@;sb:=sb shr 31@@
@@hn:=sb*$ FFFFFFFF@@
@@;n:=(n-sb)* or hn@@
 فرض کنید که{TEX()} {n,hn,sb} {TEX} همه اعداد 32 بیتی صحیح هستند. کل عملیات بالا باعث می شود محتویات{TEX()} {n} {TEX}در انتهای کار قدر مطلق{TEX()} {n} {TEX}در ابتدای کار باشند. فرض کنید که{TEX()} {n,hn,sb} {TEX} همه اعداد 32 بیتی صحیح هستند. کل عملیات بالا باعث می شود محتویات{TEX()} {n} {TEX}در انتهای کار قدر مطلق{TEX()} {n} {TEX}در ابتدای کار باشند.
 یک نکته در این گونه صرفه جوئیها در پیچیدگی نتیجه شده از این روش است نکته دوم این است که ممکن است چیزی که جای شرط جایگزین می کنید آنقدر طولانی شود که خود شرط سریعتر اجرا شود. یک نکته در این گونه صرفه جوئیها در پیچیدگی نتیجه شده از این روش است نکته دوم این است که ممکن است چیزی که جای شرط جایگزین می کنید آنقدر طولانی شود که خود شرط سریعتر اجرا شود.
 به هر حال در مورد بالا می توان بدون بکار بردن شرط {TEX()} {min,max} {TEX} را محاسبه کرد. به هر حال در مورد بالا می توان بدون بکار بردن شرط {TEX()} {min,max} {TEX} را محاسبه کرد.
 نکته دوم عبارات منطقی است. نتیجه عبارت منطقی{TEX()} {a \ and \ b} {TEX} اگر{TEX()} {a} {TEX} ناصحیح باشد کلا ناصحیح است مستقل از اینکه {TEX()} {b} {TEX} چه باشد. {TEX()} {Delphi} {TEX}در محاسبه مقادیر منطقی از این نکته استفاده کرده و اگر اولین عنصر در {TEX()} {and} {TEX} صفر و یا اولین عنصر {TEX()} {or} {TEX} یک باشد باقی عبارت بررسی نمی شود یعنی در محاسبه  نکته دوم عبارات منطقی است. نتیجه عبارت منطقی{TEX()} {a \ and \ b} {TEX} اگر{TEX()} {a} {TEX} ناصحیح باشد کلا ناصحیح است مستقل از اینکه {TEX()} {b} {TEX} چه باشد. {TEX()} {Delphi} {TEX}در محاسبه مقادیر منطقی از این نکته استفاده کرده و اگر اولین عنصر در {TEX()} {and} {TEX} صفر و یا اولین عنصر {TEX()} {or} {TEX} یک باشد باقی عبارت بررسی نمی شود یعنی در محاسبه
 @@{TEX()} {m:a \ and (b \ xor(C \ and \ not \ d));} {TEX} @@ @@{TEX()} {m:a \ and (b \ xor(C \ and \ not \ d));} {TEX} @@
 اگر{TEX()} {a} {TEX}غلط باشد دیگر {TEX()} {Delphi} {TEX} بقیه عبارت را محاسبه نمی کند. بنابراین در هنگام نوشتن اینگونه شرط ها دقت کنید ساده ترین بخش محاسبه در ابتدای عمل{TEX()} {and} {TEX}قرار گیرد. یک مثال خوب عبارت گفته شده است محاسبه درستی یا غلطی بسیار ساده تر از عبارت سمت راست است لذا {TEX()} {a} {TEX}در سمت چپ نوشته شده. اگر{TEX()} {a} {TEX}غلط باشد دیگر {TEX()} {Delphi} {TEX} بقیه عبارت را محاسبه نمی کند. بنابراین در هنگام نوشتن اینگونه شرط ها دقت کنید ساده ترین بخش محاسبه در ابتدای عمل{TEX()} {and} {TEX}قرار گیرد. یک مثال خوب عبارت گفته شده است محاسبه درستی یا غلطی بسیار ساده تر از عبارت سمت راست است لذا {TEX()} {a} {TEX}در سمت چپ نوشته شده.
 در نهایت استفاده از متغیرهای تابعی در جای خود بسیار مفید است. مثلاً در نظر بگیرید که یک تابع دو متغیره دارید: در نهایت استفاده از متغیرهای تابعی در جای خود بسیار مفید است. مثلاً در نظر بگیرید که یک تابع دو متغیره دارید:
 ::{picture=img/daneshnameh_up/7/72/mco0133a.gif}:: ::{picture=img/daneshnameh_up/7/72/mco0133a.gif}::
 که بصورت بالا تعریف می شود. حال اگر تابع فوق در زیر برنامه ای بصورت زیر بکار رفته باشد. که بصورت بالا تعریف می شود. حال اگر تابع فوق در زیر برنامه ای بصورت زیر بکار رفته باشد.
 @@{TEX()} {procedure \ Dummy(y):Real);} {TEX}@@ @@{TEX()} {procedure \ Dummy(y):Real);} {TEX}@@
 @@{TEX()} {var X,W:Real;} {TEX}@@ @@{TEX()} {var X,W:Real;} {TEX}@@
 @@{TEX()} {begin} {TEX}@@ @@{TEX()} {begin} {TEX}@@
 @@{TEX()} {X:=0;W:=0;} {TEX}@@ @@{TEX()} {X:=0;W:=0;} {TEX}@@
-@@{TEX()} {While(X<250)do} {TEX}@@ +@@{TEX()} {While(X<250)do} {TEX}@@
 @@{TEX()} {begin} {TEX}@@ @@{TEX()} {begin} {TEX}@@
 @@{TEX()} {W:=f(X,Y)+X;} {TEX}@@ @@{TEX()} {W:=f(X,Y)+X;} {TEX}@@
 @@{TEX()} {X:=X+0.5;} {TEX}@@ @@{TEX()} {X:=X+0.5;} {TEX}@@
 @@{TEX()} {end;} {TEX}@@ @@{TEX()} {end;} {TEX}@@
 @@{TEX()} {end;} {TEX}@@  @@{TEX()} {end;} {TEX}@@
 می توان زیر برنامه بالا را بصورت زیر نوشت می توان زیر برنامه بالا را بصورت زیر نوشت
-( البته با فرض آنکه{TEX()} {f(x,y \ge 100)=f_2(x),f(x,y <100)==f_1(x)} {TEX} باشند. ) +( البته با فرض آنکه{TEX()} {f(x,y \ge 100)=f_2(x),f(x,y <100)==f_1(x)} {TEX} باشند. )
 @@{TEX()} {Procedure \ Dummy (y):Real;} {TEX}@@ @@{TEX()} {Procedure \ Dummy (y):Real;} {TEX}@@
 @@{TEX()} {var X,W:Real;} {TEX}@@ @@{TEX()} {var X,W:Real;} {TEX}@@
 @@{TEX()} {f:function(P1,P2:Real):Real;} {TEX}@@ @@{TEX()} {f:function(P1,P2:Real):Real;} {TEX}@@
 @@{TEX()} {begin} {TEX}@@ @@{TEX()} {begin} {TEX}@@
 @@{TEX()} {if \ y \ge 100 \ then f:f1;} {TEX}@@ @@{TEX()} {if \ y \ge 100 \ then f:f1;} {TEX}@@
 @@{TEX()} {else \ f:=f2;} {TEX}@@ @@{TEX()} {else \ f:=f2;} {TEX}@@
 @@{TEX()} {X:=0;W:=0;} {TEX}@@ @@{TEX()} {X:=0;W:=0;} {TEX}@@
-@@{TEX()} {While (X<250)do} {TEX}@@ +@@{TEX()} {While (X<250)do} {TEX}@@
 @@{TEX()} {begin} {TEX}@@ @@{TEX()} {begin} {TEX}@@
 @@{TEX()} {W:=f(X);} {TEX}@@ @@{TEX()} {W:=f(X);} {TEX}@@
 @@{TEX()} {X:=X+0.5;} {TEX}@@ @@{TEX()} {X:=X+0.5;} {TEX}@@
 @@{TEX()} {end;} {TEX}@@ @@{TEX()} {end;} {TEX}@@
 @@{TEX()} {end;} {TEX}@@  @@{TEX()} {end;} {TEX}@@
-در حالت اول به ازای هر بار اجرا شدن{TEX()} {f(x,y)} {TEX}یکبار شرط {TEX()} {y \ge 100} {TEX}اجرا می شد یعنی 250 بار اجرا شدن یک شرط در حالیکه در حالت دوم یکبار شرط{TEX()} {y \ge 100} {TEX} اجرا شده و از نتیجه در کل ادامه برنامه استفاده می شود. این کار با کم کردن تعداد اجراهای شرطی بصورت سرعت برنامه را بالا می برد. +در حالت اول به ازای هر بار اجرا شدن{TEX()} {f(x,y)} {TEX}یکبار شرط {TEX()} {y \ge 100} {TEX}اجرا می شد یعنی 250 بار اجرا شدن یک شرط در حالیکه در حالت دوم یکبار شرط{TEX()} {y \ge 100} {TEX} اجرا شده و از نتیجه در کل ادامه برنامه استفاده می شود. این کار با کم کردن تعداد اجراهای شرطی بصورت سرعت برنامه را بالا می برد.*}
 --- ---
 ! پیوند های خارجی ! پیوند های خارجی
 [http://Olympiad.roshd.ir/computer/content/pdf/0241.pdf] [http://Olympiad.roshd.ir/computer/content/pdf/0241.pdf]
 #@^ #@^

تاریخ شماره نسخه کاربر توضیح اقدام
 سه شنبه 16 آبان 1385 [11:36 ]   4   زینب معزی      جاری 
 سه شنبه 16 آبان 1385 [11:28 ]   3   زینب معزی      v  c  d  s 
 سه شنبه 16 آبان 1385 [09:50 ]   2   زینب معزی      v  c  d  s 
 سه شنبه 16 آبان 1385 [09:50 ]   1   زینب معزی      v  c  d  s 


ارسال توضیح جدید
الزامی
big grin confused جالب cry eek evil فریاد اخم خبر lol عصبانی mr green خنثی سوال razz redface rolleyes غمگین smile surprised twisted چشمک arrow



از پیوند [http://www.foo.com] یا [http://www.foo.com|شرح] برای پیوندها.
برچسب های HTML در داخل توضیحات مجاز نیستند و تمام نوشته ها ی بین علامت های > و < حذف خواهند شد..