Dijkstra đã giao nhiệm vụ gì cho các tình nguyện viên, được đề cập trong bài báo của anh ấy về The Humble Lập trình viên?


65

Trong bài viết "Lập trình viên khiêm tốn" của Dijkstra , ông đã đề cập rằng ông đã đưa ra một số tình nguyện viên để giải quyết:

Tôi đã thực hiện một thử nghiệm lập trình nhỏ với các tình nguyện viên thực sự có kinh nghiệm, nhưng một điều gì đó khá ngoài ý muốn và khá bất ngờ đã xuất hiện. Không ai trong số các tình nguyện viên của tôi tìm thấy giải pháp rõ ràng và thanh lịch nhất. Khi phân tích kỹ hơn, điều này hóa ra có một nguồn chung: khái niệm lặp lại của họ được liên kết chặt chẽ với ý tưởng về một biến được kiểm soát liên quan sẽ được đẩy mạnh, đến nỗi họ bị chặn về mặt tinh thần khi nhìn thấy điều hiển nhiên. Các giải pháp của họ kém hiệu quả, khó hiểu và không mất nhiều thời gian để tìm ra chúng.

Vấn đề Dijkstra đã đưa ra cho các tình nguyện viên là gì? Các giải pháp là gì?


3
Tôi đặt cược vào một cái gì đó đệ quy. EWD654 "Để vinh danh Fibonacci" dường như là một ứng cử viên sáng giá
gnat

Câu hỏi này có thể tốt miễn là mọi người không sử dụng điều này như một cơ hội để đoán hoặc suy đoán: có thể khó tìm ra, nhưng nó có một câu trả lời và các câu hỏi lịch sử là chủ đề ở đây.

9
Câu nói đó đến từ EWD340 "Những lập trình viên rất khiêm tốn". Tôi không thể tìm thấy một mô tả chính xác về thí nghiệm là gì, nhưng đây là một liên kết đến bản ghi lại toàn bộ bài nói chuyện của anh ấy. cs.utexas.edu/~EWD/transcrip/EWD03xx/EWD340.html
Tyler Ferraro

2
Bất cứ ai cũng có thể tìm thấy một trích dẫn Dijkstra miễn phí về bất cứ điều gì? Câu nói yêu thích của tôi về anh ấy là "sự kiêu ngạo trong khoa học máy tính được đo bằng nano-Dijkstras" - Alan Kay
James Anderson

Chúng ta phải rất cẩn thận khi đưa ra lời khuyên cho những người trẻ tuổi hơn: đôi khi họ làm theo nó! ... heh :-) nguồn: en.wikiquote.org/wiki/Edsger_W._Dijkstra
Robert Pháp

Câu trả lời:


11

"Vấn đề triết gia ăn uống" là vấn đề được trình bày.

Về cơ bản có 5 triết gia cần ăn. (hãy tưởng tượng một đĩa thức ăn không bao giờ kết thúc trước mỗi triết gia), giữa mỗi đĩa là một cái nĩa (5 đĩa, 5 dĩa, 5 triết gia).

Một triết gia chỉ có thể ăn nếu anh ta cầm cả nĩa bên phải và nĩa bên trái. (chỉ có hai triết gia có thể ăn bất cứ lúc nào).

Một ngã ba có thể được nhặt bất cứ lúc nào nó có sẵn và đặt xuống nếu nó đang được giữ. Mỗi ngã ba phải được chọn phụ thuộc lẫn nhau. (cùng một lúc).

Trong khi một triết gia không ăn, họ đang suy nghĩ (nhu cầu thay thế các trạng thái là điều thúc đẩy vấn đề).

Làm thế nào để bạn cho phép mỗi người ăn và suy nghĩ xen kẽ (để những người khác có thể ăn) mà không tạo ra một hệ thống bế tắc (nơi một triết gia đang cầm một nĩa và chờ người kia, ngăn không cho một triết gia khác ăn).

Điều này có nguồn gốc từ các hệ thống đồng thời và là một câu hỏi đại học điển hình được trình bày khi thảo luận về Đồng thời.

Tôi tin rằng 4 hoặc 5 thuật toán "chính thức" đã được phát triển để giải quyết vấn đề nhưng một tìm kiếm nhanh trên google về "Vấn đề triết gia ăn uống" sẽ giúp bạn có được kết quả tốt.

Nếu bạn đọc phiên bản gốc của bài báo trong phần chú thích ở trang 866, nó ghi: "Thủ tục tố tụng của Đại hội IFIP năm 1965, 213-217." Giải pháp cho một vấn đề trong kiểm soát lập trình đồng thời. "

Vấn đề trong đồng thời và các tài nguyên được chia sẻ là "Vấn đề triết gia ăn uống". :-)

Mong rằng sẽ giúp.


6
Vì đây chủ yếu là một câu hỏi lịch sử, nguồn nào?
yannis

1
Trên thực tế không, các nguồn bạn cung cấp dường như không đề cập đến vấn đề triết gia ăn uống như một Dijkstra đã đưa ra cho các tình nguyện viên. Tui bỏ lỡ điều gì vậy? Những gì tôi đang tìm kiếm là nguồn đáng tin cậy để hỗ trợ "Vấn đề triết gia ăn uống" của bạn là vấn đề được đưa ra , chứ không phải mô tả về vấn đề (mặc dù các liên kết của bạn có nhiều thông tin và thú vị).
yannis

@Robert Cảm ơn các liên kết. :) (đừng loại bỏ chúng, chúng có thể hữu ích cho người khác) Tôi đang mong chờ liệu đó có phải là vấn đề mà anh ấy đưa ra không.
dùng712092

4
@RobertFbler Điều chúng tôi đang tìm kiếm là vấn đề cụ thể mà Dijkstra đề cập đến trong đoạn trích trong câu hỏi và các nguồn chứng minh điều đó, không chỉ là bất kỳ vấn đề nào Dijkstra đưa ra. Không có gì trong trích dẫn thậm chí cho thấy đó là một trong những vấn đề của riêng mình, nó có thể là bất kỳ vấn đề thực sự. Tất nhiên các nhà triết học ăn uống là một trong những bản gốc của Dijkstra (với sự giúp đỡ của CAR Hoare), không ai tranh luận về điều đó, nhưng điều đó không liên quan gì đến câu hỏi .
yannis

4
Đây chỉ là một lỗi bình thường. "Giải pháp cho một vấn đề trong kiểm soát lập trình đồng thời" là Vấn đề của các nhà triết học ăn uống và nó được tham chiếu trong Lập trình viên khiêm tốn là một trong những công trình trước đây của Dijkstra trong trích dẫn, nhưng cho rằng đó cũng là vấn đề trong trích dẫn.
yannis
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.