1. Trang chủ
  2. » Giáo án - Bài giảng

Bài giảng cấu trúc dữ liệu và giải thuật đệ qui TS đào nam anh

50 146 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

Thông tin cơ bản

Định dạng
Số trang 50
Dung lượng 3,1 MB

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

Nội dung

• Một chương trình đệ quy hoặc một định nghĩa đệ quy thì không thể gọi đến chính nó mãi mãi mà phải có một điểm dừng đến một trường hợp đặc biệt nào đó, mà ta Reproductive Parts M... Khá

Trang 1

DATA STRUCTURE AND ALGORITHM

Trang 2

Resource - Reference

Slides adapted from Robert Sedgewick, and Kevin

Wayne, edit by Dao Nam Anh

Major Reference:

• Robert Sedgewick, and Kevin Wayne, “Algorithms”

Princeton University, 2011, Addison Wesley

• Algorithm in C (Parts 1-5 Bundle)- Third Edition by

Robert Sedgewick, Addison-Wesley

• Cấu trúc dữ liệu và giải thuật, Đinh Mạnh Tường.

• Giải thuật và lập trình, Lê Minh Hoàng, Đại Học

Trang 3

• Một chương trình đệ quy hoặc một định nghĩa đệ quy thì

không thể gọi đến chính nó mãi mãi mà phải có một

điểm dừng đến một trường hợp đặc biệt nào đó, mà ta

Reproductive Parts

M C Escher, 1948

Trang 4

Khái niệm

Phương pháp thiết kế một giải thuật đệ quy:

• Tham số hoá bài toán

• Phân tích trường hợp chung : đưa bài toán dưới dạng bài

toán cùng loại nhưng có phạm vi giải quyết nhỏ hơn

theo nghiã dần dần sẽ tiến đến trường hợp suy biến

• Tìm trường hợp suy biến

Trang 5

Khái niệm

Chương trình đệ quy gồm hai phần chính:

đến chính bản thân chương trình với giá trị mới của

tham số nhỏ hơn giá trị ban đầu

Trang 6

Greatest Common Divisor Ước số chung nhỏ nhất

• Gcd Tìm số nguyên lớn nhất, chia hết bới hai số

Trang 7

Greatest Common Divisor Ước số chung nhỏ nhất

• Gcd Tìm số nguyên lớn nhất, chia hết bới hai số

4032 = 3  1272 + 216

Trang 8

Greatest Common Divisor Ước số chung nhỏ nhất

Trang 9

Greatest Common Divisor Ước số chung nhỏ nhất

base case reduction step

Trang 10

Tính giai thừa đệ qui

Trang 11

Recursive Graphics

Đệ qui Đồ họa

Trang 14

Htree – Cây đệ qui chữ H

• H-tree bậc n.

 Vẽ chữ H.

 Vẽ đệ qui 4 H-trees bậc n-1, nối tại 4 chân.

Và kích thước giảm nửa

Bậc 1

size

Trang 15

Htree – Cây đệ qui chữ H

• H-tree bậc n.

 Vẽ chữ H.

 Vẽ đệ qui 4 H-trees bậc n-1, nối tại 4 chân.

Và kích thước giảm nửa

Bậc 1

size

Trang 16

Htree – Cây đệ qui chữ H

• H-tree bậc n.

 Vẽ chữ H.

 Vẽ đệ qui 4 H-trees bậc n-1, nối tại 4 chân.

Và kích thước giảm nửa

Bậc 1

tip

size

Trang 17

Htree in Java

public class Htree {

public static void draw ( int n , double sz , double x , double y ) {

public static void main ( String [] args ) {

int n = Integer parseInt ( args [ 0 ]);

draw ( n , 5 , 5 , 5 );

}

}

draw the H, centered on (x, y)

recursively draw 4 half-size Hs

Trang 18

Animated H-tree

Trang 19

Animated H-tree

Trang 20

Animated H-tree

Trang 21

Animated H-tree

Trang 22

Animated H-tree

Trang 23

Animated H-tree

Trang 24

20% 40%

Animated H-tree

Trang 25

20% 40% 60% 80% 100%

Animated H-tree

Trang 27

Tháp Hà nội

Trang 28

Tháp Hà nội

• Move all the discs from the leftmost peg to the rightmost one.

 Only one disc may be moved at a time.

 A disc can be placed either on empty peg or on top of a larger disc.

Edouard Lucas

(1883)

Trang 29

Tháp Hà nội: Giải pháp đệ qui

Chuyển n-1 đĩa nhỏ sang phải Còn lại đĩa lớn nhất

cyclic wrap-around

Trang 30

Tháp Hà nội: Giải pháp đệ qui

public class TowersOfHanoi {

public static void moves(int n, boolean left) {

if (n == 0) return;

moves(n-1, !left);

if (left) System.out.println(n + " left");

else System.out.println(n + " right");

Trang 31

Tháp Hà nội: Giải pháp đệ qui

Trang 32

Tháp Hà nội: Giải pháp đệ qui

3, true

n, left

Trang 33

Tháp Hà nội: Giải pháp đệ qui

3, true

n, left

1

Trang 34

Tháp Hà nội: Giải pháp đệ qui

Trang 35

Tháp Hà nội: Giải pháp đệ qui

Trang 36

Tháp Hà nội: Giải pháp đệ qui

Trang 37

Tháp Hà nội: Giải pháp đệ qui

Trang 38

Tháp Hà nội: Giải pháp đệ qui

Trang 39

Tháp Hà nội: Giải pháp đệ qui

• Remarkable properties of recursive solution

 Takes 2 n - 1 moves to solve n disc problem.

 Sequence of discs is same as subdivisions of ruler.

 Every other move involves smallest disc.

• Recursive algorithm may reveal fate of world

 Takes 585 billion years for n = 64 (at rate of 1 disc

per second).

 Reassuring fact: any solution takes at least this long!

Trang 40

Chia để trị

• Chia để trị

 Chia thành nhiều vấn đề nhỏ hơn với cùng một cấu trúc.

 Giải quyết các vấn đề nhỏ bằng đệ qui cùng một giải pháp

 Nhóm các kết quả để có giải pháp cho cả bài toán

• Ứng dụng thực tế.

 Xử lý dữ liệu: FFT for signal processing.

 Chương trình dịch: Parsers for programming languages.

 Tính vi phân: Multigrid methods for solving PDEs.

 Sắp xếp: Quicksort and mergesort for sorting.

Divide et impera Veni, vidi, vici - Julius Caesar

Trang 41

Fibonacci Numbers Dãy số Fibonacci

Dãy số Fibonacci bắt nguồn từ bài toán cổ về việc sinh sản của các cặp thỏ Bài toán đặt ra như sau:

• Các con thỏ không bao giờ chết

• Hai tháng sau khi ra đời, mỗi cặp thỏ mới sẽ sinh ra một cặp thỏ con (một đực, một cái)

• Khi đã sinh con rồi thì cứ mỗi tháng tiếp theo chúng lại

sinh được một cặp con mới

Trang 42

Fibonacci Numbers Dãy số Fibonacci

• Giả sử từ đầu tháng 1 có một cặp mới ra đời thì đến giữa tháng thứ n sẽ có bao nhiêu cặp

• Ví dụ, n = 5, ta thấy:

 Giữa tháng thứ 1: 1 cặp (ab) (cặp ban đầu)

 Giữa tháng thứ 2: 1 cặp (ab) (cặp ban đầu vẫn chưa đẻ)

 Giữa tháng thứ 3: 2 cặp (AB)(cd) (cặp ban đầu đẻ ra thêm 1 cặp con)

 Giữa tháng thứ 4: 3 cặp (AB)(cd)(ef) (cặp ban đầu tiếp tục đẻ)

 Giữa tháng thứ 5: 5 cặp (AB)(CD)(ef)(gh)(ik) (cả cặp (AB) và

Trang 43

Fibonacci Numbers Dãy số Fibonacci

• Bây giờ, ta xét tới việc tính số cặp thỏ ở tháng thứ n:

F(n)

• Nếu mỗi cặp thỏ ở tháng thứ n - 1 đều sinh ra một cặp

thỏ con thì số cặp thỏ ở tháng thứ n sẽ là:

F(n) = 2 * F(n - 1)

Trang 44

Fibonacci Numbers and Nature

pinecone

cauliflower

Trang 47

Đánh giá Đệ qui 1

• Q Cách tính này có hiệu quả không F(50)?

• A Không hiệu quả

if (n == 0 ) return 0 ;

if (n == 1 ) return 1 ; return F(n- 1 ) + F(n- 2 );

}

F(50) F(49) F(48) F(48)

F(47) F(46)

F(47) F(46) F(45)

F(46) F(45) F(44)

F(47) F(46) F(45)

Trang 49

Summary – Kết luận

Thông thường thay vì sử dụng lời giải đệ quy cho một bài toán, ta có thể

thay thế bằng lời giải không đệ quy (khử đệ quy) bằng phương pháp lặp.

Ưu điểm

• Thuận lợi cho việc biểu diễn bài toán

• Gọn (đối với chương trình)

Hạn chế

• Có khi không được tối ưu về thời gian

• Có thể gây tốn bộ nhớ

Chính vì vậy, trong lập trình người ta cố tránh sử dụng thủ tục đệ quy nếu

thấy không cần thiết

Trang 50

Discussion – Câu hỏi

https://sites.google.com/site/daonamanhedu/data-structure-algorithm

Ngày đăng: 06/11/2017, 12:35

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