Nếu bạn có thể đổi tên chương trình động


43

Nếu bạn có thể đổi tên chương trình động, bạn sẽ gọi nó là gì?


1
Tôi muốn nói lập trình động là lập trình động. Đó là một khái niệm riêng biệt từ các thuật toán. Nếu bạn hỏi "các ứng dụng thuật toán của lập trình động", điều đó sẽ có ý nghĩa hơn với tôi.
Yoshio Okamoto

1
Tất nhiên dp là dp, nhưng lập trình và động đều có nghĩa là một cái gì đó khác ngày hôm nay, vì vậy khi tôi dạy lập trình động, tôi ước nó có một tên khác.
Jack

4
Xin lỗi, tôi không đủ rõ ràng. Bạn có quan tâm đến lập trình động nói chung, bao gồm việc sử dụng trong điều khiển và hoạch định chính sách, v.v., và thậm chí lập trình động ngẫu nhiên, hoặc chỉ lập trình động như một phương pháp để thiết kế thuật toán? Khán giả chính ở đây sẽ chỉ biết cái sau, nhưng câu hỏi của bạn khá chung chung sẽ bao gồm cái trước.
Yoshio Okamoto

1
Yoshio, tôi nghĩ bạn chỉ nên giải thích khái niệm tổng quát hơn tôn trọng sự khác biệt trong một câu trả lời vì nó có thể khai sáng cho nhiều người trong chúng ta.
Raphael

2
Một ý tưởng không hoàn toàn khác: "điều giúp bạn có việc làm tại Google" - dựa trên kinh nghiệm mà các sinh viên của tôi đã có :)
Suresh Venkat

Câu trả lời:


50

Cuốn tự truyện của Richard Bellman cho thấy rằng ông đã chọn thuật ngữ lập trình động động của người Hồi giáo là để cố tình đánh lạc hướng.

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. Anh ta là thư ký của Bộ Quốc phòng, và anh ta thực sự có một nỗi sợ hãi bệnh hoạn và căm ghét từ 'nghiên cứu'. 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' khi có mặt anh ta. Sau đó, bạn có thể tưởng tượng anh ấy cảm thấy thế nào 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ôi có thể chọn tiêu đề nào, tên gì? Ở 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, đây là sự thay đổi theo thời gian mà tôi nghĩ, 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à đó là 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 của người Viking '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.

(Như Russell và Norvig đã chỉ ra trong sách giáo khoa AI của họ, tuy nhiên, câu chuyện này phải là sự tô điểm sáng tạo cho sự thật. Lần đầu tiên Bellman sử dụng cụm từ "lập trình động" vào năm 1952 , và Charles Erwin Wilson đã không trở thành Bộ trưởng Quốc phòng cho đến năm 1953. )

Dù sao, động lực ban đầu của Bellman cho thấy kế hoạch nhiều tầng , nhưng ít nhất là cho các mục đích thuật toán, tôi thích một cái gì đó như đệ quy từ dưới lên thanh đạm , chỉ với ít âm tiết hơn.


10
Tất nhiên, điều tôi thực sự muốn làm là đổi tên Equation của Bell Bellman, hoặc như các nhà khoa học máy tính gọi nó, là bất kỳ sự tái phát nào.
Jeffε

2
câu trả lời của bạn đã được sử dụng ở đây: biostar.stackexchange.com/questions/17954
Pierre

28

Có hai khía cạnh quan trọng của DP: (1) xác định các bài toán con (nghĩa là thiết lập một "bảng", có thể là một mảng nhiều chiều được lập chỉ mục bởi các số nguyên, đỉnh, tập con của các đỉnh, v.v.) và (2) giải quyết đệ quy các bài toán con. Tôi đề xuất "đệ quy dạng bảng / được lập bảng" như là một tên đề cập đến cả hai khía cạnh.


6
đệ quy bảng có một cảm giác tốt đẹp với nó.
Suresh Venkat

21

Ghi nhớ là một biến thể khá phổ biến.


8
Ghi nhớ được sử dụng, nhưng không đặc trưng cho dp.
Jack

20
Chính xác. Ghi nhớ là lập trình động do tình cờ.
Jeffε

@prof miếng erickson - nói rất hay. tôi không thể nhịn được cười.
Akash Kumar

7
Tuy nhiên, nếu chúng ta chọn một tên mới cho DP, thì việc sử dụng ghi nhớ sẽ khá phù hợp với nó. Ví dụ: "khoảng cách chỉnh sửa có thể được tính toán trong nhiều thời gian bằng cách sử dụng ghi nhớ".
Noam

Lập trình động là một trường hợp đặc biệt của ghi nhớ, cộng với luồng điều khiển rõ ràng thay vì tuân theo thứ tự đánh giá ứng dụng tự nhiên. Thật xấu hổ, nó thường được dạy theo cách của nó, vì nó tập trung quá nhiều vào việc điền vào một bảng, thay vì đặc tả đệ quy. Nó đi qua như huyền diệu.
Neil Toronto

8

Để đi với sự phân chia và chinh phục , tôi sẽ nói mối nối và kết hợp.

Tôi thường sử dụng cả hai từ, mối nốikết hợp trong khi giảng dạy / giải thích DP; nhưng không được sử dụng mối nối và kết hợp rõ ràng. Đôi khi tôi đã sử dụng chồng chéo-chia-và-chinh phục để tương phản hai mô hình.


6

Sau bài giảng gần đây của tôi về lập trình động trong thiết kế thuật toán, tôi đã yêu cầu sinh viên gợi ý một tên mới cho kỹ thuật này. Trong khi tôi thích thú với "Lập trình cứng rắn", tôi muốn thứ gì đó có thể làm cho kỹ thuật trở nên đáng nhớ hơn. Sau cuộc thảo luận ở đây, tôi có thể đề xuất hai tên, một cho từ trên xuống và một cho từ dưới lên:
Multiway-Divide và Memized-Conquer (còn gọi là Divide ^ M & Conquer ^ M) và
Hợp nhất tất cả các bài toán con (hay còn gọi là Merge_all)


1
Tôi không nghĩ rằng tạo ra một sự liên kết mạnh mẽ với sự phân chia và chinh phục thông thường (như trong Mergesort) là một ý tưởng tốt. Ở đó, các bài toán con được giải quyết độc lập và chỉ có hai kết quả được hợp nhất. Trong DP, các bài toán con được kiểm tra không độc lập và tất cả các kết hợp được kiểm tra. (cả về mặt thô). Do đó tôi nghĩ rằng một cái tên nên làm nổi bật sự khác biệt hơn là tạo ra cảm giác tương đồng.
Raphael

@Raphael, tôi chia sẻ mối quan tâm về sự nguy hiểm của việc tạo ra một hiệp hội mạnh mẽ, nhưng không đồng ý với tuyên bố của bạn về sự khác biệt. Trong DP, điều quan trọng là các bài toán con được "giải quyết độc lập" mặc dù các giải pháp cho các bài toán con được chia sẻ. Tôi thường chỉ ra rằng nếu một nhà tiên tri nói với bạn sự phân chia đúng đắn, đó sẽ là sự chia rẽ và chinh phục, nhưng vì tôi không nói tiếng Hy Lạp (không giống như cố vấn tiến sĩ của tôi), tôi phải thử tất cả các bộ phận có thể.
Jack

2
Vâng, các bài toán con là độc lập về mặt khái niệm . Tuy nhiên, tôi đã liên quan đến họ bằng cách sử dụng cùng một kết quả, như bạn chỉ ra. Điều này tách DP khỏi D & C, vì có thể song song với cái sau mà không cần tính toán các bài toán con nhiều lần (hoặc truyền đạt kết quả) so với trước. Sự tương tự của bạn là tốt đẹp nhưng không đảm bảo tên trong trường hợp này vì việc tìm ra các phân chia chính xác là một phần thiết yếu của vấn đề. Tôi cho rằng bạn có thể nói rằng DP là một khái quát của D & C dựa trên lý do đó.
Raphael

@Raphael, xin lỗi vì có tính mô phạm, nhưng vì đây là câu hỏi về giảng dạy, tôi muốn khái niệm độc lập của tiểu dự án được rõ ràng và chỉ nói "độc lập về mặt khái niệm" là không chính xác. Khi bạn thử phân chia, các biểu tượng con bạn sản xuất có thể không có phụ thuộc. Các ý kiến ​​khác của bạn tập trung vào các bước của thuật toán DP; Tôi thích tập trung đầu tiên vào việc xác định chính xác vấn đề cần giải quyết. Ví dụ yêu thích của tôi: tam giác trọng lượng tối thiểu và phân tách lồi tối thiểu của đa giác đơn giản ( cs.unc.edu/~snoeyink/demos/convdecomp/MWTDemo.html )
Jack

