Thế nào là động lực học về lập trình động là gì?


9

Một trong những người cao niên của tôi đã có một cuộc phỏng vấn việc làm và anh ta được hỏi tại sao nó được gọi là năng động. Anh ta không thể trả lời và sau khi anh ta từ bỏ người phỏng vấn nói rằng không có gì năng động về nó, nó chỉ được gọi như thế. Đó là điều khó tin đối với tôi.

Có phải nó đề cập đến thực tế là các bài toán con được giải trong thời gian chạy và được sử dụng để đạt được mục tiêu cuối cùng? Giống như phân bổ bộ nhớ động xảy ra trong thời gian chạy?

[CÂU TRẢ LỜI]

Tôi nên có đọc này bài viết wiki trước khi đặt câu hỏi, xin lỗi.


2
Câu trả lời ngắn gọn, đó chỉ là một cái tên. Không cần phải có nghĩa đen.
Yuval Filmus

4
Có thể cho rằng, việc triển khai DP (điền bảng) điển hình là tĩnh như thuật toán có thể nhận được.
Raphael

Câu trả lời:


1

Tôi luôn hiểu rằng điều đó có nghĩa là các thuật toán sử dụng lập trình động dường như chỉnh sửa không gian vấn đề một cách " động " cho đến khi vấn đề có thể được giải quyết bằng thuật toán tham lam.

Ví dụ, với bài toán Checkerboard , thuật toán lập trình động chỉnh sửa toàn bộ bảng khi nó đi qua, và cuối cùng, thuật toán tham lam có thể được sử dụng (tương tự, với thuật toán đường đi ngắn nhất của Dijkstra, v.v.).

Tôi không chắc chắn nếu điều này khái quát cho mọi vấn đề lập trình động.


9

Thật ra, không có gì đặc biệt trong cái tên "lập trình động"; kỹ thuật tự nó chỉ là về đệ quy thông minh tháo gỡ thông minh. Xem câu hỏi này và xem câu trả lời @Jeffe, trong đó được báo cáo rằng Belman chọn tên đó để đánh lạc hướng.


3
Trong khi về mặt lý thuyết có thể trả lời câu hỏi, tốt hơn là nên bao gồm các phần thiết yếu của câu trả lời ở đây và cung cấp liên kết để tham khảo.
John Dvorak

Một người nào đó ở Wikipedia dường như không đồng ý, tôi chỉ thấy điều này - Nó động vì các giá trị trong bảng được thuật toán điền vào dựa trên các giá trị khác của bảng và nó lập trình theo nghĩa là đặt mọi thứ vào một bảng, như cách truyền hình lập trình liên quan đến thời điểm phát sóng những gì hiển thị - tại Wikibooks
kintoki

@akki: có những ví dụ về lập trình động trong đó không cần một bảng nào cả ...
Massimo Cafaro

1
@akki: như một ví dụ, tính toán các số Fibonacci theo cách từ dưới lên chỉ yêu cầu không gian không đổi để lưu các số Fibonacci cần thiết để tính toán số tiếp theo trong chuỗi; tính toán Kết quả chung dài nhất của hai chuỗi có độ dài và có thể được thực hiện bằng cách sử dụng không gian thay vì bảng đầy đủ , v.v. m n O ( m i n ( m , n ) ) m nO(1)mnO(min(m,n))mn
Massimo Cafaro

2
@akki: đó chính xác là những gì tôi đề cập đến khi tôi nói rằng DP nói về việc giải quyết một cách thông minh sự đệ quy! Nhưng bản thân cái tên là vô nghĩa và vẫn vô nghĩa.
Massimo Cafaro

6

Có một câu chuyện thú vị ở đây .. Bellman đã đi tiên phong trong mô hình này. Nhưng, đây thực sự là nghiên cứu toán học. Quay trở lại thời của ông, bộ trưởng quốc phòng lúc đó đã hoang tưởng về những từ Research and Math (thằng điên, phải không!). Bellman sợ rằng người bí mật sẽ tức giận với công việc của mình và cuối cùng sẽ khiến anh gặp rắc rối. Vì vậy, để làm mờ mọi thứ một chút, anh ta gọi nó là Lập trình động , tuy nhiên không có gì "động" về nó cả ..


