1. Trang chủ
  2. » Giáo Dục - Đào Tạo

Tài liệu Thiết kế thuật toán 1 ppt

10 332 2
Tài liệu được quét OCR, nội dung có thể không chính xác
Tài liệu đã được kiểm tra trùng lặp

Đang tải... (xem toàn văn)

THÔNG TIN TÀI LIỆU

Thông tin cơ bản

Tiêu đề Chia để trị (Divide and Conquer)
Tác giả Lê Sỹ Vinh
Trường học Đại học Công nghệ - Đại học Quốc gia Hà Nội
Chuyên ngành Khoa học Máy Tính
Thể loại Bài thuyết trình
Thành phố Hà Nội
Định dạng
Số trang 10
Dung lượng 79,41 KB

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

Nội dung

Thiết kế thuật toán Lé SY Vinh Bộ môn Khoa Học Máy Tính — Khoa CNTT Dai Hoc Cong Nghé - DHQGHN vinhioi@yahoo.com... Chia Dé Tri Divide and Conquer Chia bài toán lớn thành các bài toán

Trang 1

Thiết kế thuật toán

Lé SY Vinh

Bộ môn Khoa Học Máy Tính — Khoa CNTT

Dai Hoc Cong Nghé - DHQGHN

vinhioi@yahoo.com

Trang 2

Chia Dé Tri (Divide and Conquer)

Chia bài toán lớn thành các bài toán có kích thước nhỏ

Cải các bài toán có kích thước nhỏ

Kêt hợp nghiệm của các bài toán có kích thước nhỏ đê giải bài toán lớn

Trang 3

Ví dụ: Dãy sô Fibonacci

Day Fibonacci:

012358 13

ý) =0

⁄ =1

TK) = fk-D) + f(k-2)

Fibonacci DAC (k) {

if (k == 0) return 0

else if (k == 1) return I

else return Fibonacci DAC (k-1) + fibonacci DAC (k-2)

j

Nhận xét: Các bài toán nhỏ được giải quyết dựa vào những bài toán nhỏ hơn gidng nhau

Trang 4

Quy hoach dong (Dynamic programming)

* Gidng phuong phap ‘chia-dé-tri’ (divide-and-conquer) la giai quyét bai toán lớn dựa vào kêt quả các bài toán con

¢ Điểm khác biệt là quy hoạch động lưu lại nghiệm của tất cả các bài toán

con, môi bài toán con chỉ phải tính toán l lân

° - Quy hoach động thường được dùng để giải quyết những bài toán liên quan đên tôi ưu hóa (tim nghiệm tôt nhât)

Trang 5

Ví dụ: Dãy sô Fibonacci

int fib[N];

for (int i = 0; i<= N; i++)

fib[i] = -1;

fib[0|= 0;

fib[1] = 1;

int fibonacci (int k) {

if (fib[k] == -1)

fib[k] = fibonacci (k-1) + fibonacci (k-2);

return fib[k];

Trang 6

Câu trúc chung của phương pháp quy hoạch động

Đưa ra cách tính nghiệm của các bài toán con đơn giản Tìm công thức xây dựng nghiệm của bài toán thông qua nghiệm của các bài toán con

Thiết kế bảng để lưu nghiệm của các bài toán

Tính nghiệm của các bài toán từ nhỏ đến lớn

Xây dựng nghiệm của bài toán cân tìm từ bảng

Trang 7

Vị dụ: Bài toán cái ba lô

Có N đồ vật, đô vật ¡ có khôi lượng w, và giá trỊ /, Một tên trộm có | chiếc ba

lô có thê mang được không qúa M kg Hãy tìm cách mang một số đồ vật để tong giá trị lây được là lớn nhất Biết răng, w, nguyên dương nhỏ hơn 101, 1⁄4 nguyên dương nhỏ hơn 1001

Vị dụ

N=4.M-=I0

l

l

Trang 8

Ví dụ: Dãy con chung

Cho hai dãy sô 4 = (a; ,a,) và 8 = (bạ„, ,b,„), tim day s6 C = (c,, ,¢,) sao

cho C la day con cua ca A va B, va C dai nhat co thé

Vi du:

A= (3, 5, 1, 3, 5, 5, 3)

B=(1, 5, 3,5, 3, 1)

C=(5, 3, 5,3) hoac (1, 3, 5, 3) hoac (1, 5, 5, 3)

Trang 9

Ví dụ: Dãy con liên nhau tông lớn nhất

Cho dãy SO A = (a, -,a,), tim dãy con liên nhau (đ, đ, , ¬ a;) voi tong lon nhat

Vi du:

A=(-3, 5, -4, 3, 2, -4, 1)

Day con lién nhau tong lớn nhất: (5, -4, 3, 2)

Trang 10

Vị dụ: Chia kẹo

Có N gói kẹo, gói kẹo 7 có ø, cái Hãy chia N gói kẹo trên thành 2 đồng sao cho chênh lệnh giữa tổng số kẹo của hai đồng là ít nhất Lưu ý là không được chia nhỏ các gói kẹo ra

Vị dụ:

N=»

13495

Chia thành: 19 va3 45

Ngày đăng: 12/12/2013, 13:15

TỪ KHÓA LIÊN QUAN

w