Bài giảng giải thuật và lập trình full

401 811 0
Bài giảng giải thuật và lập trình full

Đ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

Dynamic programming giaûi baøi toaùn baèng caùch keát hôïp caùc lôøi giaûi cuûa caùc baøi toaùn con. (ôû ñaây “programming” khoâng coù nghóa laø laäp trình). So saùnh dynamic programming vaø “chiavaøtrò” (divideandconquer) Giaûi thuaät chiavaøtrò chia baøi toaùn thaønh caùc baøi toaùn con ñoäc laäp , giaûi chuùng baèng ñeä quy, keát hôïp chuùng ñeå coù lôøi giaûi cho baøi toaùn ban ñaàu. Giaûi thuaät dynamic programming caùc baøi toaùn con khoâng ñoäc laäp vôùi nhau: chuùng coù chung caùc baøi toaùn con nhoû hôn. giaûi moãi baøi toaùn con chæ moät laàn, vaø ghi nhôù lôøi giaûi ñoù trong moät baûng ñeå truy caäp khi caàn ñeán.

Dynamic Programming 13.9.2004 Ch 1: Dynamic Programming Giới thiệu ° ∆ψναµιχ προγ ραµµινγ — — ° giải toán cách kết hợp lời giải toán (ở “programming” nghóa lập trình) Σο σανη δψναµιχ προγ ραµµινγ ϖα “ χηια−ϖα− τρ∫ ” ( διϖιδε−ανδ−χονθυερ) — Giải thuật chia-và-trò ° ° ° — chia toán thành toán độc lập , giải chúng đệ quy, kết hợp chúng để có lời giải cho toán ban đầu Giải thuật dynamic programming ° ° 13.9.2004 toán không độc lập với nhau: chúng có chung toán nhỏ giải toán lần, ghi nhớ lời giải bảng để truy cập cần đến Ch 1: Dynamic Programming Bài toán tối ưu ° Βαι τοαν το〈ι υ — — ° có nhiều lời giải lời giải có trò Τµ λι γ ιαι χο τρ∫ το〈ι υ ( χχ τιε∑υ ηαψ χχ 〉 αι) 13.9.2004 Ch 1: Dynamic Programming Nguyên tắc cuûa dynamic programming ° Μο τ γ ιαι τηυα τ δψναµιχ προγ ραµµινγ 〉 χ ξαψ δνγ θυα βο〈ν βχ: Ξαχ 〉 ∫ νη χα〈υ τρυχ χυα µο τ λι γ ιαι το〈ι υ ∇ ∫ νη νγ η⌠α 〉 ε θυψ χηο γ ια τρ∫ χυα µο τ λι γ ιαι το〈ι υ Τνη γ ια τρ∫ χυα µο τ λι γ ιαι το〈ι υ τ δι λεν ( “ βοττοµ−υπ ” ) Ξαψ δνγ λι γ ιαι το〈ι υ τ χαχ τηονγ τιν 〉 α⌡ τνη 13.9.2004 Ch 1: Dynamic Programming Nhân chuỗi ma trận ° ° ° ° Χηο µο τ χηυοι µα τρα ν 〈Α 1, Α 2, , Α ν 〉 Ξαχ 〉 ∫ νη τχη Α 1Α ⋅ ⋅ ⋅ Α ν δα τρεν γ ιαι τηυα τ ξαχ 〉 ∫ νη τχη χυα ηαι µα τρα ν Βιε∑υ διεν χαχη τνη τχη χυα µο τ χηυοι µα τρα ν βανγ χαχη “〉 ατ γ ι⌡α νγ οαχ ” ( πα ’ ρεντηεσιζε ) χαχ χαπ µα τρα ν σε⌡ 〉 χ νηαν ϖι νηαυ Μο τ τχη χυα µο τ χηυοι µα τρα ν λα φ υλλψ παρεντηεσιζεδ νε〈υ νο λα — — ma trận tích hai tích chuỗi ma trận fully parenthesized khác, đặt ngoặc ς δυ: µο τ ϖαι τχη χυα χηυοι µα τρα ν 〉 χ φ υλλψ παρεντηεσιζεδ — — — A (AB) ((AB)C) 13.9.2004 Ch 1: Dynamic Programming Chuỗi ma trận fully parenthesized ° ς δυ: Χηο µο τ χηυοι µα τρα ν 〈Α , Α , Α , Α 〉 Τχη Α 1Α 2Α 3Α χο τηε∑ 〉 χ (A1(A2(A3A4))) φ υλλψ παρεντηεσιζεδ τηεο 〉 υνγ χαχη κηαχ νηαυ: (A1((A2A3)A4)) ((A1A2)(A3A4)) ((A1(A2A3))A4) (((A1A2)A3)A4) 13.9.2004 Ch 1: Dynamic Programming Nhân hai ma trận ° Τχη χυα ηαι µα τρα ν Α ϖα Β ϖι — — A coù chiều p × q B có chiều q × r λα µο τ µα τρα ν Χ χο χηιε◊υ λα π × ρ MATRIX-MULTIPLY(A, B) if columns[A] ≠ rows[B] then error “các chiều không tương thích” else for i ← to rows[A] for j ← to columns[B] C[i, j] ← for k ← to columns[A] C[i, j] ← C[i, j] + A[i, k]⋅ B[k, j] return C ° Τηι γ ιαν 〉 ε∑ τνη Χ τψ λε ϖι σο〈 πηεπ νηαν ϖο ηνγ τηχ τηι τρονγ δονγ 7, τχ λα π × θ × ρ 13.9.2004 Ch 1: Dynamic Programming Phí tổn để nhân chuỗi ma trận ° ° Νηα ν ξετ: Π η το∑ν νηαν µο τ χηυοι µα τρα ν τυψ τηυο χ ϖαο χαχη 〉 ατ γ ι⌡α νγ οαχ ( παρεντηεσιζατιον) ς δυ: Χηο χηυοι µα τρα ν 〈Α , Α , Α 〉 τρονγ 〉 ο χαχ χηιε◊υ ( διµενσιον) χυα 10 ì 100, 100 ì , ϖα × 50 Χο 〉 υνγ χαχη 〉 ε∑ 〉 ονγ νγ οαχ ηοαν τοαν τχη Α 1Α 2Α : — Caùch 1: ((A1A2)A3) ° Tính A1A2 cần 10 ⋅ 100 ⋅ = 5000 phép nhân vô hướng Kế nhân A1A2 với A3 cần 10 ⋅ ⋅ 50 = 2500 phép nhân vô hướng ° Tổng cộng: 7500 phép nhân vô hướng Cách 2: (A1(A2A3)) ° — ° ° ° 13.9.2004 Tính A2A3 cần 100 ⋅ ⋅ 50 = 25000 phép nhân vô hướng Kế nhân A1 với A2A3 cần 10 ⋅ 100 ⋅ 50 = 50000 phép nhân vô hướng Tổng cộng: 75000 phép nhân vô hướng Ch 1: Dynamic Programming Bài toán nhân chuỗi ma trận ° ° ° Χηο χηυοι µα τρα ν 〈Α , Α , , Α ν 〉 γ ο◊µ ν µα τρα ν, τρονγ 〉 ο χηιε◊υ χυα Α ι λα π ι−1 × π ι , ϖι ι = , ,…, ν Βαι τοαν: Ξαχ 〉 ∫ νη µο τ 〉 ονγ νγ οαχ ηοαν τοαν χηο τχη Α 1Α 2⋅ ⋅ ⋅ Α ν σαο χηο σο〈 πηεπ νηαν ϖο ηνγ λα το〈ι τηιε∑υ Γιαι βαι τοαν τρεν βανγ χαχη ϖετ χαν? 13.9.2004 Ch 1: Dynamic Programming Đếm số cách đóng ngoặc ° ° ° Χηο µο τ χηυοι γ ο◊µ ν µα τρα ν 〈Α , Α , Α , , Α ν 〉 Νηα ν ξετ: ταο ρα µο τ χαχη 〉 ονγ νγ οαχ βανγ χαχη ταχη ( σπλιτ) γ ι⌡α Α κ ϖα Α κ+ , ϖι κ = 1, 2, , ν − 1, ταο ρα ηαι χηυοι χον Α 1Α ⋅ ⋅ ⋅ Α κ ϖα Α κ+ ⋅ ⋅ ⋅ Α ν , σαυ 〉 ο 〉 ονγ νγ οαχ µοι χηυοι χον Γ οι Π( ν) λα σο〈 χαχ χαχη 〉 ονγ νγ οαχ χηο µο τ χηυοι ν µα τρα ν — — n = có cách đóng ngoặc (không cần dấu ngoặc tường minh) Vậy P(1) = n ≥ từ nhận xét ta có n −1 P ( n) = ∑ P ( k ) P ( n − k ) k =1 Τ 〉 ο χηνγ µινη 〉 χ: ° ) = Ω(4πη / n νγ) πηαπ ϖετ χαν δυψε τ θυα τα〈τ ςα P ψ (nδυνγ χα χαχ χαχη 〉 ονγ νγ οαχ 〉 ε∑ τµ µο τ 〉 ονγ νγ οαχ το〈ι υ χα◊ν τηι γ ιαν χηαψ λυ⌡ψ τηα 13.9.2004 n 3/ Ch 1: Dynamic Programming 10 Thực thi APPROX-VERTEX-COVER b c d a e f b c d a e f b c d a e f 21.5.2004 g g g b c d a e f b c d a e f b c d a e f Chương 37 Approximation Algorithms g g g 387 Phân tích APPROX-VERTEX-COVER Νηα ν ξετ: Τηι γ ιαν χηαψ χυα Α ΠΠΡΟΞ −ς ΕΡΤΕΞ −Χ ΟςΕΡ λα Ο( Ε) ∇ ∫ νη λψ Α ΠΠΡΟΞ −ς ΕΡΤΕΞ −Χ ΟςΕΡ λα µο τ γ ιαι τηυα τ 2−ξα〈π ξ τρονγ τηι γ ιαν 〉 α τηχ 21.5.2004 Chương 37 Approximation Algorithms 388 ° ° Bài toán người bán hàng rong với bất đẳng thức tam giác Χηο µο τ 〉 ο◊ τη∫ 〉 α◊ψ 〉 υ ϖο ηνγ Γ = ( ς, Ε) χυνγ ϖι µο τ ηαµ χηι πη χ : Ε → Ζ + Τµ µο τ χηυ τρνη ηαµιλτον ( µο τ τουρ) χυα Γ ϖι πη το∑ν νηο νηα〈τ ∇ ιε◊υ κιε ν: Η αµ χηι πη χ: Ε → Ζ + τηοα µα⌡ν βα〈τ 〉 ανγ τηχ ταµ γ ιαχ 21.5.2004 APPROX-TSP-TOUR(G, c) c(u,một w) ≤ đỉnh c(u, v)r + ∀u, v, w ∈ V chọn ∈ c(v, V[G] w), làm đỉnh “gốc” nuôi lớn khung nhỏ T cho G từ gốc r dùng giải thuật MST-PRIM(G, c, r) gọi L danh sách đỉnh thăm viếng phép duyệt theo kiểu tiền thứ tự Chương 37 return chu trình hamilton H viếng Approximation Algorithms đỉnh theo thứ tự L 389 Thực thi APPROX-TSP-TOUR lên ví dụ a d a d e f b c e g f b g c h h (a) (b) Cây khung nhỏ T tính MST-PRIM, đỉnh a đỉnh gốc 21.5.2004 Chương 37 Approximation Algorithms 390 Thực thi APPROX-TSP-TOUR lên ví dụ (tieáp) a d a d e f b c e g f b g c h h (c) (d) Duyeät T a Tua H có từ kết Thứ tự đỉnh duyệt duyệt theo kiểu kiểu hoàn toàn là: a, b, c, b, h, tiền thứ tự mà APPROXb, a, d, e, f, e, g, e, d, a Thứ tự TSP-TOUR tìm Chi phí đỉnh duyệt kiểu tiền tua H khoảng 21.5.2004 391 thứ tự là: a, b, c, h, d, e, f,Chương g 37 chừng 19,074 Approximation Algorithms Thực thi APPROX-TSP-TOUR lên ví dụ (tiếp) a d e f b g c h (e) Tua tối ưu H∗ , có chi phí 14,715 21.5.2004 Chương 37 Approximation Algorithms 392 Bài toán người bán hàng rong với bất đẳng thức tam giác • • • ∇ ∫ νη λψ 37.2 Α Π Π ΡΟΞ −ΤΣΠ−Τ ΟΥΡ λα µο τ γ ιαι τηυα τ 2−ξα〈π ξ τηι γ ιαν 〉 α τηχ χηο βαι τοαν νγ ι βαν ηανγ ρονγ ϖι βα〈τ 〉 ανγ τηχ ταµ γ ιαχ Χηνγ µινη A)α= ∑ c(u, v) Χηο Α ⊆ Ε, 〉 ∫ νη νγc(η⌠ ( u , v )∈ A ° ° ° Γοι Η ∗ λα µο τ τυα το〈ι υ, γ οι Η λα τυα µα Α Π Π ΡΟΞ −ΤΣΠ−Τ ΟΥΡ τµ 〉 χ Χα◊ν χηνγ µινη: χ( Η ) ≤ 2χ( Η ∗ ) ( ∗) Τα χο χ( Τ) ≤ χ( Η ∗ − ε) ≤ χ( Η ∗ ) ϖ νε〈υ ξοα 〉 ι βα〈τ χ χανη ε ναο χυα Η ∗ τη 〉 χ µο τ χαψ κηυνγ , µα Τ λαι λα χαψ κηυνγ νηο νηα〈τ 21.5.2004 Chương 37 Approximation Algorithms 393 ° ° ° • Bài toán người bán hàng rong với bất đẳng thức tam giác Χηνγ µινη ( τιε〈π) χ( Ω) = 2χ( Τ) , ϖι Ω λα κε〈τ θυα µο τ δυψε τ ηοαν τοαν χαψ Τ τ 〉 νη ρ, ϖ µοι χανη χυα Τ 〉 χ 〉 ι θυα ηαι λα◊ν χ( Ω) ≤ 2χ( Η ∗ ) , τ τρεν ϖα ϖ ( ∗) Νηνγ Ω κηονγ πηαι λα τυα ϖ µοι 〉 νη 〉 χ τηαµ ηαι λα◊ν, δο 〉 ο “ τρανη τηαµ µοι 〉 νη λα◊ν τη ηαι ” ( = δυψε τ χαψ τηεο κιε∑υ τιε◊ν τη τ) 〉 ε∑ χο 〉 χ τυα Η , χηι πη κηονγ τανγ ϖ βα〈τ 〉 ανγ τηχ ταµ γ ιαχ, δο 〉 ο χ( Η ) ≤ χ( Ω) ≤ 2χ( Η ∗ ) 21.5.2004 Chương 37 Approximation Algorithms 394 Bài toán người bán hàng rong tổng quát • • • ° ∇ ∫ νη λψ Νε〈υ Π ≠ ΝΠ ϖα ρ ≥ , τη κηονγ το◊ν ται γ ιαι τηυα τ ξα〈π ξ τηι γ ιαν 〉 α τηχ ϖι τ σο〈 ξα〈π ξ ρ χηο βαι τοαν νγ ι βαν ηανγ ρονγ το∑νγ θυατ Χηνγ µινη Χηνγ µινη βανγ πηαν χηνγ Γ ια σ χο µο τ σο〈 νγ υψεν ρ ≥ ϖα µο τ γ ιαι τηυα τ ρ−ξα〈π ξ τηι γ ιαν 〉 α τηχ Α χηο βαι τοαν νγ ι βαν ηανγ ρονγ το∑νγ θυατ Η νγ χηνγ µινη: Σε⌡ δυνγ Α 〉 ε∑ γ ιαι βαι τοαν χηυ τρνη Η αµιλτον Η Α Μ −ΧΨΧΛ Ε τρονγ τηι γ ιαν 〉 α τηχ ς Η Α Μ −ΧΨΧΛ Ε λα ΝΠ −〉 α◊ψ 〉 υ ϖα τηεο γ ια τηιε〈τ Π ≠ ΝΠ νεν Α κηονγ χηαψ τρονγ τηι γ ιαν 〉 α τηχ, µαυ τηυα∑ν! 21.5.2004 Chương 37 Approximation Algorithms 395 Bài toán người bán hàng rong tổng quát • ° • • • Χηνγ µινη ( τιε〈π) Γοι Γ = ( ς, Ε) λα µο τ τηχ τηε∑ ( ινστανχε) χυα βαι τοαν χηυ τρνη ηαµιλτον Τ Γ 〉 ∫ νη νγ η⌠α 〉 ο◊ τη∫ Γ ’ = ( ς, Ε ’) λα 〉 ο◊ τη∫ 〉 α◊ψ 〉 υ τρεν ς, ϖι ηαµ χηι πη χ( υ, ϖ) = νε〈υ ( υ, ϖ) ∈ Ε = ρ| ς| + τρονγ χαχ τρνγ ηπ κηαχ Χαχ βιε∑υ διε∑ν χυα Γ ’ ϖα χ χο τηε∑ τνη 〉 χ τ µο τ βιε∑υ διεν χυα Γ τρονγ τηι γ ιαν 〉 α τηχ τηεο | ς| ϖα | Ε| 21.5.2004 Chương 37 Approximation Algorithms 396 Bài toán người bán hàng rong toồng quaựt ( ) οι Η ∗ λα τυα το〈ι υ χυα Γ ’, γ οι Η λα τυα µα Α τµ 〉 χ, τα χο χ( Η ) ≤ ρ⋅ χ( Η ∗ ) Π ηαν βιε τ ηαι τρνγ ηπ: — — • ° Trường hợp c(H ) > ρ| V| ρ| V| < c(H ) ≤ ρ⋅ c(H∗ ) ⇒ | V| < c(H∗ ) Vậy H∗ phải chứa cạnh ∉ E Suy G chu trình hamilton Trường hợp c(H ) ≤ ρ| V| c(H ) < ρ| V| + = chi phí cạnh ∉ E Do H chứa cạnh G, từ suy H chu trình hamilton G ςα ψ τα χο τηε∑ δυνγ γ ιαι τηυα τ Α 〉 ε∑ γ ιαι βαι τοαν χηυ τρνη ηαµιλτον τρονγ τηι γ ιαν 〉 α τηχ Μ αυ τηυαν ϖι γ ια τηιε〈τ Π ≠ ΝΠ ! 21.5.2004 Chương 37 Approximation Algorithms 397 Bài toán che phủ tập ° Μο τ τηχ τηε∑ ( Ξ, F ) χυα βαι τοαν χηε πηυ τα π γ ο◊µ µο τ τα π η⌡υ ηαν Ξ ϖα µο τ ηο F χαχ τα π χον χυα Ξ σαο χηο X =  S S ∈F X=  S S ∈C Μο τ τα π χον C ⊆ F 〉 χ γ οι λα χηε πηυ Ξ νε〈υ ° Βαι τοαν χηε πηυ τα π λα τµ µο τ τα π χον C ⊆ F , ϖι | C | λα νηο νηα〈τ, σαο χηο C χηε πηυ Ξ 21.5.2004 Chương 37 Approximation Algorithms 398 ° ° Dạng đònh toán che phủ taäp ∆ανγ βαι τοαν θυψε〈τ 〉 ∫ νη χηο βαι τοαν χηε πηυ τα π λα τµ µο τ χηε πηυ σαο χηο κχη τηχ χυα νο ≤ κ, ϖι κ λα µο τ τηαµ σο〈 χυα µο τ τηχ τηε∑ χυα βαι τοαν θυψε〈τ 〉 ∫ νη Βαι τοαν θυψε〈τ 〉 ∫ νη χηο βαι τοαν χηε πηυ τα π λα ΝΠ−〉 α◊ψ 〉 υ 21.5.2004 Chương 37 Approximation Algorithms 399 ° Một giải thuật xấp xỉ cho toán che phủ tập Μο τ γ ιαι τηυα τ ξα〈π ξ χηο βαι τοαν χηε πηυ τα π — dùng phương pháp greedy GREEDY-SET-COVER(X, F ) 21.5.2004 U ←X C ←∅ while U ≠ ∅ chọn S ∈ F cho | S ∩ U | lớn U ← U −S C ← C ∪ {S} return C Chương 37 Approximation Algorithms 400 Phân tích GREEDY-SET-COVER Γ οι σο〈 〉 ιε◊υ ηοα τη δ λα Η δ : d i δ Τνη χηα〈τ:i =1 Η Hd = ∑ ≤ λν δ + ∇ ∫ νη λψ Γ ΡΕΕ ∆Ψ −Σ ΕΤ −Χ ΟςΕΡ λα µο τ γ ιαι τηυα τ ρ( ν) − ξα〈π ξ τηι γ ιαν 〉 α τηχ, ϖι ρ( ν) = Η ( µαξ{| Σ | : Σ ∈ F }) Νηα ν ξετ: µαξ{| Σ | : Σ ∈ F } ≤ | Ξ | Η ε λυα ν Γ ΡΕΕ ∆Ψ −Σ ΕΤ −Χ ΟςΕΡ λα µο τ γ ιαι τηυα τ ( λν | Ξ | + 1) −ξα〈π ξ τηι γ ιαν 〉 α τηχ 21.5.2004 Chương 37 Approximation Algorithms 401 ... ραµµινγ — — ° giải toán cách kết hợp lời giải toán (ở “programming” nghóa lập trình) Σο σανη δψναµιχ προγ ραµµινγ ϖα “ χηια−ϖα− τρ∫ ” ( διϖιδε−ανδ−χονθυερ) — Giải thuật chia -và- trò ° ° ° —... thành toán độc lập , giải chúng đệ quy, kết hợp chúng để có lời giải cho toán ban đầu Giải thuật dynamic programming ° ° 13.9.2004 toán không độc lập với nhau: chúng có chung toán nhỏ giải toán lần,... sử dụng bảng chung mà triệu gọi giải thuật đệ quy truy cập để ° ° 13.9.2004 ghi kết sau giải toán đọc kết toán giải Ch 1: Dynamic Programming 24 Memoize giải thuật RECURSIVE-MATRIX-CHAIN ° °

Ngày đăng: 10/05/2018, 09:43

Từ khóa liên quan

Mục lục

  • Dynamic Programming

  • Giới thiệu

  • Bài toán tối ưu

  • Nguyên tắc của dynamic programming

  • Nhân một chuỗi ma trận

  • Chuỗi ma trận fully parenthesized

  • Nhân hai ma trận

  • Phí tổn để nhân một chuỗi ma trận

  • Bài toán nhân chuỗi ma trận

  • Đếm số cách đóng ngoặc

  • Bước 1: Cấu trúc của một đóng ngoặc tối ưu

  • Bước 1: Cấu trúc của một đóng ngoặc tối ưu (tiếp)

  • Bước 2: Giải đệ quy

  • Bước 2: Giải đệ quy (tiếp)

  • Bước 3: Tính các chi phí tối ưu

  • Bước 3: Tính các chi phí tối ưu (tiếp)

  • Phân tích MATRIX-CHAIN-ORDER

  • Chạy MATRIX-CHAIN-ORDER lên một ví dụ

  • Bước 4: Xây dựng một lời giải tối ưu

  • Các yếu tố để áp dụng dynamic programming

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

Tài liệu liên quan