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 quy hoạch động TS đào nam anh

25 156 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 25
Dung lượng 612,72 KB

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

Nội dung

Data Structure and Algorithm 1Qui hoạch động Dr.. Data Structure and Algorithm 2• Robert Sedgewick, and Kevin Wayne, “Algorithms” Princeton University, 2011, Addison Wesley • Algorithm

Trang 1

Data Structure and Algorithm 1

Qui hoạch động

Dr Dao Nam Anh

Trang 2

Data Structure and Algorithm 2

• 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

Sư Phạm, 2002

Trang 3

Data Structure and Algorithm 3

tập dữ liệu có kích thước ½

 Chia vấn đề này thành 2 phần và thực hiện từng

phần

Chi phí thời gian: T N = T k + T N-k + 1

• Many recursive programs use recursive calls on two subsets of inputs

(two halves usually)

 Divide the problem and solve them – divide and conquer paradigm

 Complexity: T N = T k + T N-k + 1

Trang 4

Data Structure and Algorithm 4

Trang 5

Data Structure and Algorithm 5

Trang 6

Data Structure and Algorithm 6

2

3

Trang 7

Data Structure and Algorithm 7

Trang 8

Data Structure and Algorithm 8

Trang 9

Data Structure and Algorithm 9

Trang 10

Data Structure and Algorithm 10

7 3

Trang 11

Data Structure and Algorithm 11

7 3

8

Trang 12

Data Structure and Algorithm 12

71

2

3

Trang 13

Data Structure and Algorithm 13

71

2

3

10 1

Trang 14

Data Structure and Algorithm 14

71

Trang 15

Data Structure and Algorithm 15

71

12

7 1

3 2

7 3

Trang 16

Data Structure and Algorithm 16

71

12

7 1

3 2

7 3

Trang 17

Data Structure and Algorithm 17

các chương trình này thường kéo theo những

đòi hỏi lớn về không gian bộ nhớ và một khối

lượng tính toán khổng lồ.

một kỹ thuật nhằm đơn giản hóa việc tính toán

các công thức truy hồi bằng cách lưu trữ toàn

bộ hay một phần kết quả tính toán tại mỗi

bước với mục đích sử dụng lại

Trang 18

Data Structure and Algorithm 18

toán “từ dưới lên” (Bottom-up).

• Từ “programming” ở đây không liên quan gì tới việc

lập trình cho máy tính, đó là một thuật ngữ mà các

nhà toán học hay dùng để chỉ ra các bước chung

trong việc giải quyết một dạng bài toán hay một lớp

các vấn đề

• Không có một thuật toán tổng quát để giải tất cả các

bài toán quy hoạch động.

Trang 19

Data Structure and Algorithm 19

con đó Việc giải từng bài toán con lại đưa về phép

phân rã tiếp thành nhiều bài toán nhỏ hơn và lại đi giải

tiếp bài toán nhỏ hơn đó bất kể nó đã được giải hay

chưa.

Quy hoạch động bắt đầu từ việc giải tất cả các bài

toán nhỏ nhất ( bài toán cơ sở) để từ đó từng bước

giải quyết những bài toán lớn hơn, cho tới khi giải

được bài toán lớn nhất (bài toán ban đầu).

Trang 20

Data Structure and Algorithm 20

trọng lượng khác nhau W[i], có giá trị khác nhau

V[i] Một tên trộm đột nhập vào siêu thị, tên trộm

mang theo một cái túi có thể mang được tối đa

» N types of items of varying size and value

» One knapsack (belongs to a thief!)

 Find: the combination of items that maximize the total value

Trang 21

Data Structure and Algorithm 21

bằng cách chọn trong các gói {1, 2, …,

i} với giới hạn trọng lượng j

Thì giá trị lớn nhất khi được chọn trong số

n gói với giới hạn trọng lượng M chính

là F[n, M].

Trang 22

Data Structure and Algorithm 22

trong số các gói {1, 2, …, i - 1, i} để có giá trị

Trang 23

Data Structure and Algorithm 23

mà W[i] ≤ j) thì F[i, j] bằng giá trị gói thứ i là V[i]

cộng với giá trị lớn nhất có thể có được bằng cách

chọn trong số các gói {1, 2, …, i - 1} với giới hạn

trọng lượng j - W[i] Tức là về mặt giá trị thu được:

F[i, j] = V[i] + F[i - 1, j - W[i]]

Vì theo cách xây dựng F[i, j] là giá trị lớn nhất có thể,

nên F[i, j] sẽ là max trong 2 giá trị thu được ở trên.

Trang 24

Data Structure and Algorithm 24

{ int i, space, max, maxi, t;

if (maxKnown[M] != unknown) return maxKnown[M];

for (i = 0, max = 0; i < N; i++)

if ((space = M-items[i].size) >= 0)

if ((t = knap(space) + items[i].val) > max) { max = t; maxi = i; }

maxKnown[M] = max; itemKnown[M] = items[maxi];

return max; }

Trang 25

Data Structure and Algorithm 25

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