Nó là ok để được mặt dây chuyền. Nhưng hãy xem xét việc nhập khẩu bằng cách lựa chọn từ ngữ: bạn nói với các sinh viên rằng các bài toán con là độc lập và sau đó cung cấp cho họ một thuật toán không tách rời tính toán của họ, nhưng thực tế phụ thuộc rất nhiều vào tính toán "xen kẽ". Tôi nghĩ rằng có thể rất khó hiểu. Do đó, bạn thực sự phải tách biệt khái niệm / toán học / tối ưu hóa / ... và tính độc lập tính toán tại một số điểm.
Raphael


2

Tôi đã thảo luận điều này với một số đồng nghiệp gần đây và sau một cuộc thảo luận sôi nổi, chúng tôi đã đưa ra bộ nhớ đệm cuộc gọi dạng bảng .


3
nghe có vẻ giống như những gì bạn làm tại một trung tâm cuộc gọi thuê ngoài;)
Suresh Venkat

2

Tôi muốn đề xuất tên Lập trình quy nạp - như một loại hình cầu nối từ thời đại chúng ta đến thời kỳ tốt đẹp cũ của Euler, Kepler et al. Hoặc thậm chí có thể lập trình ngược quy nạp . Và vâng, đối với tôi DP liên quan mật thiết đến Cảm ứng, theo nghĩa tốt của khái niệm cũ. Ghi nhớ, lưu trữ, bảng, vv chỉ là các yếu tố của kỹ thuật, không phải là cốt lõi của cách tiếp cận để phá vỡ mọi thứ.


Vấn đề chính của tôi với DP là P. vì vậy tôi không phải là người hâm mộ ý tưởng này ..
Suresh Venkat

1

Có lẽ một cái gì đó bao gồm bảng từ và điền , vì đây là những gì xảy ra.


7
Bah Lập trình động không phải là về bảng ; đó là về đệ quy thông minh.
Jeffε

3
Tôi cảm thấy tốt hơn khi tách hai khía cạnh: "Trích xuất cấu trúc đệ quy khỏi vấn đề và viết ra như một sự tái diễn" (mô hình hóa) và "Giải quyết sự tái phát thu được theo cách từ dưới lên" (thuật toán). Tôi cảm thấy lập trình động (trong các thuật toán) đề cập đến cả hai, và đây cũng là trường hợp cho lập trình tuyến tính, lập trình số nguyên, lập trình semidefinite, v.v.
Yoshio Okamoto

1
Bàn đôi khi được sử dụng. Lập trình động trên cây (ví dụ: tập độc lập tối đa) thường không sử dụng bảng [= mảng] để ghi nhớ sự tái diễn; nó sử dụng một cây, hoặc trong một số trường hợp là một mảng các mảng, hoặc một mảng các cây hoặc trong một số trường hợp là một sản phẩm của Cartesian của các cây. Tương tự như vậy đối với lập trình động trên dags hoặc lập trình động đối với phân rã cây cho các đồ thị của treewidth giới hạn.
Jeffε

1
JeffE, một tên cho một kỹ thuật hầu như không bao giờ bao gồm tất cả các ứng dụng. Lấy "đường chéo", ví dụ; trong các ứng dụng nâng cao, không có đường chéo nào ở bất kỳ đâu trong tầm nhìn (hoặc ít nhất không phải là khu vực hành động độc quyền). Nhưng dù sao thì tôi cũng không quá yêu "điền bảng", trong khi tôi nghĩ nó có thể là cái tên hợp lý cho người mới bắt đầu.
Raphael

3
2 xu của tôi về chủ đề này. Lập trình động có hai khía cạnh riêng biệt để thiết kế thuật toán. Đầu tiên là để hiểu các cơ chế của dp như trong: đệ quy thông minh cộng với ghi nhớ dẫn đến một thuật toán nhanh hơn. Khía cạnh thứ hai là làm thế nào để nhận ra rằng một vấn đề có thể thừa nhận một đệ quy thông minh và đưa ra nó. Cả hai đều quan trọng để dạy. Đối với trường hợp sau, một trường hợp phổ biến là phân chia và chinh phục với sự tương tác hạn chế và theo quan điểm của tôi đáng để làm nổi bật rõ ràng.
Chandra Chekuri

1

Chế độ xem đệ quy hoặc chân trời đệ quy


Chân trời lười biếng? Bạn trì hoãn tính toán rất nhiều kết quả cho đến khi chúng là cần thiết. DP không cần phải được đệ quy.
Chad Brewbaker 6/214

0

Tôi đặt tên cho nó là "Chuyển tiếp đệ quy với ghi nhớ".

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.