1 / 38

CHUONG 7 GII THUT QUY

2. M?c ti

Audrey
Download Presentation

CHUONG 7 GII THUT QUY

An Image/Link below is provided (as is) to download presentation Download Policy: Content on the Website is provided to you AS IS for your information and personal use and may not be sold / licensed / shared on other websites without getting consent from its author. Content is provided to you AS IS for your information and personal use only. Download presentation by click this link. While downloading, if for some reason you are not able to download a presentation, the publisher may have deleted the file from their server. During download, if you can't get a presentation, the file might be deleted by the publisher.

E N D

Presentation Transcript


    1. CHUONG 7 GI?I THU?T Ð? QUY

    2. 2

    3. 3 Ôn t?p Stack: C?u trúc (thu?ng là m?ng) có co ch? x? lý: vào sau ra tru?c. Queue: C?u trúc (thu?ng là m?ng) có co ch? x? lý: vào tru?c ra tru?c. Stack và Queue du?c g?i là danh sách h?n ch?. Các tác v? trên nhóm tr? nói chung: Ki?m tra tr?ng, ki?m tra d?y, thêm 1 ph?n t?, xóa 1 ph?n t?.

    4. 4 7.1- Ð? quy là gì (Recursion) Ð?nh nghia tu?ng minh: Gi?i thích khái ni?m m?i b?ng nh?ng khái ni?m dã có. Ngu?i = Ð?ng v?t c?p cao. Ð?nh nghia lòng vòng: Gi?i thích 1 khái ni?m b?ng chính khái ni?m dó. Ð? quy: Ðua ra 1 d?nh nghia có s? d?ng chính khái ni?m dang c?n d?nh nghia( quay v? ). Ngu?i = con c?a hai ngu?i khác.

    5. 5 Ð? quy là gì?... Con ngu?i hi?u du?c d?nh nghia d? quy vì d? quy có ch?n (di?u ki?n biên, di?u ki?n suy bi?n) – có th? là biên ng?m d?nh. Ngu?i = con c?a hai ngu?i khác ? Ng?m hi?u là có 2 ngu?i d?u tiên. Thu m?c = các thu m?c con + các t?p tin ? Ng?m hi?u: Hi?n nhiên t?n t?i thu m?c g?c là c? ? dia.

    6. 6 7.2- Ki?u d? li?u d? quy M?t ngu?i du?c mô t? b?ng: tên, nam sinh, cha (m?t ngu?i khác), m? (m?t ngu?i khác). struct NGUOI { char Ten[51]; int namsinh; NGUOI cha; NGUOI me; };

    7. 7 Ki?u d? li?u d? quy... S?a l?i: struct NGUOI { char Ten[51]; int namsinh; NGUOI* pCha; NGUOI* pMe; }; NGUOI x;

    8. 8 7.3- Tác v? d? quy Có th? di?n d?t nhi?u tác v? hu?ng d? quy. 1+2+3+...+ (n-2) + (n-1) + n C?ng( 1 t?i n) = n + C?ng (1 t?i n-1) Ði?u ki?n biên là di?u ki?n ngung không d? quy n?a. Ði?u ki?n biên: C?ng (1 t?i 1) là 1 C?ng (1 t?i n) = 1, n=1 n + C?ng (1 t?i n-1)

    9. 9 7.4- Cách vi?t hàm d? quy Ð?nh nghia tác v? d? quy theo ngôn ng? t? nhiên th? nào thì hàm cung vi?t nhu th?. Thí d?: n! = 1*2*3*4*5*... * n n! = 1, n<=1 n* (n-1)!

    10. 10 Cách vi?t hàm d? quy... n! = 1, n<=1 n* (n-1)!

    11. 11 Luy?n t?p vi?t hàm d? quy Tìm tr? ph?n t? th? n c?a 1 c?p s? c?ng có s? h?ng d?u là a, công sai là r Un = a, n=1 r + Un-1 Tìm tr? ph?n t? th? n c?a 1 c?p s? nhân có s? h?ng d?u là a, công b?i là q Un = a, n=1 q*Un-1

    12. 12 Luy?n t?p vi?t hàm d? quy Xu?t bi?u di?n nh? phân c?a 1 s? nguyên duong. 13 ? 1101

    13. 13 Luy?n t?p vi?t hàm d? quy...

    14. 14 7.5- Phân lo?i hàm d? quy Tùy thu?c cách di?n d?t tác v? d? quy mà có các lo?i d? quy sau. Ð? quy tuy?n tính. Ð? quy nh? phân. Ð? quy phi tuy?n Ð? quy h? tuong.

    15. 15 7.7.1-Ð? quy tuy?n tính Thân hàm g?i 1 l?n chính nó Un = a , n=1 ( tr? th? n c?a c?p s? c?ng) r + Un-1 , n>1 double U (int n, double a, double r) { if (n==1) return a; return r + U(n-1,a,r); }

    16. 16 7.5.2-Ð? quy nh? phân Thân hàm g?i 2 l?n chính nó. Chu?i s? Fibonacci: 1 1 2 3 5 8 13 ... Un = 1, n=1,2 Un-2 + Un-1 , n>2 long Fibo (int n) { if (n<=2) return 1; return Fibo(n-2) + Fibo(n-1); }

    17. 17 7.5.3-Ð? quy phi tuy?n Thân hàm l?p g?i 1 s? l?n chính nó Un = n , n <6 Un-5 + Un-4 + Un-3 + Un-2 + Un-1 ,n >6 long U ( int n) { if (n<6) return n; long S= 0; for (int i = 5; i>0; i--) S+= U(n-i); return S; }

    18. 18 7.5.4-Ð? quy h? tuong 2 hàm d? quy g?i nhau Un = n , n<5 Un-1 + Gn-2 , n>=5 Gn = n-3 , n<8 Un-1 + Gn-2 , n>8

    19. 19 7.6- K? thu?t tìm gi?i thu?t d? quy Thông s? hóa bài toán. Tìm các di?u ki?n biên(ch?n), tìm gi?i thu?t cho các tình hu?ng này. Tìm gi?i thu?t t?ng quát theo hu?ng d? quy lui d?n v? tình hu?ng b? ch?n.

    20. 20 Tính t?ng 1 m?ng a, n ph?n t? Thông s? hóa: int*a, int n Ði?u ki?n biên: M?ng 0 ph?n t? thì t?ng b?ng 0. Gi?i thu?t chung: Sum(a,n) = a[0] + a[1] + a[2] + ... + a[n-2] +a[n-1] Sum(a,n-1) Sum (a,n) = 0 , n=0 a[n-1] + Sum(a, n-1) V?i các thu?t toán d? quy trên m?ng, ta nên gi?m d?n s? ph?n t? c?a m?ng.

    21. 21 Tìm tr? l?n nh?t c?a m?ng a, n ph?n t? Thông s? hóa: int*a, int n Ði?u ki?n biên: M?ng 1 ph?n t? thì tr? l?n nh?t là a[0]. Gi?i thu?t chung: Max(a,n) = a[0] , a[1] , a[2] , ... , a[n-2] , a[n-1] Max(a,n-1) Max (a,n) = a[0] , n=1 a[n-1] > Max(a, n-1)? a[n-1] : Max(a,n-1) Thu?t toán d? quy tìm tr? nh? nh?t c?a m?ng?

    22. 22 Xu?t ngu?c 1 chu?i S= “QWERT” ? TREWQ

    23. 23 Bài toán xu?t ngu?c 1 chu?i

    24. 24 7.7- Bài toán Tháp Hà N?i Tham kh?o giáo trình K? thu?t LT Nâng cao, Tr?n Hoàng Th?, Ð?i h?c Ðà L?t, trang 17, file .pdf dã g?i.

    25. 25 Bài toán Tháp Hà N?i

    26. 26 Tháp Hà N?i...

    27. 27 7.8- Cách th?c thi 1 hàm d? quy Xét hàm tính giai th?a c?a 5

    28. 28 Cách th?c thi 1 hàm d? quy Xét hàm tính giai th?a c?a 5

    29. 29 Cách th?c thi 1 hàm d? quy Xét hàm tính giai th?a c?a 5

    30. 30 Cách th?c thi 1 hàm d? quy Xét hàm tính giai th?a c?a 5

    31. 31 Cách th?c thi 1 hàm d? quy Xét hàm tính giai th?a c?a 5

    32. 32 Cách th?c thi 1 hàm d? quy Xét hàm tính giai th?a c?a 5

    33. 33 Cách th?c thi 1 hàm d? quy Xét hàm tính giai th?a c?a 5

    34. 34 7.9- Nh?n xét v? hàm d? quy

    35. 35 7.10- Kh? d? quy Là quá trình chuy?n d?i 1 gi?i thu?t d? quy thành gi?i thu?t không d? quy. Chua có gi?i pháp cho vi?c chuy?n d?i này m?t cách t?ng quát. Cách ti?p c?n: Dùng quan di?m d? quy d? tìm gi?i thu?t cho bài toán. Mã hóa gi?i thu?t d? quy. Kh? d? quy d? có gi?i thu?t không-d?-quy.

    36. 36 7.10.1- Kh? d? quy b?ng vòng l?p Ý tu?ng: Luu l?i các tr? c?a các l?n tính toán tru?c làm d? li?u cho vi?c tính toán c?a l?n sau. Ði t? di?u ki?n biên di t?i di?u ki?n k?t thúc.

    37. 37 Thí d?: Hàm tính giai th?a c?a n long GiaiThua( int n) { if (n<2) return 1; return n * GiaiThua(n-1); }

    38. 38 Thí d? hàm tính tr? th? n c?a dãy Fibonacci: 1 1 2 3 5 8... long Fibo(int n) { if (n<=2) return 1; // hai ch?n return Fibo(n-2) + Fibo (n-1); }

    39. 39 7.10.2- Kh? d? quy b?ng stack Kh?i t?o stack v?i s? ph?n t? phù h?p. Ðua b? tham s? d?u vào stack. Khi Stack không tr?ng { - L?y b? tham s? ra kh?i stack; - X? lý các tác v? co b?n ?ng v?i tham s? này. N?u g?p 1 tác v? d? quy thì l?i dua b? tham s? c?a tác v? d? quy tuong ?ng vào stack. }

    40. 40 Bài toán tháp Hà N?i kh?-d? quy

    41. 41 Tóm t?t Hàm d? quy là hàm mà trong thân hàm l?i g?i chính nó. Hàm d? quy kém hi?u q?a vì: t?n b? nh? va g?i hàm qúa nhi?u l?n. Tuy nhiên vi?t hàm d? quy r?t ng?n g?n. Vòng l?p và stack là nh?ng k? thu?t giúp kh? gi?i thu?t d? quy.

    42. 42 Bài t?p Vi?t chuong trình xu?t n tr? d?u tiên c?a 1 c?p s? c?ng có s? h?ng d?u là a (nh?p t? bàn phím), công sai r (nh?p t? bàn phím). S? d?ng k? thu?t d? quy d? xây d?ng hàm tính tr? th? i c?a 1 c?p s? c?ng này. Dùng k? thu?t d? quy d? gi?i phuong trình f(x) trong kho?ng [a,b] v?i sai s? epsilon. G?i px là pointer c?a nghi?m if (f(a).f(b)>0) return NULL (không có nghi?m) else if (b-a <= epsilon) return &a; else { c=(b+a)/2) ; if (f(a).f(c)<=0) return Tìm nghi?m trong do?n [a,c]; else return Tìm nghi?m trong do?n [c,b]; }

    43. 43 Bài t?p Vi?t chuong trình nh?p 1 m?ng s? int, nh?p 1 tr? x, tìm v? trí có x cu?i cùng trong m?ng. Dùng k? thu?t d? quy d? tìm v? trí này. Tìm x trong a[], n : -1 n?u n<0 n-1 n?u a[n-1]=x Tìm x trong a, n-1 Vi?t chuong trình nh?p 1 ma tr?n vuông các s? int , nh?p 1 tr? x. Tìm v? trí <dòng,c?t> có x dùng k? thu?t d? quy.

More Related