1. Trang chủ
  2. » Giáo Dục - Đào Tạo

ĐỆ QUY (kỹ THUẬT lập TRÌNH SLIDE)

74 71 0

Đang tải... (xem toàn văn)

Tài liệu hạn chế xem trước, để xem đầy đủ mời bạn chọn Tải xuống

THÔNG TIN TÀI LIỆU

Cấu trúc

  • Kỹ thuật lập trình

  • 1. Mô tả đệ qui

  • Khái niệm đệ qui

  • Ví dụ

  • PowerPoint Presentation

  • Giải thuật đệ qui

  • Mô tả đệqui các giải thuật

  • Các dạng đệ qui đơn giản thường gặp

  • Thi hành hàm tính giai thừa

  • Trạng thái hệ thống khi thi hành hàm tính giai thừa

  • Các dạng đệ qui đơn giản thường gặp (tiếp)

  • Slide 12

  • 3 bước để tìm giải thuật đệqui

  • 3 bước (tt)

  • Một số bài toán giải bằng đệqui

  • Bài toán Tháp Hà nội

  • Bài toán Tháp Hà nội

  • Slide 18

  • Slide 19

  • Bài toán Tháp Hà nội – Mã C++

  • Bài toán Tháp Hà nội – Thi hành

  • Bài toán Tháp Hà nội – Cây đệ qui

  • Bài toán chia phần thưởng

  • Slide 24

  • Slide 25

  • Slide 26

  • Bài toán tìm tất cả hoán vị của một dãy các phần tử

  • Phân rã bài toán

  • Slide 29

  • Slide 30

  • KHỬ ĐỆQUY

  • Cơ chế thực hiện đệqui

  • Slide 33

  • Slide 34

  • Slide 35

  • Slide 36

  • Slide 37

  • Slide 38

  • Slide 39

  • Tổng quan về khử đệqui

  • 1.Khử đệ qui bằng vòng lặp

  • Slide 42

  • Slide 43

  • Slide 44

  • 2.Các thủ tục đệ qui dạng đệ qui đuôi

  • Slide 46

  • Slide 47

  • Slide 48

  • Slide 49

  • 3 Khử đệ qui bang Stack

  • Slide 51

  • Slide 52

  • Slide 53

  • Slide 54

  • Slide 55

  • Slide 56

  • Slide 57

  • Bài tập

  • Thiết kế các giải thuật đệ qui

  • Cây thi hành và stack hệ thống

  • Đệ qui đuôi (tail recursion)

  • Khử đệ qui đuôi hàm giai thừa

  • Dãy số Fibonacci

  • Dãy số Fibonacci – Cây thi hành

  • Dãy số Fibonacci – Khử đệ qui

  • Bài toán 8 con Hậu

  • Bài toán 4 con Hậu

  • Bài toán 8 con Hậu – Giải thuật

  • Bài toán 8 con Hậu – Thiết kế phương thức

  • Bài toán 8 con Hậu – Thiết kế dữ liệu đơn giản

  • Bài toán 8 con Hậu – Mã C++

  • Bài toán 8 con Hậu – Góc nhìn khác

  • Bài toán 8 con Hậu – Thiết kế mới

  • Bài toán 8 con Hậu – Mã C++ mới

Nội dung

