رشد توابع توابع بازگشتي

Slides:



Advertisements
Παρόμοιες παρουσιάσεις
يادگيري تقويتي يادگيري تقويتي, يك واژه قرض گرفته شده از مجموعه كلمات مربوط به يادگيري حيوانات، به وسيله مينسكي, مي باشد در مقايسه با يادگيري تحت سرپرستي.
Advertisements

7.
اصول حفاظتي و مراقبتي و بازتواني مصدومين حادثه زلزله
((پیشگفتار)) *پیش درآمد:
برنامه ریزی خطی پیشرفته (21715) Advanced Linear Programming Lecture 5
ضریب طول موثر ستونها پروژه درس پایداری استاد : دکتر حسین پرستش
به نام خدا سنسورهای سنجش شتاب.
حجم نمونه Sample Size 1.
تحقيق، بررسي و مطالعه كوانتومي مواد جاذب رادار
مباني ماشينهاي الكتريكي جريان مستقيم
روشهای حل معادلات کان - شم
انواع تحقيقات و روش هاي تحقيق
مقدمه.
اقتصاد خرد (1) کارشناسی اقتصاد نام درس: سطح و رشته :
سیگنال ها و سیستم ها درس هفدهم حمیدرضا پوررضا.
پديدة گذار فاز پديده‌‌اي است كه با بروز يك ناپيوستگي در ترموديناميك يك دستگاه همراه است. گذار فاز مرتبة اول: مشتق اول پتانسيل گيبس در عبور از مرز.
به نام خدا فصل پنجم نوسان سازها
بنام خدا دانشگاه صنعتي اميرکبير
روش عناصر محدود غیرخطی II Nonlinear Finite Element Procedures II
Normal distribution z.Shjajari.
تئوری الاستیسیته Theory of Elasticity كريم عابدي.
Finite Element Procedures
مدارهای الکتریکی 1 فصل‌4 – روش های تحلیل مدارهای مقاومتی
رشته هاي حسابداري و مديريت سایت دانشجویان رشته حسابداری ایران
مباني نظري مدل رابطه‌اي
آزمون فرض.
به نام پروردگار.
دبیر مربوط :سرکار خانم رجبی
تاليف: امير سامان محسنی
به نام خدا.
تصاویر استریوگرافی کریستالوگرافی/ دانشگاه حکیم سبزواری/دکتر جباره.
به نام خداوند بخشنده مهربان
تجزیه و تحلیل تصمیم گیری
روش‌های اندازه‌گیری میزان تخلخل و سطوح موثر
به نام خدا.
فناوري سلول هاي خورشيدي شفاف Transparent solar cells
دانشگاه صنعتي مالك اشتر
ترازیابی تعریف ترازیابی
به نام خدا.
اقتصاد مدیریت تعریف.
H.R. POURREZA بینایی ماشین آنالیز بافت حمیدرضا پوررضا.
مدارهاي الكتريكي مدارهای الکتریکی.
گروه كارشناسي ارشد مديريت فنآوري اطلاعات(واحد الكترونيكي تهران)
سیگنال ها و سیستم ها درس هجدهم حمیدرضا پوررضا.
آزمون فرض‌های آماری.
سیستمهای فازی وکاربرد آن درپزشکی
LIPIDS.
نفیسه شریفی بازتاب‌سنج پرتو ایکس.
به نام خدا.
هوش مصنوعي فصل سوم حل مسئله با جستجو.
بررسي علل بروز استرنوتومي مجدد به دليل خونريزي پس از CABG
لایه نشانی تبخیر حرارتی مبتنی بر مقاومت الکتریکی
رسوب سختی آلیاژهای آلومینیوم
تئوری الاستیسیته Theory of Elasticity كريم عابدي.
سیستمهای فازی استاد محترم : جناب آقای دکتر توحید خواه ارائه دهندگان:
يادآوری: سیستم مجموعه ای یک یا چند فازی است که میتواند شامل چندین جزء باشد. سیستم میتواند با محیط انرژی ( کار و حرارت) و ماده مبادله نماید. انواع سیستم:
سیگنال ها و سیستم ها درس دهم حمیدرضا پوررضا.
رگرسیون چندگانه Multiple Regression
آماده سازی نمونه دسته ای از واکنش های فیزیکی شیمیایی است که نهایتا آلاینده شغلی یا محیطی را از بین عوامل مداخله گر موجود در ماتریکس اولیه جدا می سازد.
فصل پنجم: طراحی سیستم های عقربه ای مدرس: دکتر خالدیان 28/9/1388
MD,MPH,PhD Candidate in health education
تبدیل فوریه سیستم های زمان گسسته
سیگنال ها و سیستم ها درس هشتم حمیدرضا پوررضا.
Mechatronics فصل چهارم سیگنال‎های آنالوگ و دیجیتال
e e e e e بررسی فرآیند های الکترودی
سیگنال ها و سیستم ها درس نوزدهم حمیدرضا پوررضا.
طرح تحقیق و نمونه طرح تحقیق
سینتیک شیمیایی و آنزیمی
سیگنال ها و سیستم ها درس پنجم حمیدرضا پوررضا.
بسم الله الرحمن الرحيم.
Μεταγράφημα παρουσίασης:

رشد توابع توابع بازگشتي ساختمان داده ها و الگوريتم ها

رشد توابع ---- 2n2+3n+7 ---- 3n2 for n>=5 , 3n2 > 2n2 + 3n + 7

O notation تعريف: تابع f1 از مرتبه O(f2) است ، اگر براي اعداد بزرگ n ( بزرگتر از عددي مثل ، n0) ، ثابت c وجود داشته و در رابطه زير صدق كند: for all n >= n0 , f1(n) <= c f2(n) c f2 كران بالاي تابع f1 ناميده مي شود. f1(n) = 2n2 + 3n + 7 , f2(n) = n2 for all n>=6 , f1(n) < 3 f2(n) f1 ∈ O(f2) for all n>=1 , f2(n) < f1(n) f2 ∈ O(f1)

O(a0+ a1n + a2n2 +…+annn) f = a0+ a1n + a2n2 +…+axnx  f ∈ O(?) f /nx = a0/nx + a1/nx-1 +a2/nx-2 + …+ ax if n∞ : f/nx  ax if n∞ : f  axnx پس: ثابت c و عدد بزرگ n0را مي توان يافت که در رابطه زير صدق کنند: for all n >= n0 , f = a0+ a1n + a2n2 +…+axnx < c nx f = a0+ a1n + a2n2 +…+axnx ∈ O(nx) مثال : تعيين ثابت, n0 c براي n2 - 3n< cn2 cn2 > n2 - 3n  c > 1- 3 /n  n0 = 3 , c = 1

Ω Notation تعريف:تابع f1 از مرتبه Ω(f2) است ، اگر براي اعداد بزرگ n ( بزرگتر ازعددي مثل ، n0) ، ثابت c وجود داشته و در رابطه زير صدق كند: for all n >= n0 , f1 >= c f2 c f2 كران پايين تابع f1 ناميده مي شود. مشابه نماد O مي توان نشان داد که مرتبه توابع چند جمله اي برابر با بزرگترين توان آنهاست: f = a0+ a1n + a2n2 +…+axnx ∈ Ω(nx) مثال : تعيين ثابت, n0 c براي n2 - 3n> cn2 cn2 < n2 - 3n  c < 1- 3 /n  n0 = 10 , c = 0.5

Θ Notation تعريف:تابع f1 از مرتبه Θ(f) است ، اگر براي اعداد بزرگ n ( بزرگتر ازعددي مثل ، n0) ، ثابت c1,c2 وجود داشته و در رابطه زير صدق كنند: for all n >= n0 ,c1f <= f1 <= c2 f به عبارتي ديگر، تابع از مرتبه Θ(f) است اگر متعلق به O(f) و Ω(f) باشد. با توجه به مطالب قبلي، مرتبه توابع چند جمله اي برابر با بزرگترين توان آنهاست: f = a0+ a1n + a2n2 +…+axnx ∈ Θ(nx) مثال : تعيين ثابت, n0 c1,c2 براي c1n2 <= n2 - 3n <= c2n2 n0 = 10 , c1 = 0.5 , c2 =1

کاربرد نمادهاي O، Ω، Θ در محاسبات در آناليز الگوريتمها گاهي براي سادگي در عبارات محاسباتي اين نماد ها را نيز استفاده مي کنيم. اين نمادها تعاريف مجموعه هاي خاصي هستند و کاربرد آنها در عبارات رياضي ابهاماتي پيش مي آورد. مثالf(n) = 2n2 + Θ(n) هدف از اين نوع بيان اين است که f(n) حاصل جمع 2n2 و يک تابع ديگر از مرتبه Θ(n) است. اين تابع مي تواند هر تابعي مانند 3n يا 10n - 13باشد. در اينجا ما به تعريف دقيق تابع مورد نظر اهميتي نمي دهيم و تنها مرتبه آن را مورد توجه قرار مي دهيم

الگوريتم Mergesort MERGE-SORT(A, p, r) 1 if p < r 2 then q ← ⌊(p + r)/2⌋ 3 MERGE-SORT(A, p, q) 4 MERGE-SORT(A, q + 1, r) 5 MERGE(A, p, q, r) هزينه 1 T(N/2) Θ(N) T(N) = 2 T(N/2) + Θ(N) T(1) = c

Little o Notation o(g(n)) = {f(n) :∀ c > 0, ∃n0 > 0 |0 ≤ f(n) < cg(n) ∀ n ≥ n0}. تفاوت با O بزرگ: در اين نمادگذاري، کران بالا تابع براي تمام مقادير ثابت c برقرار است. مثال: 2n ∈o(n2) f(n) ∈ o(g(n)) 

Little ω Notation ω (g(n)) = {f(n) :∀ c > 0, ∃n0 > 0 |f(n)> cg(n)>=0 ∀ n ≥ n0}. تفاوت با Ω بزرگ: در اين نمادگذاري، کران پايين تابع براي تمام مقادير ثابت c برقرار است. مثال: n2 ∈ ω (2n) f(n) ∈ ω (g(n)) 

روابط بين نمادهاي مختلف f(n) = Θ(g(n)) and g(n) = Θ(h(n))  f(n) = Θ(h(n)), f(n) = O(g(n)) and g(n) = O(h(n))f(n) = O(h(n)), f(n) = Ω(g(n)) and g(n) = Ω(h(n))f(n) = Ω(h(n)), f(n) = o(g(n)) and g(n) = o(h(n))f(n) = o(h(n)), f(n) = ω(g(n)) and g(n) = ω(h(n))f(n) = ω(h(n)). f(n)=Θ(f(n)),f(n)=O(f(n)),f(n)=Ω(f(n)). f(n) = Θ(g(n))  g(n) = Θ(f(n)). f(n) = O(g(n))g(n) = Ω(f(n)), f(n) = o(g(n))g(n) = ω(f(n)).

تعبير عددي نمادهاي معرفي شده f(n) = O(g(n))≈ a ≤ b, f(n) = Ω(g(n))≈ a ≥ b, f(n) = Θ(g(n))≈ a = b, f(n) = o(g(n))≈ a < b, f(n) = ω(g(n))≈ a > b.

رابطه بازگشتي f(n) = 3 f(n/2) + 1 f(n) = f(n-1) + f(n -2) f(n) = n f(n -1) معمولا، لازم است تابع هزينه اي را كه به صورت بازگشتي بيان شده، با يكي از نمادهاي مرتبه تابع مثل O نشان دهيم

حل روابط بازگشتي حل روابط بازگشتي، يعني تعريف تابع بازگشتي در قالب يك رابطه غير بازگشتي مانند چندجمله اي. روش جاگذاري: با تكيه بر دانسته ها و شم رياضي خود حدسي مي زنيد و سپس آن را ثابت مي كنيد بسط درخت بازگشت و استفاده از استقرا رياضي: تابع بازگشتي را تا چند جمله بسط مي دهيد؛ قانون حاکم بر دنباله را پيدا مي کنيد و جمع دنباله را محاسبه مي کنيد روش Master:‌اگر تابع هزينه به شکل T(n) = aT(n/b) + f(n) باشد، تابع بازگشتي از راههاي زير حل مي شود(e>0): f(n) = O( n logba - e) )  T(n) = Θ(n logb (a)) f(n) = Θ( n logba )  T(n) = Θ(n logba log n) f(n) = Ω( n logb (a-e) ), af (n/b) ≤ cf (n) , c < 1  T(n) = Θ(f(n)) مثال:T (n) = 9T(n/3) + n.  (case #1) : T(n) = Θ(n2)

روش جاگذاري لازم است حدس اوليه خوبي داشته باشيد حل را بطه f(n) = f(n -1) + f( n -2) به نظر مي آيد، f(n) = O(n) . براي بررسي اين حدس بايد ثابت كنيم: مي توان c و n0 يافت كه : f(n) <= cn , for n >= n0 f(n)= a1 (n – 1) + b1 + a2 (n – 2) + b2 f(n) = an + b <= cn if c > a  f(n) = O(n) لازم است حدس اوليه خوبي داشته باشيد

هزينه Merge Sort

اجراي توابع بازگشتي برنامه شامل مجموعه اي از دستوارت عادي و فراخواني دستورات ديگر است x = input ; x = x +1 ; y= sin(x) ;  function call outpt(y) ; يك تابع بازگشتي، خودش را فراخواني مي كند int factorial(int n){ if (n<=1) return 1; return n * factorial(n-1) ; }

فراخواني تابع هنگام فراخواني تابع: متغيرهاي محلي فعلي ذخيره مي شوند آدرس دستور بعد از تابع که محل ادامه اجراي برنامه پس از اجراي تابع است، ذخيره مي شود. کنترل به تابع موردنظر انتقال مي يابد تابع اجرا مي شود پس از پايان تابع، متغيرهاي محلي بازيابي شده و اجرا از آنجا ادامه پيدا مي کند. براي ذخيره متغيرها و آدرس بازگشت، از ساختمان داده ويژه اي به نام Call Stack استفاده مي شود. براي تسريع کارها، متغيرهاي محلي در Call Stack قرار مي گيرند

Call Stack هر برنامه تک پردازه اي (همه برنامه هاي معمولي) يک Call Stack دارد هر تابع بخشي از Call Stack‌را براي نگهداري متغيرهاي محلي خود استفاده مي کند. همچنين پارامترهاي تابع در اين بخش قرار مي گيرند. خواندن و نوشتن در Call Stackتنها از قسمت انتهايي آن صورت مي گيرد. اين محل با Top of Stack Pointer مشخص مي شود مثال:برنامه ترسيم مستطيل از تابع ترسيم خط استفاده مي کند: program draw_square ( int x1 int y1 int x2 int y2) draw_line(x1 y1 x1 y2) draw_line(x1 y1 x2 y1) draw_line(x1 y2 x2 y2) draw_line(x2 y1 x2 y2)

Call Stack برنامه نمونه

فراخواني تابع فراخواني تابع: پارامترهاي تابع در Call Stack قرار مي گيرند آدرس برگشت در Call Stack قرار مي گيرد تابع فراخوانده مي شود پس از فراخواني، اجراي برنامه از آدرسي که در بالاي Stack قرار دارد، ادامه مي يابد.

پروژه 1 - مقايسه روشهاي مرتب سازي تاکنون چندين روش مرتب سازي را بررسي کرده ايم. برنامه اي بنويسيد که : عدد صحيح مثبت N را بگيرد. آرايه اي از مقادير تصادفي به طول N بسازد. با استفاده از هرکدام از الگوريتمهايي که بررسي کرده ايم، آرايه را مرتب کند و زمان مرتب سازي را اندازه بگيرد. با استفاده از هرکدام از الگوريتمها، آرايه مرتب شده را يکبار ديگر مرتب کند. جدولي به شکل زير چاپ کند: N Algorithm Time #1 Time #2

پروژه 1 - ادامه time #1 زمان صرف شده براي مرتب سازي آرايه تصادفي است. time #2 زمان مرتب سازي براي آرايه مرتب شده ! است. برنامه شما با وارد کردن عدد 0 پايان مي يابد مهلت تحويل اين پروژه 31 فروردين 1386 است. هر نفر بايد پروژه خود را مستقلا انجام دهد.

پروژه 1- راهنمايي امکانات مورد نياز آرايه ها در Java توليد اعداد تصادفي در java اندازه گيري زمان اجرا در java براي اطلاع بيشتر و راهنمايي درباره زبان برنامه نويسي java به صفحه وب درس “ برنامه نويسي پيشرفته” در سايت زير مراجعه کنيد. http://muharram.googlepages.com

توليد اعداد تصادفي در java کلاس Random ‌براي توليد اعداد تصادفي استفاده مي شود: Random r = new Random() ; int x = r.nextInt( 5 ) ; // Returns 0 ,1, 2, 3 or 4 اين کلاس جزو بسته java.util است. بنابراين قبل از تعريف کلاس برنامه بايد دستور زير را بالاي برنامه خود بنويسيد: import java.util.*; براي اطلاع بيشتر فصل 6.9 کتاب Deitel & Deitel‌را مطالعه کنيد.

اندازه گيري زمان اجراي يک دستور تابع System.currentTimeMillis() زمان فعلي را با واحد ميلي ثانيه برمي گرداند. دستورات زير زمان اجراي يک بلاک را اندازه گيري مي کنند: int n0 = System.currentTimeMillis() ; for ( int k=0 ; k < 1000 ; k++ ) ; int n1 = System.currentTimeMillis() ; int d = n1 - n0 ; System.out.println(“Running time : “ + d ) ;