Bài giảng Cấu trúc dữ liệu và giải thuật: Thuật toán đệ quy

12 8 0
Bài giảng Cấu trúc dữ liệu và giải thuật: Thuật toán đệ quy

Đ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

Bài giảng Cấu trúc dữ liệu và giải thuật - Thuật toán đệ quy gồm có những nội dung chính sau đây: Định nghĩa đệ quy, thuật toán đệ quy, phân tích thuật toán đệ quy, đệ quy có nhớ, thuật toán quay lui (backtracking algorithm). Mời các bạn cùng tham khảo.

1/10/2011 REVIEW Xác định mối quan hệ giữa các cặp hàm  a ,  b ,   c và  sau  ,  THUẬT TỐN ĐÊ QUY Nội dung Định nghĩa đệ quy   Định nghĩa đệ quy  Thuật tốn đệ quy  Phân tích thuật tốn đệ quy   Đệ quy có nhớ  Thuật tốn quay lui (backtracking algorithm) Đối tượng bao gồm chính nó  hoặc được định nghĩa dưới  dạng chính nó VD. Định nghĩa một cơng thức hợp  lệ của các biến, số và các phép tốn  , ,∗,/, ^  là cơng thức hợp lệ nếu  là  biến hoặc số  Nếu  , là cơng thức hợp lệ thì  ,  ,  ∗ ,  / , ^ cũng là cơng thức hợp lệ  1/10/2011 Hàm được định nghĩa đệ quy  ! ế ! ế Định nghĩa đệ quy  0 Mọi định nghĩa đệ quy đều gồm 2 phần   ế 1, 2 ế   ế ế 1 ế Một trường hợp cơ sở (nhỏ nhất) có thể xử lý trực tiếp mà khơng  cần đệ quy, và Một phương thức tổng qt mà biến đổi một trường hợp cụ thể về  các trường hợp nhỏ hơn. Do đó biến đổi các trường hợp cho đến  khi về trường hợp cơ sở Danh sách ban đầu Thuật tốn đệ quy Thuật tốn có chứa lời gọi đệ quy đến chính nó với đầu  vào kích thước nhỏ hơn  VD. Sắp xếp trộn – MergeSort MergeSort(int A[], int start, int end) { if(start ; log n! = (n log n) Vấn đề với phương pháp thay thế T(n) = T(n) = 4T(n/2) + n n=1 n>1 Dự đoán (chặt hơn!): T(n)  cn2 n>n0 T(n) = T(n) = 4T(n/2) + n n=1 n>1 Sử dụng dự đốn xác Chuyển qui nạp: Giả sử T(k)  ck2, kn0 Giả sử T(k)  ck2 - dn, kn T(n)  cn n>1 Giả sử T(k)  ck2 - dn, kn T(n)  cn n>1 Giả sử T(k)  ck2 - dn, k1: T(n) = 4T(n/2) + n  4(c(n/2)2 ‐ d(n/2)) + n      = cn2 ‐ 2dn + n = cn2 ‐ dn ‐ (dn ‐ n)  cn2 ‐ d*n (định nghĩa) (qui nạp) (biến đổi) (biến đổi) (Chọn d1) Ví dụ 2 (tiếp) T(n) = T(n) = 4T(n/2) + n n=1 n>1 Đã chứng minh: T(n)  2n2 – 1n n>0 Phương pháp cây đệ quy Vậy, T(n) = O(n2) 1/10/2011 Phương pháp cây đệ quy Phương pháp cây đệ quy   Cây đệ quy cho mergeSort   ế ế Phương pháp cây đệ quy  Ο Xét cơng thức đệ quy  Phương pháp cây đệ quy Dùng phương pháp thay thế để chứng minh lời giải cơng  thức đệ quy tìm được Ο Ο log VD.    log log log log Với  log log log Bài tập: Xác định một cận trên tốt cho công thức đệ quy 2 3 (chú ý log log 2 log dùng phương pháp thế để xác nhận lại kết quả log 1) 1/10/2011 Dùng định lý thợ  Dùng để giải các công thức đệ quy dạng  ,  Định lý thợ Master theorem Dùng định lý thợ  Nếu  Nếu  Ο Ο  Nếu  Ω ⁄ VD. Thuật toán sắp xếp trộn chia thành 2 bài tốn con, kích thước  /2. Chi phí tổng hợp 2 bài  tốn con là Ο Dùng định lý thợ Định lý thợ (Master Theorem) 1, là các hằng số,  là một hàm.  định nghĩa đệ  quy trên các tham số khơng âm , trong đó  ⁄ có thể hiểu là  ⁄ hoặc  ⁄ có thể bị giới hạn một cách tiệm cận như sau: ⁄  Thì   1, 1, à ệ ậ ươ một cách hiệu quả Bài tốn ban đầu được chia thành  bài tốn con có kích  thước mỗi bài là  ⁄ , chi phí để tổng hợp các bài tốn con  là  , với hằng  thì  Θ thì  log Áp dụng định lý thợ:   Θ , với hằng  0, và nếu  với hằng  và với mọi n đủ lớn thì  Θ 9, là trường hợp 1 (với  1, 3/2 và  trường hợp 2, do đó   Ο Θ 3, ta có  1) do đó  ta có  Θ log ≡ Θ /  Đây  1. Đây là  log và  ,  Ω ≡3 log (TH3) log ta có  với  log với  ≡ 0.2,  ⁄ do vậy  1/10/2011 Dùng định lý thợ  Chú ý: Không phải trường hợp nào cũng áp dụng được  định lý thợ !  VD.  2 và  2, ≡ log log do đó có vẻ áp dụng trường hợp 3.  log tiệm cận lớn hơn 2 Tuy nhiên  mọi hằng số  do đó khơng thể áp dụng được với  Đệ quy có nhớ Đệ quy có nhớ     Trong thuật tốn đệ quy, những bài tốn con có thể được  giải đi giải lại nhiều lần! VD. Tính số Fibonacci ế 0,1 ế Tính  Ghi nhận lời giải: dùng mảng Khi gặp bài tốn con cần giải: Kiểm tra xem bài tốn con  đã được giải chưa:   Thuật tốn quay lui Back‐tracking algorithm Nếu đã giải: lấy kết quả Ngược lại, giải bài tốn con và cập nhật lời giải vào bảng  1/10/2011 Thuật tốn quay lui  Bài tốn 8 con hậu: “Hãy xếp 8 con hậu trên bàn cờ 8x8  sao cho chúng khơng thể ăn lẫn nhau” Thuật tốn quay lui  Thuật tốn xếp hậu: đặt lần lượt các qn hậu lên bàn cờ  (theo 1 cách nào đó) sao cho qn hậu đặt sau khơng ăn  được qn đã đặt trước đó  Thuật tốn quay lui solve_from (Current_config) if Current_config đã chứa đủ 8 hậu print Current_config else Với tập p các ơ trên bàn cờ mà chưa bị ảnh hưởng bởi Current_config Thuật tốn quay lui   Dead end: trạng thái chưa kết thúc, nhưng ta khơng thể  đặt thêm được 1 qn hậu nào nữa Khi rơi vào trạng thái dead end ta phải tiến hành quay lui  (backtrack) lại lựa chọn gần nhất để thử một khả năng có  thể khác { Thêm 1 quân hậu vào p; Cập nhật lại Current_config solve_from(Current_config); Loại bỏ quân hậu khỏi p của Current_config; } 10 1/10/2011 Bài toán 8 con hậu Thuật toán quay lui Thuật toán quay lui – backtracking algorithm:   Thử tìm kiếm lời giải đầy đủ cho bài tốn từ việc xây dựng  lời giải bộ phận, trong đó lời giải bộ phận phải ln phù  hợp với u cầu bài tốn  Trong q trình thực hiện, thuật tốn mở rộng dần lời giải  bộ phận. Nếu việc mở rộng khiến lời giải bộ phận vi phạm  u cầu bài tốn thì tiến hành quay lui, loại bỏ sửa đổi  gần nhất và thử một khả năng xây dựng lời giải bộ phận  có thể (hợp lệ) khác.   Nhận xét:    Giải thuật Thử vị trí hàng function Try (column) { for (row = 1; row 

Ngày đăng: 21/05/2021, 12:41

Từ khóa liên quan

Tài liệu cùng người dùng

  • Đang cập nhật ...

Tài liệu liên quan