Bài giảng Cấu trúc dữ liệu và giải thuật: Chương 3 - TS. Nguyễn Thị Kim Thoa
lượt xem 3
download
Bài giảng Cấu trúc dữ liệu và giải thuật - Chương 3: Đệ quy, cung cấp cho người học những kiến thức như Giải thuật đệ quy; Sự khử đệ quy; Giải thuật quay lui;... Mời các bạn cùng tham khảo!
Bình luận(0) Đăng nhập để gửi bình luận!
Nội dung Text: Bài giảng Cấu trúc dữ liệu và giải thuật: Chương 3 - TS. Nguyễn Thị Kim Thoa
- Chương 3: Đệ quy Data structures and Algorithms 3/22/2021 Cấu trúc dữ liệu và giải thuật 1
- Nội dung chính • Giải thuật đệ quy – Cấu tạo giải thuật đệ quy – Hoạt động của giải thuật đệ quy • Sự khử đệ quy • Giải thuật quay lui 3/22/2021 Cấu trúc dữ liệu và giải thuật 2
- Giải thuật đệ quy suy diễn đệ quy P P1 P2 … Pn-1 Pn điểm dừng quay lui • Quá trình suy diễn đệ quy - Đưa về P một bài toán P1 có bản chất tương tự P nhưng có quy mô bé hơn. - Đưa P1 về bài toán P2 có cùng bản chất với P1 và cũng có quy mô nhỏ hơn P1. - Quá trình cứ tiếp tục cho đến khi đưa bài toán về bài toán con Pn tương tự như Pn-1 và có quy mô nhỏ hơn Pn-1. - Pn có thể giải một cách trực tiếp (điểm dừng) • Quá trình quay lui - Sau khi giải được Pn, ta quay lại giải các bài toán con theo trật tự 3 ngược lại và cuối cùng giải được bài toán ban đầu P.
- Giải thuật đệ quy • Ví dụ: hàm tính giai thừa một số nguyên không âm Quy ước: 1. n = 0 thì n! = 1; 2. n > 0 thì n! = n(n-1)! Hàm tính n! Giải thuật Cài đặt Function giaiThua(n) long giaiThua(int n) If n = 0 then FACT = 1; { Else FACT = n*FACT(n-1) if (n==0) return 1; Return else return n*giaiThua(n-1); } T(n) = O(n) 3/22/2021 Cấu trúc dữ liệu và giải thuật 4
- Dãy fibonacci • Dãy số Fibonacci là dãy số có dạng như sau: 1, 1, 2, 3, 5, 8, 13, 21, 34, 55 … • Định nghĩa Fib(n) như sau 1. Nếu n = 1 hoặc n = 2 thì Fib(n) = 1 2. Nếu n >2 thì Fib(n) = Fib(n-1) + Fib(n-2) Giải thuật tìm số thứ n trong dãy Fibonacci Function FIB(n) 1. If n==0 or n==1 then FIB = 1; Else FIB = FIB(n-1) + FIB(n-2) 2. Return 3/22/2021 Cấu trúc dữ liệu và giải thuật 5
- Dãy Fibonacci Đưa ra phần tử thứ n – có đệ quy int main() #include { #include int i, n ; int Fib(int i) printf(”Nhap so phan tu trong day { Fibonacci: "); if(i == 0||i==1) scanf_s("%d",&n); { for (i = 0; i < n; i++) return 1; { } printf("%d\t", Fib(i)); return Fib(i-1) + Fib(i-2); } } return 0; getch(); } 3/22/2021 Cấu trúc dữ liệu và giải thuật 6
- Sự khử đệ quy – Khi thay các giải thuật đệ quy bằng các giải thuật không tự gọi chúng, ta gọi đó là sự khử đệ quy – Sự khử đệ quy được thực hiện thông qua các vòng lặp (for, while) và phân nhánh (if...then...else) – Ví dụ 1: int giaiThua (int n){ if (n
- Dãy Fibonacci đưa ra phần tử thứ n trong dãy Fibonacci – khử đệ quy int Fib(int n) { void main() { int f1 = 1, f2 = 1; int i; int f; printf("10 so dau tien cua day int i; Fibonacci: \n"); if (n == 1 || n == 2) for (i = 1; i < =10; i++) { return 1; printf("%d ", Fib(i)); } for (i = 3; i
- Bài toán tháp Hà nội A B C • Có 3 tháp A, B, C trong đó tháp A có N đĩa kích thước khác nhau, được xếp lên nhau theo thứ tự đĩa nhỏ hơn được đặt chồng lên đĩa lớn hơn. Thực hiện chuyển N đĩa từ tháp A sang tháp B với điều kiện: – Mỗi lần chỉ chuyển một đĩa – Không có tình huống đĩa to ở trên đĩa nhỏ ở dưới (dù là tạm thời) – Được phép sử dụng một cọc trung gian 9
- Bài toán tháp Hà nội • Nếu N=1: chuyển đĩa từ cọc A sang cọc B • Trái lại, thực hiện theo các bước sau: – Chuyển N-1 đĩa từ A sang C với B làm trung gian – Chuyển 1 đĩa (là đĩa lớn nhất) từ A sang B – Chuyển N-1 đĩa từ C sang B, với A làm trung gian 3/22/2021 Cấu trúc dữ liệu và giải thuật 10
- Bài toán tháp Hà nội Procedure Tower(n,A,B,C) If n=1 then chuyen dia tu A sang B Else begin call Tower(n-1,A,C,B); call Tower(1,A,B,C); call Tower(n-1,C,B,A) end End. 3/22/2021 Cấu trúc dữ liệu và giải thuật 11
- Bài toán tháp Hà nội void Tower(int n , char a, char b, char c ){ int main(){ if(n==1){ char a='A', b='B', c='C'; printf("\t%c-------%c\n",a,c); int n; return; printf("Nhap n: "); } scanf("%d",&n); Tower(n-1,a,c,b); Tower(n,a,b,c); Tower(1,a,b,c); } Tower(n-1,c,b,a); } 3/22/2021 Cấu trúc dữ liệu và giải thuật 12
- Giải thuật quay lui • Là một dạng của giải thuật đệ quy • Ví dụ bài toán 8 con hậu: Hãy tìm cách bố trí 8 con hậu trên bàn cờ sao cho không có hai con hậu nào ăn được nhau. Bài toán này có thể mở rộng cho N con hậu 13
- Giải thuật quay lui • Ý tưởng giải thuật: − Coi bàn cờ là một mảng hai chiều kích thước NxN − Gọi N con hậu lần lượt là h1, h2 …, hN. − Để các con hậu không ăn nhau, ta đặt con hậu thứ i (hi) vào hàng thứ i, với i=1…N. − Chọn vị trí cột thích hợp cho từng con hậu để chúng không ăn nhau 14
- Giải thuật quay lui • Chi tiết giải thuật: − Giả sử ở bước thứ i, ta đã xếp được i con hậu h1, h2 …, hi vào i hang đầu tiên, nếu i bằng N thì kết thúc, đưa ra kết quả. Trái lại thì sang bước tiếp theo − Tại bước thứ i+1, tìm vị trí cột thích hợp ở hàng i+1 để đưa hi+1 vào đó. Có hai khả năng: o Nếu tìm được vị trí cột j thích hợp (không bị một trong i con hậu đầu tiên ăn) thì đưa hi+1 vào vị trí j. o Nếu cả N cột đều không thích hợp thì quay lại thử tiếp ở bước thứ I (quay lui) để tìm vị trí thích hợp tiếp theo của hi (hiện tại hi đang ở vị trí thích hợp). Nếu không có vị trí tiếp theo thích hợp và I bằng 1 thì giải thuật cũng kết thúc với kết luận không có giải pháp nào 15
CÓ THỂ BẠN MUỐN DOWNLOAD
-
Bài giảng Cấu trúc dữ liệu - Bài 1:Tổng quan về cấu trúc dữ liệu và giải thuật
47 p | 174 | 17
-
Bài giảng Cấu trúc dữ liệu 1: Chương 1 - Lương Trần Hy Hiến
7 p | 162 | 9
-
Bài giảng Cấu trúc dữ liệu và giải thuật trong C++ - Bài 8: Cấu trúc dữ liệu ngăn xếp
28 p | 77 | 9
-
Bài giảng Cấu trúc dữ liệu giải thuật: Các kiểu dữ liệu trừu tượng cơ bản - Cấu trúc dữ liệu tuyến tính
92 p | 116 | 9
-
Bài giảng Cấu trúc dữ liệu và giải thuật: Cấu trúc dữ liệu cây đỏ đen - Bùi Tiến Lên
25 p | 79 | 8
-
Bài giảng Cấu trúc dữ liệu và giải thuật – Bài 17: Cấu trúc dữ liệu dạng cây
21 p | 77 | 8
-
Bài giảng Cấu trúc dữ liệu và giải thuật: Các cấu trúc dữ liệu
193 p | 57 | 7
-
Bài giảng Cấu trúc dữ liệu và giải thuật: Cấu trúc dữ liệu cây AA - Bùi Tiến Lên
30 p | 35 | 6
-
Bài giảng Cấu trúc dữ liệu và giải thuật: Chương 1 - Trần Minh Thái (2016)
62 p | 94 | 6
-
Bài giảng Cấu trúc dữ liệu và giải thuật: Chương 1 - Trần Minh Thái (Trường Đại học Hồng Bàng )
62 p | 158 | 6
-
Bài giảng Cấu trúc dữ liệu - Chương 3: Cấu trúc cây
65 p | 58 | 6
-
Bài giảng Cấu trúc dữ liệu và giải thuật – Chương 1: Tổng quan về giải thuật và cấu trúc dữ liệu
10 p | 66 | 4
-
Bài giảng Cấu trúc dữ liệu và giải thuật: Cấu trúc dữ liệu cây - Bùi Tiến Lên
68 p | 40 | 4
-
Bài giảng Cấu trúc dữ liệu và giải thuật: Cấu trúc dữ liệu cây AVL - Bùi Tiến Lên
38 p | 47 | 4
-
Bài giảng Cấu trúc dữ liệu và giải thuật: Chương 1 – Trần Minh Thái (2017)
67 p | 106 | 4
-
Bài giảng Cấu trúc dữ liệu: Chương 1 - ThS. Thiều Quang Trung (2018)
44 p | 43 | 4
-
Bài giảng Cấu trúc dữ liệu và giải thuật: Chương 2 - Th.S Thiều Quang Trung
41 p | 68 | 3
-
Bài giảng Cấu trúc dữ liệu giải thuật: Cấu trúc dữ liệu
17 p | 50 | 2
Chịu trách nhiệm nội dung:
Nguyễn Công Hà - Giám đốc Công ty TNHH TÀI LIỆU TRỰC TUYẾN VI NA
LIÊN HỆ
Địa chỉ: P402, 54A Nơ Trang Long, Phường 14, Q.Bình Thạnh, TP.HCM
Hotline: 093 303 0098
Email: support@tailieu.vn