1
Nguồn cho việc này? Có vẻ như một câu chuyện thực sự thú vị.
jmite

Cũng như một ghi chú bên lề: dường như chưa rõ ai là người đầu tiên nghĩ ra Lập trình động . Bellman nên được ghi nhận vì đã chứng minh rằng bất kỳ triển khai Lập trình động nào khi được tối ưu đều tuân theo cái gọi là phương trình Bellman-Ford. Thật không may, có vẻ như nhiều người dễ dàng tin rằng điều đó khiến Bellman trở thành nhà nghiên cứu chính đằng sau ý tưởng ban đầu.
Carlos Linares López

@jmite tôi đã đọc cái này ở một nơi nào đó (có thể là một số blog) .. tôi sẽ cố gắng cung cấp nguồn ...
Subhayan

@jmite Bạn có thể tìm thấy câu chuyện trong bài giảng của Jeff trong Bài giảng 5: Lập trình động và cả trong wiki: lập trình động .
hengxin

3

Richard Bellman gọi đó là Lập trình động theo từ trong Bellman nhập mô tả hình ảnh ở đây

Tôi đã dành quý mùa thu (năm 1950) tại RAND. Nhiệm vụ đầu tiên của tôi là tìm tên cho các quy trình ra quyết định nhiều tầng.

Một câu hỏi thú vị là, cái tên, lập trình động, đến từ đâu? Những năm 1950 không phải là năm tốt cho nghiên cứu toán học. Chúng tôi đã có một quý ông rất thú vị ở Washington tên Wilson. Ông là Bộ trưởng Quốc phòng, và ông thực sự có một nỗi sợ bệnh lý và sự căm ghét đối với nghiên cứu từ ngữ. Tôi không sử dụng thuật ngữ này một cách nhẹ nhàng; Tôi đang sử dụng nó một cách chính xác. Khuôn mặt anh ta sẽ ngộp thở, anh ta sẽ đỏ lên và anh ta sẽ trở nên hung bạo nếu mọi người sử dụng thuật ngữ nghiên cứu trong sự hiện diện của anh ta. Bạn có thể tưởng tượng anh ấy cảm thấy thế nào, sau đó, về thuật ngữ, toán học. Tập đoàn RAND được sử dụng bởi Không quân, và Không quân có Wilson là ông chủ của nó. Do đó, tôi cảm thấy mình phải làm gì đó để bảo vệ Wilson và Không quân khỏi thực tế là tôi đang thực sự làm toán trong Tập đoàn RAND. Tên gì, tên gì, tôi có thể chọn không? Ở nơi đầu tiên tôi quan tâm đến việc lập kế hoạch, ra quyết định, suy nghĩ. Nhưng kế hoạch, không phải là một từ tốt vì nhiều lý do. Do đó tôi quyết định sử dụng từ "lập trình". Tôi muốn vượt qua ý tưởng rằng đây là động lực, đây là đa tầng, điều này thay đổi theo thời gian. Tôi nghĩ, chúng ta hãy giết hai con chim bằng một hòn đá. Chúng ta hãy lấy một từ có ý nghĩa hoàn toàn chính xác, cụ thể là động, theo nghĩa vật lý cổ điển. Nó cũng có một tính chất rất thú vị như một tính từ, và không thể sử dụng từ động theo nghĩa miệt thị. Hãy thử nghĩ về một số kết hợp có thể sẽ mang lại cho nó một ý nghĩa miệt thị. Điều đó là không thể. Vì vậy, tôi nghĩ lập trình động là một cái tên hay. Đó là điều mà ngay cả một Dân biểu cũng không thể phản đối.

Nguồn: Mắt bão, Richard Bellman (Tự truyện)

Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.