1. Trang chủ
  2. » Công Nghệ Thông Tin

Bài giảng cấu trúc dữ liệu và giải thuật chương 2 ths nguyễn thị khiêm hòa

53 326 1

Đ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

Thông tin cơ bản

Định dạng
Số trang 53
Dung lượng 570,27 KB

Các công cụ chuyển đổi và chỉnh sửa cho tài liệu này

Nội dung

Nội dung Tổng quan về đệ quy  Tối ưu và khử đệ quy  Ứng dụng của giải thuật đệ quy... Mục tiêu Hiểu rõ giải thuật đệ quy  Ưu và khuyết điểm của giải thuật đệ quy  Phương pháp khử đ

Trang 1

Chương 2:

Đệ quy và giải thuật đệ quy

Ging viên: Ths Nguyn ThKhiêm Hòa

Trang 2

Nội dung

 Tổng quan về đệ quy

 Tối ưu và khử đệ quy

 Ứng dụng của giải thuật đệ quy

Trang 3

Mục tiêu

 Hiểu rõ giải thuật đệ quy

 Ưu và khuyết điểm của giải thuật đệ quy

 Phương pháp khử đệ quy

 Một số bài toán ứng dụng giải thuật đệ quy điển hình.

Trang 4

Tổng quan về đệ quy

 Khái niệm

 Giải thuật đệ quy

 Một thuật toán được gọi là đệ quy nếu nó giải bài toán bằng cách rút gọn liên tiếp bài toán gốc thành bài toán

cũng như vậy nhưng có đu vào nhh ơ n.

 Hàm đệ quy

Trang 5

{ Mở từ điển vào trang “giữa”

Xác định xem nửa nào của từ điển chứa từ cần tìm;

if (từ đó nằm ở nửa trước)

tìm từ đó ở nửa trước else tìm từ đó ở nửa sau.

}

Trang 6

Nguyên tắc hoạt động

Tính chất không thể thiếu đối với đệ quy là tính h u h n

 Hàm đệ quy về cơ bản gồm hai phần:

 Phần cơ sở (Phần neo):

 Phần đệ quy:

Trang 7

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

tuần tự 3 nội dung sau :

 Thông số hóa bài toán

tương ứng

bằng phân rã bài toán theo kiểu đệ quy

Trang 9

Ưu và nhược điểm của đệ qui

 Ưu điểm:

 Sáng sủa, dễ hiểu, nêu rõ bản chất vấn đề

 Tiết kiệm thời gian hiện thực mã nguồn

 Nhược điểm:

 Tốn nhiều bộ nhớ, thời gian thực thi lâu

 Một số bài toán không có lời giải đệ quy

Trang 10

Phân loại giải thuật đệ qui

 Đệ quy phân thành 2 loại :

 Đệ quy trực tiếp:

C()

Trang 11

Một số dạng giải thuật đệ quy đơn giản

Đệ quy tuyến tính Hàm đệ qui tuyến tính dạng:

P (<tham số>)

{

if (điều kiện dừng) {

<Xử lý trường hợp neo>

} Else {

[Tập lệnh A];

P(<tham số>);

[Tập lệnh B];

} }

Trang 12

Một số dạng giải thuật đệ quy đơn giản

định nghĩa như sau:

Trang 13

Một số dạng giải thuật đệ quy đơn giản

 Đệ quy nhị phân

P (<tham số>)

{

if (điều kiện dừng) {

<Xử lý trường hợp neo>

} Else {

Trang 14

Một số dạng giải thuật đệ quy đơn giản

 Ví dụ 1: Tính số hạng thứ n của dãy Fibonaci được định nghĩa như sau:

 f 1 = f 0 =1 ;

 f n = f n-1 + f n-2 ; (n>1)

int Fibo(int n) {

if ( n < 2 ) return 1 ; else

return (Fibo(n -1) + Fibo(n -2)) ; }

Trang 15

Một số dạng giải thuật đệ quy đơn giản

 Đệ quy phi tuyến

<Xử lý trường hợp neo>;

} else {

[Tập lệnh B];

P (<danh sách tham số>);

} }

