Presentation is loading. Please wait.

Presentation is loading. Please wait.

وحید حقيقت دوست دانشکده فنی و مهندسی دانشگاه شاهد

Similar presentations


Presentation on theme: "وحید حقيقت دوست دانشکده فنی و مهندسی دانشگاه شاهد"— Presentation transcript:

1 وحید حقيقت دوست دانشکده فنی و مهندسی دانشگاه شاهد
C++ ساختمان داده ها در Data Structure in C++ وحید حقيقت دوست دانشکده فنی و مهندسی دانشگاه شاهد

2 حسين ابراهيم زاده ي قلزم
شناسنامه منبع عنوان منبع: ساختمان داده ها در C++ مترجم: حسين ابراهيم زاده ي قلزم انتشارات: سيماي دانش منبع اصلي: data Structure in C++ Horowitz Ellis

3 فصل اول : مفاهيم اساسي اهداف آشنايي با سيکل زندگي نرم افزار
آشنايي با الگوريتم

4 مراحل مختلفي كه در چرخه نرم افزار هستند:
1-1 سيکل زندگي نرم افزار مراحل مختلفي كه در چرخه نرم افزار هستند: نيازمندي‌ها تجزيه و تحليل طراحي تعريف الگوريتم و برنامه سازي آن تست برنامه

5 1-1 سيکل زندگي نرم افزار-نيازمندي ها
نيازمنديها تمام پروژه هاي بزرگ برنامه نويسي با مجموعه اي از مشخصات و خصوصياتي که اهداف پروژه را مشخص مي کند، شروع مي شود. اين نيازمنديها اطلاعاتي را به برنامه نويسان مي دهند(ورودي) و نيز نتايجي را که بايد ايجاد گردد(خروجي) تعيين مي کنند.

6 1-1 سيکل زندگي نرم افزار- تحليل
تحليل: در اين مرحله مساله را به بخشهاي قابل کنترل تقسيم مي کنند. در تحليل يک سيستم دو شيوه وجود دارد : 1- شيوه از بالا به پايين:با هدف طراحي و توليد طرحي سطح بالا شروع ميشود كه در آن برنامه به بخشهاي قابل مديريت تقسيم ميشود. 2- شيوه از پايين به بالا: روش قديمي و غيرساختيافته است كه تاكيد آن بر مطالعه نكات حساس برنامه نويسي استوار است

7 1-1 سيکل زندگي نرم افزار- طراحي
اين مرحله ادامه کاري است که در مرحله تحليل انجام مي شود. طراح سيستم را از دو نقطه نظر بررسي مي کند: از نظرداده هاي مقصود(data objects) مورد نياز برنامه از نظر اعمالي که بر روي آنها انجام مي شود. اين ديدگاه به مشخصات الگوريتم ها و فرضيات خط مشي ها ي طراحي الگوريتم نياز دارد. ايجاد نوع داده مجرد

8 تعريف الگوريتم و کدنويسي ، بازبيني
1-1 سيکل زندگي نرم افزار- تعريف الگوريتم و کدنويسي ، بازبيني تعريف الگوريتم و کدنويسي: در اين مرحله، نمايشي براي داده هاي مقصد خود انتخاب مي شود و براي هر عملي که بر روي آنها انجام مي شود، الگوريتم نوشته مي شود. بازبيني: در اين مرحله درستي برنامه ها اثبات مي شود و برنامه ها با انواع داده هاي ورودي مختلف تست و خطاهاي برنامه رفع مي شود. جنبه هاي مهم بازبيني: اشکال زدايي تست اثبات درستي

9 1-1 نمودار سيکل زندگي نرم افزار
نيازمنديها تحليل طراحي الگوريتم و کدنويسي بازبيني

10 2-1 تعريف الگوريتم الگوريتم مجموعه اي از دستورالعمل ها است که
2-1 تعريف الگوريتم الگوريتم مجموعه اي از دستورالعمل ها است که اگر دنبال شوند، موجب انجام کار خاصي مي گردد