Kỹ thuật lập trình Chương 4: Một số cấu trúc liệu giải thuật Đệ qui Mô tả đệ qui 1.1 Khái niệm đệqui 1.2 Các loại đệqui 1.3 Mô tả đệqui cấu trúc dữliệu 1.4 Mô tả đệqui giải thuật 1.5 Các dạng đệ qui đơn giản thường gặp Khái niệm đệ qui Mơ tả mang tính đệ qui đối tượng mơ tả theo cách phân tích đối tượng thành nhiều thành phần mà số thành phần có thành phần mang tính chất đối tượng mô tả Tức mô tả đối tượng qua Mơ tả đệ quy tập sốtựnhiên N : Số1 sốtựnhiên ( -N) Sốtựnhiên sốtựnhiên cộng Mô tả đệ quy cấu trúc ds(list) kiểu T : Cấu trúc rỗng ds kiểu T Ghép nối thành phần kiểu T(nút kiểu T ) với ds kiểu T ta có ds kiểu T Mô tả đệquy gia phả: Gia phả người bao gồm người gia phả cha gia phả mẹ Ví dụ Định nghĩa không đệ qui n!: n! = n * (n-1) * … * Định nghĩa đệ qui: n! = 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ả đệ quy thủ tục tăng dãy a[m:n] ( dãy a[m], a[m+1], , a[n] ) phương pháp Sort_Merge (SM): SM (a[m:n]) ≡Merge ( SM(a[m : (n+m) div 2]) , SM (a[(n+m) div +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 dãy tăng a [x : y] , a[(y+1) : z] để dãy a[x : z] tăng Mô tả đệqui gồm hai phần Phần neo:trường hợp suy biến đối tượng Vídụ: sốtựnhiên, cấu trúc rỗng ds kiểu T, ! = , SM (a[x:x]) thao tác rỗng Phần quy nạp: mô tả đối tượng (giải thuật) thơng qua đối tượng (giải thuật ) cách trực tiếp 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 +1 : n]) ) Đệ qui gồm hai loại Đệqui trực tiếp Đệqui gián tiếp Giải thuật đệ qui Giải thuật đệquy giải thuật có chứa thao tác gọi đến Đặc điểm: mơ tả dãy lớn thao tác số thao tác có chứa thao tác gọi lại giải thuật (gọi đệquy) 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 then P[ S , P ] P P[ S , if B then P ] Chương trình đệqui –Hàm đệqui –Thủtục đệqui Mơ tả đệqui giải thuật Dãy sốFibonaci(FIBO) :{ FIBO (n) } ≡1 ,1 , , , , , 13 , 21 , 34 , 55 , 89 , 144 , 233 , 377 , FIBO(0 ) = FIBO (1 ) = ; FIBO(n ) = FIBO (n -1 ) + FIBO ( n -2 ) ; với n > = Giải thuật đệquy tính FIBO ( n ) là: FIBO(n) if ((n = ) or ( n = )) then return ; else return ( FIBO (n -1) + FIBO (n -2)) ; Các dạng đệ qui đơn giản thường gặp Đệqui tuyến tính: dạng đệqui trực tiếp đơn giản códạng P􀃙 { If (B) thực S; else { thực S* ; gọi P } } Với S , S* thao tác không đệquy Vídụ:Hàm FAC(n) tính số hạng n dãy n! Dạng hàm ngôn ngữmã giả: { Nếu n = FAC = ; /* trường hợp neo*/ Ngược lại FAC = n*FAC(n-1) } Dạng hàm C++ : int FAC( int n ) { if ( n == ) return ; else return ( n * FAC(n-1 )) ; } Thi hành hàm tính giai thừa factorial (3) n=3 factorial (2) … n=2 3*factorial(2) … factorial (1) n=1 2*factorial(1) … factorial (0) 1*factorial(0) n=0 … return 1; 1 Trạng thái hệ thống thi hành hàm tính giai thừa Stack hệ thống factorial(0) factorial(1) factorial(1) factorial(1) factorial(2) factorial(2) factorial(2) factorial(2) factorial(2) factorial(3) factorial(3) factorial(3) factorial(3) factorial(3) factorial(3) factorial(3) t Thời gian hệ thống Gọi hàm Gọi hàm factorial(3) factorial(2) Trả từ Gọi hàm Gọi hàm hàm factorial(1) factorial(0) factorial(0 ) Trả từ hàm factorial(1 ) Trả từ hàm factorial(2 ) Trả từ hàm factorial(3 ) t Cây thi hành stack hệ thống Cây thi hành Đệ qui đuôi (tail recursion) Định nghĩa: câu lệnh thực thi cuối lời gọi đệ qui đến Khử: chuyển thành vịng lặp Khử đệ qui hàm giai thừa Giải thuật: product=1 for (int count=1; count < n; count++) product *= count; Dãy số Fibonacci Định nghĩa: F0 = F1 = Fn = Fn-1 + Fn-2 n>2 Ví dụ: 0, 1, 1, 2, 3, 5, 8, 13, 21, 34, … Hàm đệ qui: int fibonacci (int n) { if (n= 0; i++) ok = !queen_square[count − i][col − i]; //kiểm tra đường chéo xuống for (i = 1; ok && count − i >= && col + i < board_size; i++) ok = !queen_square[count − i][col + i]; return ok; } Bài toán Hậu – Góc nhìn khác Bài tốn Hậu – Thiết kế const int max_board = 30; class Queens { public: Queens(int size); bool is_solved( ) const; void print( ) const; bool unguarded(int col) const; void insert(int col); void remove(int col); int board size; private: int count; bool col_free[max board]; bool upward_free[2 * max board − 1]; bool downward_free[2 * max board − 1]; int queen_in_row[max board]; //column number of queen in each row }; Bài toán Hậu – Mã C++ Queens :: Queens(int size) { board size = size; count = 0; for (int i = 0; i < board_size; i++) col_free[i] = true; for (int j = 0; j < (2 * board_size − 1); j++) upward_free[j] = true; for (int k = 0; k < (2 * board_size − 1); k++) downward_free[k] = true; } void Queens :: insert(int col) { queen_in_row[count] = col; col_free[col] = false; upward_free[count + col] = false; downward_free[count − col + board size − 1] = false; count++; } ... khơng tìm giải thuật khơng đệ quy thường là: –Dùng quan niệm đệ quy để tìm giải thuật cho tốn –Mã hóa giải thuật đệ quy –Khử đệ quy để có chương trình khơng đ? ?quy •Tuy nhiên : khử đệ quy khơng... Giải thuật đệ qui Giải thuật đ? ?quy giải thuật có chứa thao tác gọi đến Đặc điểm: mơ tả dãy lớn thao tác số thao tác có chứa thao tác gọi lại giải thuật (gọi đ? ?quy) Biểu diễn giải thuật đệqui P P[... } } KHỬ Đ? ?QUY Cơ chế thực đệqui Tổng quan khử đệqui Các trường hợp khử đệ qui đơn giản Cơ chế thực đệqui •Trạng thái tiến trình xử lý giải thuật: nội dung biến lệnh cần thực •Với tiến trình xử

Ngày đăng: 29/03/2021, 09:11

TỪ KHÓA LIÊN QUAN

w