Trang 16

Một số dạng giải thuật đệ quy đơn giản

 Ví dụ: Cho dãy {X n } xác định theo công thức truy hồi:

Trang 17

Một số dạng giải thuật đệ quy đơn giản

Trang 18

Một số dạng giải thuật đệ quy đơn giản

 Ví dụ: Tính số hạng thứ n của hai dãy {X n }, {Y n } được

định nghĩa như sau:

X 0 =Y 0 =1 ;

X n = X n-1 + Y n-1 ; (n>0)

Y n = n 2 X n-1 + Y n-1 ; (n>0)

Trang 19

Một số dạng giải thuật đệ quy đơn giản

Trang 20

Một số bài toán giải bằng giải thuật đệ qui điển hình

 Bài toán Tháp Hà Nội

 Bài toán chia thưởng

Trang 21

Bài toán tháp Hà Nội

Trang 22

Bài toán tháp Hà Nội

 Bài toán tháp Hà nội : n đĩa

 A: cọc nguồn

 B: cọc trung gian

Trang 23

Bài toán tháp Hà Nội

 Chuyển từ A sang C

 Trường hợp n > 1

 Chuyển (n-1) đĩa từ A sang B, C trung gian

 Chuyển đĩa n từ A sang C

 Chuyển (n-1) đĩa từ B sang C, A làm trung gian

Trang 24

Bài toán tháp Hà Nội

Trang 25

Bài toán tháp Hà Nội

 A  C, B trung gian

Trang 26

Bài toán tháp Hà Nội

 B  C (A trung gian)

C (2)

Trang 27

Bài toán tháp Hà Nội

 A  C (B trung gian)

A (n-2)

Trang 28

Bài toán tháp Hà Nội

 B  C (A trung gian)

A (n-4)

Trang 29

Bài toán tháp Hà Nội

 A  C

A (0)

Trang 30

Bài toán tháp Hà Nội

Void HANOI(int n, char A,B,C){

Trang 31

Bài toán chia thưởng

học sinh giỏi có thứ tự 1, 2, ,n thỏa nguyên tắc

 Học sinh A giỏi hơn học sinh B, thì số phần thưởng của A

Trang 32

Bài toán chia thưởng

 Khi m < n, thì có n-m học sinh cuối không có

phần thưởng, Part(m,n) = Part(m,m)

 Khi m>n, ta xét hai trường hợp

 Khi học sinh cuối cùng không nhận được phần thưởng nào, dó đó Part(m,n) = Part(m, n-1)

 Khi học sinh cuối cùng nhận được ít nhất 1 phần thưởng, do đó số cách chia là Part(m-n, n)

 Tóm lại m > n, có Part(m,n) = Part(m, n-1) + Part(m-n, n)

Trang 33

Bài toán chia thưởng

int PART( int m , int n )

Trang 34

Phương pháp quay lui (back tracking)

 Đặc trưng : là các bước hướng tới lời giải cuối

cùng của bài toán hoàn toàn được làm thử.

 Nếu có một lựa chọn được chấp nhận thì ghi nhận lại lựa chọn này và tiến hành các bước thử tiếp theo

 Ngược lại, không có lựa chọn nào thích hợp thì làm lại

bước trước, xóa bỏ sự ghi nhận và quay về chu trình thử các lựa chọn còn lại

Trang 35

Phương pháp quay lui (back tracking)

 Mô hình bài toán:

 Tìm X=(x 1 , x 2 , ,x n ) thỏa B

 Để chỉ ra lời giải X, ta phải dựng dần các thành phần lời giải x i

Trang 36

Phương pháp quay lui (back tracking)

 Phương pháp: Ta xây dựng x 1 , x 2 , ,x n theo cách

sau

 Đầu tiên, Tập T 1 các ứng cử viên có thể là thành phần

đầu tiên của vectơ nghiệm chính là x 1

Trang 37

Phương pháp quay lui (back tracking)

 Nếu T k không rỗng, ta chọn x i  T k và ta có được nghiệm bộ (x 1 ,x 2 ,…,x k-1 ,x k ), đồng thời loại x k đã chọn khỏi T k Sau đó ta lại tiếp tục mở rộng bộ (x 1 ,x 2 ,…,x k ) bằng cách áp dụng đệ quy thủ tục mở rộng nghiệm.

 Nếu T k rỗng, tức là không thể mở rộng bộ (x 1 ,x 2 ,…,x k-2 ,x k-1 ), thì ta quay lại chọn phần tử mới x‟ k-1 trong T k-1 làm thành phần thứ k-1 của vectơ nghiệm

cũ cho bài toán” để hỗ trợ cho bước quay lui

Trang 38

Phương pháp quay lui (back tracking)

Trang 39

Phương pháp quay lui (back tracking)

Trang 40

Liệt kê các hoán vị của n số tự nhiên đầu tiên

đầu tiên là một bộ x[0], x[1], ,x[n-1] Trong đó

x[i]  x[j],  i,j và x[i]  {0 n-1}.

Trang 41

Thu(int k){

if (k== n) inkq();

else for (int j=1; j<=n; j++)

if (b[j]) {

int main() {

b[j] = 1; // j=1 n-1 Thu (0);

Trang 42

Liệt kê dãy nhị phân dộ dài n

 Chuỗi nhị phân độ dài n có dạng x[0],

x[1], ,x[n-1], Đặt B={0,1}

 T 1 =B, Giả sử đã xác định được x[0], x[1], , x[k-1] Thấy rằng T k = B

Trang 43

Liệt kê dãy nhị phân dộ dài n

x[k] = j;

Thu(k+1);

} }

Trang 44

Bài toán 8 quân xe

Trang 45

Bài toán 8 quân xe

 Đặt quân xe thứ i vào cột

thứ j sao cho nó không bị

„ăn‟ bởi i-1 quân xe hiện

có trên bàn cờ

 Mỗi hàng chỉ có 1 quân xe,

Nên việc chọn vị trí quân

xe thứ i, chỉ nằm trên

hàng i

1 2 3 4 5 6 7 8

8 7 6 5 4 3 2 1

Trang 46

Bài toán 8 quân xe

 Qui ước x[i]: chỉ quân xe thứ i năm ở hàng i

 X[i] = j, quân xe thứ i đặt ở cột j

 Để quân xe i (hàng i) chấp nhận cột j, thì

cột j phải tự do.

Trang 47

Bài toán 8 quân xe

Cột j

Hàng i

Trang 48

Bài toán 8 quân xe

 Do đó ta sẽ chọn các mảng Boole 1 chiều

để biểu diễn các trạng thái này

cột j

 1<= i, j <=8

Trang 49

Bài toán 8 quân xe

int x[8], a[8],

 Với các dữ liệu đã cho, thì lệnh đặt quân

xe sẽ thể hiện bởi :

 x[i] = j: đặt quân xe thứ i trên cột j.

 a[j] = 0: Khi đặt xe tại cột j

Trang 50

Bài toán 8 quân xe

Trang 51

Bài toán 8 quân xe

Thu (i){

If (i >8)

Xuat (X) else

Trang 52

Đệ quy và quy nạp toán học

 Dùng đệ quy để giải các bài toán truy hồi

 Dùng quy nạp toán học để chứng minh

tính đúng đắn, xác định độ phức tạp của

giải thuật đệ quy

Trang 53

Q&A

Ngày đăng: 03/12/2015, 02:15

TỪ KHÓA LIÊN QUAN

TÀI LIỆU CÙNG NGƯỜI DÙNG

TÀI LIỆU LIÊN QUAN

🧩 Sản phẩm bạn có thể quan tâm