1. Trang chủ
  2. » Luận Văn - Báo Cáo

Bài giảng Thiết kế và đánh giá thuật toán: Lập trình động - TS. Lê Nguyên Khôi

22 0 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

Trong lĩnh vực Công Nghệ Thông Tin nói riêng, yêu cầu quan trọng nhất của người học đó chính là thực hành. Có thực hành thì người học mới có thể tự mình lĩnh hội và hiểu biết sâu sắc với lý thuyết. Với ngành mạng máy tính, nhu cầu thực hành được đặt lên hàng đầu. Tuy nhiên, trong điều kiện còn thiếu thốn về trang bị như hiện nay, người học đặc biệt là sinh viên ít có điều kiện thực hành. Đặc biệt là với các thiết bị đắt tiền như Router, Switch chuyên dụng

Thiết Kế & Đánh Giá Thuật Tốn Lập Trình Động TS Lê Nguyên Khôi Trường Đại Học Công Nghệ - ĐHQGHN Nội Dung Kỹ thuật thiết kế lên (bottom-up)  Một số toán tiêu biểu  Chia Để Trị - Nhắc Lại   Kỹ thuật thiết kế thuật toán Ý tưởng      Thiết kế xuống (top-down design) Chia toán lớn thành tốn nhỏ khơng giao Giải toán nhỏ (theo phương pháp đệ quy) Gộp lời giải tốn nhỏ thành lời giải tốn lớn Ví dụ    Sắp xếp gộp (merge sort) Sắp xếp nhanh (quick sort) Tính số Fibonacci Lập Trình Động   Kỹ thuật thiết kế thuật toán Ý tưởng     Thiết kế lên (bottom-up design) Lần lượt giải toán từ nhỏ đến lớn Xây dựng lời giải toán lớn dựa lời giải tốn nhỏ Ví dụ   Sắp xếp chèn (insertion sort) Tính số Fibonacci Lập Trình Động  Bài tốn có tính chất Các tốn gối (overlapping)  Cấu trúc tối ưu (optimal structure)   Lời giải tối ưu tốn sử dụng để xây dựng lời giải tối ưu cho tốn tồn cục Lập Trình Động  Áp dụng cho tốn tối ưu Có nhiều lời giải khả thi  Mỗi lời giải có giá trị đặc trưng  Tìm lời giải có giá trị đặc trưng tối ưu  Có thể có nhiều lời giải có giá trị đặc trưng tối ưu  Thiết kế cấu trúc (bảng) để lưu kết  Lập Trình Động  Dựa bước sau Đưa cách tính nghiệm tốn Tìm cơng thức xây dựng nghiệm tốn thơng qua nghiệm toán Thiết kế bảng để lưu nghiệm tốn Tính nghiệm tốn từ nhỏ đến lớn Xây dựng nghiệm toán cần tìm từ bảng Chia Để Trị – Lập Trình Động Lựa chọn kỹ thuật quan trọng  Áp dụng chia để trị cho toán mà toán gối  Giải lại tốn  Khơng hiệu   Ví dụ: tính số Fibonacci Bài Tốn Dãy Fibonacci  Hệ số nhị thức  Dãy tăng dài  Bài tốn ba lơ  Dãy chung dài  Cắt dây  Dãy Fibonacci   = 0,1  =   +  ≥  Chia để trị   Bài tốn có giao Lập trình động  Bảng lưu kết giá trị  tính Hệ Số Nhị Thức  −1 −1  ,  = = +  −1   Chia để trị   Bài tốn có giao Lập trình động  Bảng lưu kết giá trị  ,  tính 10 Dãy Con Tăng Dài Nhất Tìm dãy tăng dài dãy số S  Ví dụ  S = { 14, 1, 17, 2, 16, 17, 3, 15, 4, 1, 5, 18, 13, 6, 7, 19, 8, 12, 1, 9, 10, }  Dãy tăng S’ = { 14, 1, 17, 2, 16, 17, 3, 15, 4, 1, 5, 18, 13, 6, 7, 19, 8, 12, 1, 9, 10, }  Dãy tăng dài S = { 14, 1, 17, 2, 16, 17, 3, 15, 4, 1, 5, 18, 13, 6, 7, 19, 8, 12, 1, 9, 10, }  11 Dãy Con Tăng Dài Nhất Bài toán con: Tìm dãy tăng dài kết thúc phần tử thứ k  Thuật toán  Nếu tất phần tử trước k lớn S[k], trả dãy chứa S[k]  Nếu có t phần tử đứng trước k nhỏ S[k], gọi W dãy dài dãy tăng kết thúc phần tử Trả W ∪ S[k]  12 Dãy Con Tăng Dài Nhất S = { 14, 1, 17, 2, 16, 17, 3, 15, 4, 1, 5, 18, 13, 6, 7, 19, 8, 12, 1, 9, 10, } Sử dụng tất Si xây dựng để tiếp tục xây dựng Sj s1 s2 s3 s4 s5 s6 s7 s8 s9 s10 s11 s12 s13 s14 s15 s16 s17 s18 s19 s20 s21 s22 14 17 16 17 15 18 13 19 12 10 {14} {1} {14|1, 17} {1, 2} 13 Dãy Con Tăng Dài Nhất S = { 14, 1, 17, 2, 16, 17, 3, 15, 4, 1, 5, 18, 13, 6, 7, 19, 8, 12, 1, 9, 10, } Sử dụng tất Si xây dựng để tiếp tục xây dựng Sj s1 s2 s3 s4 s5 s6 s7 s8 s9 s10 s11 s12 s13 s14 s15 s16 s17 s18 s19 s20 s21 s22 14 17 16 17 15 18 13 19 12 10 {14} {1} {14|1, 17} {1, 2} {1, 2, 16} {1, 2, 16, 17} {1, 2, 3} {1, 2, 3, 15} {1, 2, 3, 4} {1} {1, 2, 3, 4, 5} {1, 2, 3, 4, 5, 18} {1, 2, 3, 4, 5, 13} {1, 2, 3, 4, 5, 6} {1, 2, 3, 4, 5, 6, 7} {1, 2, 3, 4, 5, 6, 7, 19} {1, 2, 3, 4, 5, 6, 7, 8} {1, 2, 3, 4, 5, 6, 7, 8, 12} {1} {1, 2, 3, 4, 5, 6, 7, 8, 9} {1, 2, 3, 4, 5, 6, 7, 8, 9, 10} {1, 2, 3, 4, 5, 6, 7, 8} 14 Ba Lơ Có N đồ vật, đồ vật i có khối lượng wi giá trị ti ba lơ mang khơng M kg Tìm cách mang số đồ vật để tổng giá trị lấy lớn Ví dụ N = 5, M = 10 i A B C D E wi ti $100 $200 $301 $400 $500 15 Ba Lô for ô [x, y] if x = y = then Đồ vật A B C D E cell[x, y] = 0kg $0 {} Khối lượng Giá trị 1kg $100 3kg $200 5kg $301 7kg $400 9kg $500 else gọi m đồ vật thêm vào cột y gọi w khối lượng m if w > khối lượng cực đại hàng cell[x, y] = cell[x, y-1] else cell[x, y] = max {cell[x, y-1], (cell[x-w, y-1] U {m})} tập rỗng kg ≤ kg ≤ kg ≤ kg ≤ kg ≤ kg ≤ kg ≤ kg ≤ kg ≤ kg ≤ kg ≤ 10 0kg 0kg 0kg 0kg 0kg 0kg 0kg 0kg 0kg 0kg 0kg $0 $0 $0 $0 $0 $0 $0 $0 $0 $0 $0 A {} {} {} {} {} {} {} {} {} {} {} 0kg 1kg 1kg 1kg 1kg 1kg 1kg 1kg 1kg 1kg 1kg $0 $100 $100 $100 $100 $100 $100 $100 $100 $100 $100 A/B {} {A} {A} {A} {A} {A} {A} {A} {A} {A} {A} 0kg 1kg 1kg 3kg 4kg ?kg ?kg ?kg ?kg ?kg ?kg $0 {} $100 {A} $100 {A} $200 {B} $300 {A, B} $? $? $? $? $? $? {} {} {} {} {} {} ?kg ?kg ?kg ?kg ?kg ?kg ?kg ?kg ?kg ?kg ?kg A/B/C $? $? $? $? $? $? $? $? $? $? $? {} {} {} {} {} {} {} {} {} {} {} ?kg ?kg ?kg ?kg ?kg ?kg ?kg ?kg ?kg ?kg ?kg A/B/C/D $? $? $? $? $? $? $? $? $? $? $? {} {} {} {} {} {} {} {} {} {} {} ?kg ?kg ?kg ?kg ?kg ?kg ?kg ?kg ?kg ?kg ?kg A/B/C/D/E $? {} $? {} $? {} $? {} $? {} $? {} $? {} $? {} $? {} $? {} $? {} 16 Ba Lô for ô [x, y] if x = y = then Đồ vật A B C D E cell[x, y] = 0kg $0 {} Khối lượng Giá trị 1kg $100 3kg $200 5kg $301 7kg $400 9kg $500 else gọi m đồ vật thêm vào cột y gọi w khối lượng m if w > khối lượng cực đại hàng cell[x, y] = cell[x, y-1] else cell[x, y] = max {cell[x, y-1], (cell[x-w, y-1] U {m})} kg ≤ kg ≤ kg ≤ kg ≤ kg ≤ kg ≤ kg ≤ kg ≤ kg ≤ kg ≤ kg ≤ 10 0kg 0kg 0kg 0kg 0kg 0kg 0kg 0kg 0kg 0kg 0kg tập rỗng $0 $0 $0 $0 $0 $0 $0 $0 $0 $0 $0 {} {} {} {} {} {} {} {} {} {} {} 0kg 1kg 1kg 1kg 1kg 1kg 1kg 1kg 1kg 1kg 1kg A $0 $100 $100 $100 $100 $100 $100 $100 $100 $100 $100 {} {A} {A} {A} {A} {A} {A} {A} {A} {A} {A} 0kg 1kg 1kg 3kg 4kg 4kg 4kg 4kg 4kg 4kg 4kg A/B $0 $100 $100 $200 $300 $300 $300 $300 $300 $300 $300 {} {A} {A} {B} {A, B} {A, B} {A, B} {A, B} {A, B} {A, B} {A, B} 0kg 1kg 1kg 3kg 4kg 5kg 6kg 6kg 8kg 9kg 9kg A/B/C $0 {} $100 {A} $100 {A} $200 {B} $300 {A, B} $301 {C} $401 {A,C} $401 {A,C} $501 {B,C} $601 {A, B, C} $601 {A, B, C} 0kg 1kg 1kg 3kg 4kg 5kg 6kg 6kg 8kg 9kg 9kg A/B/C/D $0 {} $100 {A} $100 {A} $200 {B} $300 {A, B} $301 {C} $401 {A,C} $401 {A,C} $501 {B,C} $601 {A, B, C} $601 {A, B, C} 0kg 1kg 1kg 3kg 4kg 5kg 6kg 6kg 8kg 9kg 9kg A/B/C/D/E $0 {} $100 {A} $100 {A} $200 {B} $300 {A, B} $301 {C} $401 {A,C} $401 {A,C} $501 {B,C} $601 {A, B, C} $601 {A, B, C} 17 Dãy Con Chung Dài Nhất Cho dãy [1 ] [1 ], tìm dãy chung dài chúng : A : B B D C C B A Dãy chung: ? AB D B A A ? BCDB B ? BCBA 18 Dãy Con Chung Dài Nhất Cho dãy [1 ] [1 ], tìm dãy chung dài chúng : A : B B D C C B A D B A A B LCS(, ) = BCBA 19 Dãy Con Chung Dài Nhất Kiểm tra tất dãy [1 ] xem có phải dãy [1 ] khơng  Phân tích  Kiểm tra =   cho dãy  Có 2 dãy   Thời gian chạy xấu =  2 , thời gian hàm mũ  20 Cắt Dây  Đọc Mục 15.1 Tr.360 21

Ngày đăng: 02/07/2023, 05:24

Xem thêm: