Bài giảng Programming technique: Chương 4 - Lương Mạnh Bá
Số trang: 66
Loại file: pdf
Dung lượng: 1.04 MB
Lượt xem: 13
Lượt tải: 0
Xem trước 7 trang đầu tiên của tài liệu này:
Thông tin tài liệu:
Bài giảng "Programming technique - Chương 4: Một số cấu trúc dữ liệu và giải thuật căn bản" trình bày các nội dung cảu phần "Đệ qui" bao gồm các nội dung: Khái niệm về đệ qui, các loại đệ qui, mô tả đệ qui các cấu trúc dữ liệu, mô tả đệ qui các giải thuật, các dạng đệ qui đơn giản thường gặp. Mời các bạn cùng tham khảo nội dung chi tiết.
Nội dung trích xuất từ tài liệu:
Bài giảng Programming technique: Chương 4 - Lương Mạnh Bá Chương 4 Một số cấu trúc dữ liệu và giải thuật căn bảnPhần 4.1 Đệ qui (4LT – 2BT) SE-SoICT KTLT 4-1.1Last update 9-2010 1. Đệ qui 1.1 Khái niệm về đệ qui 1.2 Các loại đệ qui 1.3 Mô tả đệ qui các cấu trúc dữ liệu 1.4 Mô tả đệ qui các giải thuật 1.5 Các dạng đệ qui đơn giản thường gặpLast update 8-2010 SE-SoICT KTLT 4-1.2 Khái niệm Đ/n đệ qui Một mô tả/định nghĩa về một đối tượng gọi là đệ qui nếu trong mô tả/định nghĩa đó ta lại sử dụng chính đối tượng này. Tức là mô tả đối tượng qua chính nó. Mô tả đệ qui tập sốtựnhiên N : Số1 là sốtựnhiên ( 1 -N) Sốtựnhiên bằng sốtựnhiên cộng 1. Mô tả đệ qui cấu trúc ds(list) kiểu T : Cấu trúc rỗng là một ds kiểu T. Ghép nối một thành phần kiểu T(nút kiểu T ) với một ds kiểu T ta có một ds kiểu T. Mô tả đệ qui cây gia phả: Gia phả của một người bao gồm người đó và gia phả của cha và gia phả của mẹLast update 8-2010 SE-SoICT KTLT 4-1.3 Ví dụ Định nghĩa không đệ qui n!: n! = n * (n-1) * … * 1 Định nghĩa đệ qui: n! = 1 nếu n=0 n * (n-1)! nếu n>0 Mã C++: int factorial(int n) { if (n==0) return 1; else return (n * factorial(n - 1)); } Mô tả đệ qui thủ tục sắp tăng dãy a[m:n] ( dãy a[m], a[m+1], . . . , a[n] ) bằng phương pháp Sort_Merge (SM): SM (a[m:n]) ≡Merge ( SM(a[m : (n+m) div 2]) , SM (a[(n+m) div 2 +1 : n] ) Với : SM (a[x : x]) là thao tác rỗng (không làm gì cả). Merge (a[x : y] , a[(y+1) : z]) là thủ tục trộn 2 dãy tăng a [x : y] , a[(y+1) : z] để được một dãy a[x : z] tăng.Last update 8-2010 SE-SoICT KTLT 4-1.4 Mô tả đệ qui gồm hai phần Phần neo: trường hợp suy biến (cá biệt) của đối tượng Vídụ: 1 là sốtựnhiên, cấu trúc rỗng là danh sách kiểu T, 0 ! = 1,… Phần qui nạp: mô tả đối tượng (giải thuật) thông qua chính đối tượng (giải thuật ) đó một cách trực tiếp hoặc gián tiếp. Vídụ: n! = n * (n –1) ! SM (a[m:n]) ≡Merge (SM (a[m:( m+n) div 2] , SM (a[(m+n) div 2 +1 : n]) ) Đệ qui gồm hai loại: Đệ qui trực tiếp Đệ qui gián tiếpLast update 8-2010 SE-SoICT KTLT 4-1.5 Giải thuật đệ qui Nếu ta có 1 lời giải S cho bài toán P, ta lại sử dụng lời giải ấy cho bài toán P’ giống P nhưng kích cỡ nhỏ hơn thì lời giải S đó gọi là lời giải đệ qui. Biểu diễn giải thuật đệ qui P P[ S , P ] Điều kiện dừng Biểu diễn tổng quát P if B P[ S , P ] hoặc P P[ S , if B P ] Chương trình con đệ qui: Khi ta cài đặt giải thuật đệ qui, ta có chương trình đệ qui (tự nó gọi lại chính nó: P =>P’) –Hàm đệ qui –Thủ tục đệ quiLast update 8-2010 SE-SoICT KTLT 4-1.6 Mô tả đệ qui các giải thuật Dãy số Fibonaci(FIBO) :{ FIBO (n) } ≡1 ,1 , 2 , 3 , 5 , 8 , 13 , 21 , 34 , 55 , 89 , 144 , 233 , 377 , . . . FIBO(0 ) = FIBO (1 ) = 1 ; FIBO(n ) = FIBO (n -1 ) + FIBO ( n -2 ) ; với n > = 2 Giải thuật đệ qui tính FIBO ( n ) là: FIBO(n) if ((n = 0 ) or ( n = 1 )) return 1 ; else return ( FIBO (n -1) + FIBO (n -2)) ;Last update 8-2010 SE-SoICT KTLT 4-1.7 Các dạng đệ qui đơn giản thường gặp Đệqui tuyến tính: là dạng đệqui trực tiếp đơn giản nhất có dạng P () { If (B) thực hiện S; else { thực hiện S* ; gọi P } } Với S , S* là các thao tác không đệqui . Vídụ:Hàm FAC(n) tính số hạng n của dãy n! Dạng hàm trong ngôn ngữ mã giả: { Nếu n = 0 thì FAC = 1 ; /* trường hợp neo*/ Ngược lại FAC = n*FAC(n-1) } Dạng hàm trong C++ : int FAC( int n ) { if ( n == 0 ) return 1 ; else return ( n * FAC(n-1 )) ; }Last update 8-2010 SE-SoICT KTLT 4-1.8 Thi hành hàm tính giai thừa factorial (3) n=3 … factorial (2) n=2 3*factorial(2) … factorial (1)6 ...
Nội dung trích xuất từ tài liệu:
Bài giảng Programming technique: Chương 4 - Lương Mạnh Bá Chương 4 Một số cấu trúc dữ liệu và giải thuật căn bảnPhần 4.1 Đệ qui (4LT – 2BT) SE-SoICT KTLT 4-1.1Last update 9-2010 1. Đệ qui 1.1 Khái niệm về đệ qui 1.2 Các loại đệ qui 1.3 Mô tả đệ qui các cấu trúc dữ liệu 1.4 Mô tả đệ qui các giải thuật 1.5 Các dạng đệ qui đơn giản thường gặpLast update 8-2010 SE-SoICT KTLT 4-1.2 Khái niệm Đ/n đệ qui Một mô tả/định nghĩa về một đối tượng gọi là đệ qui nếu trong mô tả/định nghĩa đó ta lại sử dụng chính đối tượng này. Tức là mô tả đối tượng qua chính nó. Mô tả đệ qui tập sốtựnhiên N : Số1 là sốtựnhiên ( 1 -N) Sốtựnhiên bằng sốtựnhiên cộng 1. Mô tả đệ qui cấu trúc ds(list) kiểu T : Cấu trúc rỗng là một ds kiểu T. Ghép nối một thành phần kiểu T(nút kiểu T ) với một ds kiểu T ta có một ds kiểu T. Mô tả đệ qui cây gia phả: Gia phả của một người bao gồm người đó và gia phả của cha và gia phả của mẹLast update 8-2010 SE-SoICT KTLT 4-1.3 Ví dụ Định nghĩa không đệ qui n!: n! = n * (n-1) * … * 1 Định nghĩa đệ qui: n! = 1 nếu n=0 n * (n-1)! nếu n>0 Mã C++: int factorial(int n) { if (n==0) return 1; else return (n * factorial(n - 1)); } Mô tả đệ qui thủ tục sắp tăng dãy a[m:n] ( dãy a[m], a[m+1], . . . , a[n] ) bằng phương pháp Sort_Merge (SM): SM (a[m:n]) ≡Merge ( SM(a[m : (n+m) div 2]) , SM (a[(n+m) div 2 +1 : n] ) Với : SM (a[x : x]) là thao tác rỗng (không làm gì cả). Merge (a[x : y] , a[(y+1) : z]) là thủ tục trộn 2 dãy tăng a [x : y] , a[(y+1) : z] để được một dãy a[x : z] tăng.Last update 8-2010 SE-SoICT KTLT 4-1.4 Mô tả đệ qui gồm hai phần Phần neo: trường hợp suy biến (cá biệt) của đối tượng Vídụ: 1 là sốtựnhiên, cấu trúc rỗng là danh sách kiểu T, 0 ! = 1,… Phần qui nạp: mô tả đối tượng (giải thuật) thông qua chính đối tượng (giải thuật ) đó một cách trực tiếp hoặc gián tiếp. Vídụ: n! = n * (n –1) ! SM (a[m:n]) ≡Merge (SM (a[m:( m+n) div 2] , SM (a[(m+n) div 2 +1 : n]) ) Đệ qui gồm hai loại: Đệ qui trực tiếp Đệ qui gián tiếpLast update 8-2010 SE-SoICT KTLT 4-1.5 Giải thuật đệ qui Nếu ta có 1 lời giải S cho bài toán P, ta lại sử dụng lời giải ấy cho bài toán P’ giống P nhưng kích cỡ nhỏ hơn thì lời giải S đó gọi là lời giải đệ qui. Biểu diễn giải thuật đệ qui P P[ S , P ] Điều kiện dừng Biểu diễn tổng quát P if B P[ S , P ] hoặc P P[ S , if B P ] Chương trình con đệ qui: Khi ta cài đặt giải thuật đệ qui, ta có chương trình đệ qui (tự nó gọi lại chính nó: P =>P’) –Hàm đệ qui –Thủ tục đệ quiLast update 8-2010 SE-SoICT KTLT 4-1.6 Mô tả đệ qui các giải thuật Dãy số Fibonaci(FIBO) :{ FIBO (n) } ≡1 ,1 , 2 , 3 , 5 , 8 , 13 , 21 , 34 , 55 , 89 , 144 , 233 , 377 , . . . FIBO(0 ) = FIBO (1 ) = 1 ; FIBO(n ) = FIBO (n -1 ) + FIBO ( n -2 ) ; với n > = 2 Giải thuật đệ qui tính FIBO ( n ) là: FIBO(n) if ((n = 0 ) or ( n = 1 )) return 1 ; else return ( FIBO (n -1) + FIBO (n -2)) ;Last update 8-2010 SE-SoICT KTLT 4-1.7 Các dạng đệ qui đơn giản thường gặp Đệqui tuyến tính: là dạng đệqui trực tiếp đơn giản nhất có dạng P () { If (B) thực hiện S; else { thực hiện S* ; gọi P } } Với S , S* là các thao tác không đệqui . Vídụ:Hàm FAC(n) tính số hạng n của dãy n! Dạng hàm trong ngôn ngữ mã giả: { Nếu n = 0 thì FAC = 1 ; /* trường hợp neo*/ Ngược lại FAC = n*FAC(n-1) } Dạng hàm trong C++ : int FAC( int n ) { if ( n == 0 ) return 1 ; else return ( n * FAC(n-1 )) ; }Last update 8-2010 SE-SoICT KTLT 4-1.8 Thi hành hàm tính giai thừa factorial (3) n=3 … factorial (2) n=2 3*factorial(2) … factorial (1)6 ...
Tìm kiếm theo từ khóa liên quan:
Bài giảng Programming technique Kỹ thuật lập trình Loại đệ qui Mô tả đệ qui Cấu trúc dữ liệu Mô tả đệ qui các giải thuậtGợi ý tài liệu liên quan:
-
Đề cương chi tiết học phần Cấu trúc dữ liệu và giải thuật (Data structures and algorithms)
10 trang 312 0 0 -
Kỹ thuật lập trình trên Visual Basic 2005
148 trang 259 0 0 -
NGÂN HÀNG CÂU HỎI TRẮC NGHIỆM THIẾT KẾ WEB
8 trang 202 0 0 -
Giới thiệu môn học Ngôn ngữ lập trình C++
5 trang 191 0 0 -
Bài giảng Nhập môn về lập trình - Chương 1: Giới thiệu về máy tính và lập trình
30 trang 160 0 0 -
Giải thuật và cấu trúc dữ liệu
305 trang 156 0 0 -
Luận văn: Nghiên cứu kỹ thuật giấu tin trong ảnh Gif
33 trang 151 0 0 -
Bài giảng Phân tích thiết kế phần mềm: Chương 1 - Trường ĐH Ngoại ngữ - Tin học TP.HCM
64 trang 149 0 0 -
Tập bài giảng Thực hành kỹ thuật lập trình
303 trang 142 0 0 -
Giáo trình Cấu trúc dữ liệu và thuật toán (Tái bản): Phần 1
152 trang 138 0 0