11 2-1 شرايط الگوريتم ورودي: يک الگوريتم مي تواند هيچ يا چندين کميت ورودي داشته باشدکه از محيط خارج تامين مي شود. خروجي: الگوريتم بايستي حداقل يک کميت به عنوان خروجي داشته باشد. قطعيت: هر دستورالعمل بايد واضح و بدون ابهام باشد. محدوديت: اگر دستورالعمل هاي يک الگوريتم را دنبال کنيم ،براي تمام حالات ، الگوريتم بايد پس از طي مراحل محدودي خاتمه يابد. کارايي: هر دستورالعمل بايد به گونه اي باشد که با استفاده از قلم و کاغذ بتوان آن را با دست نيز اجرا نمود.

12 2-1 مثالي از الگوريتم: الگوريتم مرتب سازي
2-1 مثالي از الگوريتم: الگوريتم مرتب سازي for (i=0 ; i<n ;i++) { Examine list [ i ] to list [n-1] and suppose that the smallest integer is at list [min]; Interchange list [ i ] and list [min];

13 2-1 الگوريتم بازگشتي تابع چيزي است که توسط تابع ديگر فراخوانده مي شود . توابع مي توانند خودشان را صدا بزنند (بازگشت مستقيم ) يا مي توانند توابعي که تابع فراخواننده را صدا ميزنند(بازگشتي غيرمستقيم) را احضار نمايند.

14 2-1 مثال الگوريتم جستجوي دودويي تكراري
الگوريتم جستجوي دودويي را بنويسيد. int binsearch ( int list [ ] ، int x ، int n ) { /* search sorted array list[0]… list [n-1] for x */ for(int left=0,right=n-1 ; left<=right ; ) int middle = ( left + right ) / 2 ; switch ( COMPARE (x , list [ middle ])) case ‘>’ : left = middle+1; break; case ‘<’ : right = middle-1; break; case ‘=’ : return middle; break; } return -1 ;

15 2-1 مثال الگوريتم جستجوي دودويي بازگشتي
int binsearch ( int list [ ] ، int x، int left ، int right ) { /* search list [0] <= list [1] <= … <=list [ n-1 ] for x Return its position if found . Otherwise return -1 */ if (left <= right ) int middle = ( left + right ) / 2 ; switch ( COMPARE (x , list [ middle ])) case ‘>’ : return binsearch ( list ، x ، middle +1 ، right ) ; case ‘=‘ : return middle ; case ‘<‘ : return binsearch ( list ، x ، left ، middle -1 ) ; } return -1 ;

16 2-1 الگوريتم بازگشتي مجموعه اي از دستورات مختلف كه عملي منطقي را انجام ميدهند ميتوانند در كنار هم قرارگرفته و تابع را تشكيل دهند نام تابع و پارامترهاي آن بعنوان دستوري جديد درنظر گرفته ميشوند با تعيين مشخصات ورودي-خروجي يك تابع ميتوانيم به تابع دسترسي پيدا كنيم از اينرو لازم نيست بدانيم كه تابع چگونه كارش را انجام ميدهد با داشتن چنين تصويري از تابع، ابتدا تابع احضار ميشود آنگاه اجرا شده و كنترل اجرا به مكان مربوطه در تابع احضار كننده باز ميگردد. توابع ميتوانند قبل از اتمام كارشان خودشان را احضار كنند (توانمندي لازم براي الگوريتم هاي بازگشتي)

17 مثال الگوريتم هاي بازگشتي
بيان معمولي بيان بازگشتي

18 مثال: برنامه مولد جايگشت را بصورت بازگشتي بنويسيد
void perm(char *a,const int k, const int n) { /* Generate all the permutations of a[k],…,a[ n-1 ] */ if (k == n-1 ) for(int i=0 ; i< n ; i++) cout<<a[i]<<“ “; cout<<endl; return; } for(int i=k; i < n ; i++) //interchange a[k] , a[i] Interchange(a,k,i); perm(a,k+1,n); //interchange a[k] , a[i] again to return the original configuration #include "iostream" #include "conio.h" using namespace std; void Interchange(char *a,int k,int i) { char temp = a[k]; a[k] = a[i]; a[i] = temp; } void perm(char *a,const int k, const int n) /* Generate all the permutations of a[k],…,a[ n-1 ] */ if (k == n-1 ) for(int i=0 ; i< n ; i++) cout<<a[i]<<" "; cout<<endl; return ; for(int i=k; i < n ; i++) //interchange a[k] , a[i] Interchange(a,k,i); perm(a,k+1,n); //interchange a[k] , a[i] again to return the original configuration void main() char test[]="ABCD"; perm(test,0,4); getch();

19 3-1 آرايه ، ساختار و نوع داده
مجموعه اي از عناصر از يک نوع داده مي باشد مجموعه اي از عناصر است که لزومي ندارد داده هاي آن يکسان باشد مجموعه اي از انواع داده (object) و عملکردهايي است که بر روي اين نوع داده ها عمل مي کنند آرايه ساختار نوع داده

20 3-1 نوع داده اي مجرد نوع داده مجرد يا انتزاعي (ADT) که شامل مشخصات داده ها و اعمالي که بر روي آنها انجام مي شود. جهت جداسازي پياده سازي و نمايش داده ها از يکديگر از ADT استفاده ميشود

21 4-1 تحليل نحوه اجراي يک برنامه
معيارهاي محک زدن يک برنامه آيا برنامه اهداف اصلي کاري را که مي خواهيم، انجام مي دهد؟ آيا برنامه درست کار مي کند؟ آيا برنامه مستند سازي شده است تا نحوه استفاده و طرز کار با آن مشخص شود؟ آيا برنامه براي ايجاد واحدهاي منطقي ، به طور موثر از توابع استفاده مي کند؟ آيا کد گذاري خوانا است؟ آيا برنامه از حافظه اصلي و کمکي به طور موثري استفاده مي کند؟ آيا زمان اجراي برنامه براي هدف شما قابل قبول است؟

22 4-1 ميزان حافظه يا پيچيدگي فضاي يک برنامه
ميزان حافظه يا پيچيدگي فضاي يک برنامه مقدارحافظه مورد نياز براي اجراي کامل يک برنامه است. ميزان يا پيچيدگي زمان يک برنامه مقدار زمان کامپيوتر است که براي اجراي کامل برنامه لازم است.

23 نيازمنديهاي فضاي متغير
4-1 ميزان حافظه فضاي مورد نياز يک برنامه شامل موارد زير است : اين مطلب به فضاي مورد نيازي که به تعداد و اندازه ورودي و خروجي بستگي ندارد، اشاره دارد. اين مورد شامل فضاي مورد نياز متغيرهاي ساخت يافته اي است که اندازه آن بستگي به نمونه I از مساله اي که حل مي شود، دارد. نيازمنديهاي فضاي ثابت نيازمنديهاي فضاي متغير

24 4-1 ميزان حافظه(ادامه) نيازمنديهاي فضاي کل نيازمنديهاي فضاي ثابت
نيازمنديهاي فضاي متغير

25 4-1 زمان T(P) برنامه زمان T(P) برنامه عبارتست ازمجموع زمان کامپايل و
زمان اجراي برنامه. زمان کامپايل مشابه اجزاي فضاي ثابت است زيرابه خصيصه هاي نمونه بستگي ندارد.

26 4-1 زمان T(P) برنامه براي محاسبه پيچيدگي زماني عبارتي به شكل زير براي محاسبه Tp(n) بدست مي‌آيد در عبارت فوق n تعداد مشخصه هاي موردي (مشخصه نمونه) است تعداد عمليات جمع تعداد عمليات ضرب تعداد عمليات تفريق

27 4-1 مرحله برنامه بجاي شمارش تعداد عمليات جمع و تفريق و ضرب براي حل مساله با n مشخصه موردي تنها تعداد مراحل برنامه را ميشماريم

28 يک مرحله برنامه ، قسمت با معني برنامه است
4-1 مرحله برنامه يک مرحله برنامه ، قسمت با معني برنامه است ( از لحاظ معنايي يا نحوي) که زمان اجراي آن مستقل از خصيصه هاي نمونه باشد تمامي دستور فوق يك مرحله در نظر گرفته ميشود

29 Iterative function to sum a list of numbers
Performance Analysis Iterative function to sum a list of numbers

30 4-1علامت گذاري مجانبي(O، Ω ،Θ)(Asymptotic)
انگيزه براي تعيين تعداد مراحل، قابليت مقايسه پيچيدگي دو برنامه که يک تابع را اجرا مي کنند و پيش بيني رشد و افزايش زمان اجرا با تغيير مشخصه هاي موردي مي باشد. f(n)=O(g(n)) (f(n) از اُردر g(n)) است اگر و فقط اگر به ازاي مقادير ثابت n0 و c براي تمامي مقادير n ≥ n0 مقدار f(n) کمتر يا مساوي cg(n) باشد

31 4-1علامت گذاري مجانبي(O، Ω ،Θ)(Asymptotic)
O(n) : يک تابع خطي ناميده مي شود O(n2) : تابع درجه دو ناميده مي شود قضيه : اگر باشد، بنابراين خواهد بود

32 رابطه بالا نشان ميدهد كه در صورتي كه براي يك مساله راه حلي با پيچيدگي O(n) داشته باشيم رشد آن بسيار كمتر از راه حلي است كه پيچيدگي آن O(n2) است.

33 4-1 علامت گذاري مجانبي(O، Ω ،Θ)(Asymptotic)
تعريف:]امگا [: f(n)=Ω(g(n)) مي باشد(خوانده مي شود f(n) امگاي g(n) اگر و فقط اگر به ازاي مقادير ثابت مثبت c و n0 ، f(n)≥cg(n) باشد(براي تمام مقادير n به شرطي که n≥n0 باشد) قضيه : اگر باشد، و بنابراين خواهد بود

34 4-1 علامت گذاري مجانبي(O، Ω ،Θ)(Asymptotic)
تعريف تتا[Theta] : f(n) = θ(g(n)مي باشد (خوانده مي شود f(n) تتاي (g(n) اگر و فقط اگر به ازاي مقادير ثابت c1 و c2 و n0، c1g(n)<= f(n) <= c2g(n) وجود داشته باشد (براي تمام مقاديرn>=n0) نشانه گذاري تتا از دو نشانه گذاري ذکر شده “ big oh “ و امگا دقيق تر مي باشد . f(n) = Θ(g(n)) مي باشد اگر و فقط اگر g(n) هم به عنوان کرانه بالا و هم به عنوان کرانه پايين در f(n) باشد.

35 4-1 علامت گذاري مجانبي(O، Ω ،Θ)(Asymptotic)
قضيه : اگر باشد، و بنابراين خواهد بود

36 4-1 مثال(پيچيدگي جمع ماتريس ها)
Asymptotic complexity Statement Θ(rows) Θ(rows.cols) Void add (int a []MAX-SIZE…) { int i،j; for(i=0;i<rows ; i++) for(j=0 ; j<cols ; j++) C[i][j]=a[i][j]+b[i][j]; } Total

37 Performance Analysis Theorem 1.2:
If f(n) = amnm+…+a1n+a0, then f(n) = O(nm). Theorem 1.3: If f(n) = amnm+…+a1n+a0 and am > 0, then f(n) = (nm). Theorem 1.4: If f(n) = amnm+…+a1n+a0 and am > 0, then f(n) = (nm).

38 Examples f(n) = 3n+2 3n + 2 <= 4n, for all n >= 2  3n + 2 =  (n) 3n + 2 >= 3n, for all n >= 1  3n + 2 =  (n) 3n <= 3n + 2 <= 4n, for all n >= 2  3n + 2 =  (n) f(n) = 10n2+4n+2 10n2+4n+2 <= 11n2, for all n >= 5  10n2+4n+2 =  (n2) 10n2+4n+2 >= n2, for all n >= 1  10n2+4n+2 =  (n2) n2 <= 10n2+4n+2 <= 11n2, for all n >= 5  10n2+4n+2 =  (n2) 100n+6=O(n) /* 100n+6101n for n10 */ 10n2+4n+2=O(n2) /* 10n2+4n+211n2 for n5 */ 6*2n+n2=O(2n) /* 6*2n+n2 7*2n for n4 */

39 نمايش ميزان رشد توابع با توجه به تغيير مشخصه ورودي

40 Performance Analysis

41


Download ppt "وحید حقيقت دوست دانشکده فنی و مهندسی دانشگاه شاهد"

Similar presentations


Ads by Google