Đối với quy hoạch động để áp dụng đối với một vấn đề, cần có
i. Cấu trúc tối ưu trong các biểu mẫu con:
Điều này có nghĩa là khi bạn chia nhỏ vấn đề thành các đơn vị nhỏ hơn, các đơn vị nhỏ hơn cũng cần được chia thành các đơn vị nhỏ hơn để có giải pháp tối ưu. Ví dụ, trong sắp xếp hợp nhất, một mảng các số có thể được sắp xếp nếu chúng ta chia nó thành hai mảng con, làm cho chúng được sắp xếp và kết hợp chúng. Trong khi phân loại hai subarrays này, lặp lại cùng một quá trình bạn đã làm theo trong câu trước. Vì vậy, một giải pháp tối ưu (một mảng được sắp xếp) là có khi chúng tôi tìm thấy một giải pháp tối ưu cho các vấn đề con của nó (chúng tôi sắp xếp các subarrays và kết hợp chúng). Yêu cầu này được đáp ứng cho sắp xếp hợp nhất. Ngoài ra, các bài toán con phải độc lập để chúng tuân theo một cấu trúc tối ưu.Điều này cũng được thực hiện bằng cách sắp xếp hợp nhất vì các giải pháp của các giải pháp con không bị ảnh hưởng bởi các giải pháp của nhau. Ví dụ, các giải pháp cho hai phần của một mảng không bị ảnh hưởng bởi sự sắp xếp của nhau.
ii. Overlapping subproblems:
Điều này có nghĩa là trong khi giải quyết giải pháp, các vấn đề con bạn xây dựng được lặp lại và do đó chỉ cần được giải quyết một lần. Trong trường hợp sắp xếp hợp nhất, yêu cầu này sẽ chỉ được đáp ứng hiếm khi trong trường hợp bình thường. Một loạt các số như 2 1 3 4 9 4 2 1 3 1 9 4 có thể là một ứng cử viên tốt cho các vấn đề con chồng chéo cho sắp xếp hợp nhất. Trong trường hợp này, giải pháp cho loại phân loại con (2 1 3) có thể được lưu trữ trong một bảng để được tái sử dụng, bởi vì nó sẽ được gọi hai lần trong quá trình tính toán. Nhưng như bạn có thể thấy, có một cơ hội rất mỏng mà một mảng ngẫu nhiên các số sẽ có loại này của một contrivance lặp đi lặp lại. Vì vậy, nó sẽ chỉ không hiệu quả nếu chúng ta sử dụng một kỹ thuật lập trình động như ghi nhớ cho một thuật toán như sắp xếp hợp nhất.
Không. Thuật toán của Dijkstra sử dụng chiến lược tham lam.
Có. Nếu tôi có thể trích dẫn Wikipedia ở đây, "Lập trình động được sử dụng rộng rãi trong tin sinh học cho các nhiệm vụ như sắp xếp chuỗi, gấp protein, dự đoán cấu trúc RNA và liên kết protein-DNA." [1]
[1] https://en.wikipedia.org/wiki/Dynamic_programming
gì bạn có nghĩa là 'ứng dụng' –