Bài giảng Cấu trúc dữ liệu và giải thuật: Chương 2 - Ths. Phạm Thanh An (2018)

20 9 0
Bài giảng Cấu trúc dữ liệu và giải thuật: Chương 2 - Ths. Phạm Thanh An (2018)

Đ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

 Một số dạng giải thuật đệ quy thường gặp.  Giải thuật đệ qui quay lui (backtracking)[r]

(1)

LOGO

Ths. Ph m Thanh Anạ

B  môn Khoa h c máy tính­ Khoa CNTTộ

Trường Đ i h c Ngân hàng TP.HCMạ

Chương 2 

(2)

N i dungộ

 Khái niệm đệ quy

 Giải thuật chương trình đệ quy

 Thiết kế giải thuật đệ quy

 Ưu nhược điểm đệ quy

 Một số dạng giải thuật đệ quy thường gặp

 Giải thuật đệ qui quay lui (backtracking)

 Một số toán giải giải thuật đệ quy

điển hình

(3)

M c tiêuụ

Trang  b   cho  sinh  viên  các  khái  ni m  và  cách ị ệ

thi t k  gi i thu t đ  qui, gi i thu t đ  qui quay ế ế ả ậ ệ ả ậ ệ

lui

Gi i  thi u  m t  s   bài  tốn  n  hình  đớ ệ ộ ố ể ược  gi i ả

b ng gi i thu t đ  qui.ằ ả ậ ệ

Phân  tích  u  và  như ược  m  khi  s   d ng  gi i ể ử ụ ả

(4)

Khái ni m v  đ  qui ề ệ

Đ  quy: Đ a ra 1 đ nh nghĩa có s  d ng chính ệ ư ị ử ụ

khái ni m đang c n đ nh nghĩa( quay v ).ệ ầ ị ề

Ví dụ

Người = hai người khác.

 Trong tốn học:

• Số tự nhiên: số tự nhiên, n số tự nhiên n- số tự nhiên

• Hàm n!

(5)

Gi i thu t và hàm đ  quy

Gi i thu t đ  quyả ậ ệ

 Nếu toán T thực lời giải

của tốn T ’ có dạng giống T lời giải đệ

quy

 Giải thuật tương ứng với lời giải gọi

là giải thuật đệ quy

(6)

Gi i thu t đ  quy

Ví d : Xét bài tốn tìm m t t  trong quy n t  ụ ộ ừ ể ừ

đi n:ể

If (từ điển trang) tìm từ trang

else {

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

Xác định xem nử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

(7)

Phân lo i gi i thu t đ  qui

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

 Đệ quy trực tiếp:

 Đệ quy gián tiếp (Tương hỗ):

A()      B() A()    B()

(8)

Cài đ t hàm đ  quy

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

 Phần sở (Phần neo):

(9)

Cài đ t hàm đ  quy (tt)

C u trúc hàm đ  qui nh  sauấ ệ ư

If (suy biến)

<Giải trường hợp suy biến>;

Else

{ <tiền xử lý đệ qui>; <Gọi đệ qui> ;

(10)

M t s  d ng gi i thu t đ  quy ố ạ đ n gi n thơ ường g p

Đ  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 {

<Thực số cơng việc (nếu có)> P(<tham số>);

<Thực số cơng việc (nếu có)> }

(11)

đ n gi n thơ ường g p (tt)

Ví d  1 : Hàm Fact(n) tính s  h ng n c a dãy n!, ụ ố ạ ủ

đ nh nghĩa nh  sau:ị

 fact0 =1 ;

 fn = n*factn-1; (n>=1)

longint Fact(int n)

{

if (n==0)

return 1; else

(12)

M t s  d ng gi i thu t đ  quy ố ạ đ n gi n thơ ường g p (tt)

Đ  quy nh  phân. ệ

P (<tham s >)ố

{

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

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

Else {

<Thực số cơng việc (nếu có)>

P(<tham số>);

<Thực số công việc (nếu có)>

P(<tham số>);

<Thực số cơng việc (nếu có)> }

(13)

đ n gi n thơ ường g p (tt)

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

đ nh nghĩa nh  sau:ị

 f1 = f0 =1 ;

 fn = fn-1 + fn-2 ; (n>1)

int Fibo(int n) {

if ( n < ) return ; else

(14)

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

đ n gi n th ng g p (tt)ơ ả ườ ặ

Đ  quy phi tuy n. ệ ế (<danh sách tham s >) {ố

   for (int i = 1; i<=n; i++)

{

<Thực số cơng việc (nếu có)> if (điều kiện dừng)

{

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

else

{

<Thực số công việc (nếu có)>

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

}

}

(15)

đ n gi n thơ ường g p (tt)

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

 X0 = ; Xn = n2X

O +(n-1)2X1 + + 22Xn-2 + 12Xn-1

int X(int n ) ;

{ if ( n == ) return ; else

{ int tg = ;

for (int i = ; i<n ; i++ ) tg = tg + sqr(n-i)*X(i); return ( tg ) ;

(16)

M t s  d ng gi i thu t đ  quy ố ạ đ n gi n thơ ường g p (tt)

Đ  qui tệ ương h :ỗ

P2(<danh sách tham s >)ố ;// khai báo nguyên m uẫ P1(<danh sách tham s >)ố

{

<Thực số cơng việc (nếu có)> …P2 (<danh sách tham số>);

<Thực số cơng việc (nếu có)>

}

P2 (<danh sách tham s >)ố

{

<Thực số cơng việc (nếu có)> P1 (<danh sách tham số>);

<Thực số cơng việc (nếu có)>

(17)

đ n gi n thơ ường g p (tt)

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

nghĩa nh  sau:ư

 X0 =Y0 =1 ; Xn = Xn-1 + Yn-1; (n>0) ; Yn = n2Xn-1 + Yn-1; (n>0)

long TinhYn(int n); long TinhXn (int n)

{

if(n==0) return 1;

(18)

Thi t k  gi i thu t đ  quiế ế

Đ  xây d ng gi i thu t đ  quy, ta c n th c hi n ể ự ả ậ ệ ầ ự ệ

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

 Thơng số hóa tốn

 Tìm trường hợp neo giải thuật giải

tương ứng

 Tìm giải thuật giải trường hợp tổng quát

(19)

u và nh c đi m c a đ  qui

Ư ượ

Ưu đi m c a đ  quyể ủ ệ

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

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

Nhược đi m c a đ  quyể ủ ệ

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

(20)

M t s  bài toán gi i b ng gi i ộ ố

thu t đ  qui đi n hình

Ngày đăng: 09/03/2021, 06:33

Từ khóa liên quan

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

Tài liệu liên quan