Dijkstra ทำหน้าที่อะไรให้อาสาสมัครซึ่งถูกกล่าวถึงในกระดาษ“ The Humble Programmer” ของเขา?


65

ในกระดาษ "Humble Programmer" ของ Dijkstraเขากล่าวว่าเขาได้ให้ปัญหาแก่อาสาสมัครเพื่อแก้ปัญหา:

“ ฉันใช้การทดลองเขียนโปรแกรมเล็กน้อยกับอาสาสมัครที่มีประสบการณ์จริง ๆ แต่มีบางอย่างที่ไม่ได้ตั้งใจและไม่คาดคิดเกิดขึ้น อาสาสมัครของฉันไม่พบวิธีแก้ไขที่ชัดเจนและงดงามที่สุด จากการวิเคราะห์อย่างใกล้ชิดสิ่งนี้กลับกลายเป็นว่ามีแหล่งที่มาทั่วไป: ความคิดของพวกเขาเกี่ยวกับการทำซ้ำนั้นเชื่อมโยงอย่างแน่นแฟ้นกับความคิดของตัวแปรควบคุมที่เกี่ยวข้องที่จะก้าวขึ้นมา วิธีแก้ปัญหาของพวกเขามีประสิทธิภาพน้อยลงโดยไม่จำเป็นต้องเข้าใจยากและใช้เวลานานมากในการค้นหาพวกเขา”

ปัญหาที่ Dijkstra ให้กับอาสาสมัครคืออะไร การแก้ปัญหาคืออะไร?


3
ฉันจะเดิมพันในสิ่งที่เกิดซ้ำ EWD654 "เพื่อเป็นเกียรติแก่ฟีโบนักชี" น่าจะเป็นผู้สมัครที่ดี
ริ้น

คำถามนี้อาจใช้ได้ตราบใดที่ผู้คนไม่ได้ใช้สิ่งนี้เป็นโอกาสที่จะคาดเดาหรือคาดเดา: มันอาจเป็นเรื่องยากที่จะค้นพบ แต่มันมีคำตอบและคำถามเชิงประวัติศาสตร์อยู่ในหัวข้อที่นี่

9
คำพูดนั้นมาจาก EWD340 "โปรแกรมเมอร์ที่อ่อนน้อมถ่อมตน" ฉันไม่สามารถหาคำอธิบายที่ถูกต้องเกี่ยวกับการทดลองได้ แต่นี่คือลิงค์ไปยังบันทึกการสนทนาเต็มรูปแบบของเขา cs.utexas.edu/~EWD/transcriptions/EWD03xx/EWD340.html
Tyler Ferraro

2
ใครสามารถหาคำพูดของ Dijkstra ซึ่งเป็นเรื่องเกี่ยวกับอะไร? คำพูดที่ฉันชอบเกี่ยวกับเขาคือ "ความเย่อหยิ่งในวิทยาการคอมพิวเตอร์ถูกวัดเป็นนาโน - ดิจสแตรส" - อลันเคย์
เจมส์แอนเดอร์สัน

เราต้องระวังให้มากเมื่อเราให้คำแนะนำกับคนหนุ่มสาว: บางครั้งพวกเขาก็ทำตาม! ... heh :-) แหล่งที่มา: en.wikiquote.org/wiki/Edsger_W._Dijkstra
Robert French

คำตอบ:


11

ปัญหา "นักปรัชญาการรับประทานอาหาร" เป็นปัญหาที่เกิดขึ้น

โดยทั่วไปมีนักปรัชญา 5 คนที่ต้องกิน (ลองนึกภาพอาหารที่ไม่มีวันสิ้นสุดที่หน้านักปราชญ์แต่ละคน) ระหว่างแต่ละจานคือส้อม (5 แผ่น, 5 ส้อม, 5 นักปรัชญา 5 คน)

นักปราชญ์สามารถกินได้ก็ต่อเมื่อเขาถือส้อมทั้งสองไปทางขวาและส้อมไปทางซ้าย (มีนักปรัชญาเพียงสองคนเท่านั้นที่สามารถกินได้ทุกเวลา)

ส้อมอาจจะหยิบขึ้นมาทุกครั้งที่มันสามารถใช้ได้และวางลงถ้ามันจะถูกจัดขึ้น ส้อมแต่ละอันจะต้องหยิบขึ้นมาซึ่งกันและกัน (ทีละครั้ง)

ในขณะที่นักปรัชญาไม่ได้รับประทานอาหารพวกเขากำลังคิด (ความจำเป็นในการสลับรัฐคือสิ่งที่ขับเคลื่อนปัญหา)

คุณอนุญาตให้แต่ละคนกินและคิดสลับกันได้อย่างไร (เพื่อให้คนอื่นกินได้) โดยไม่ต้องสร้างระบบที่หยุดชะงัก

สิ่งนี้มีรากฐานมาจากระบบที่เกิดขึ้นพร้อมกันและเป็นคำถามที่มหาวิทยาลัยทั่วไปนำเสนอเมื่อพูดถึง

ฉันเชื่อว่าอัลกอริทึม 4 "หรือ 5" อย่างเป็นทางการได้รับการพัฒนาเพื่อแก้ปัญหา แต่การค้นหาอย่างรวดเร็วบน google สำหรับ "ปัญหานักปรัชญาการรับประทานอาหาร" จะช่วยให้คุณได้ผลลัพธ์

หากคุณอ่านบทความต้นฉบับในเชิงอรรถในหน้า 866 ให้ระบุว่า: "การดำเนินการของ IFIP Congress 1965, 213-217" การแก้ปัญหาในการควบคุมการเขียนโปรแกรมพร้อมกัน "

ปัญหาที่เกิดขึ้นพร้อมกันและทรัพยากรที่ใช้ร่วมกันคือ "ปัญหานักปรัชญาการรับประทานอาหาร" :-)

หวังว่าจะช่วย


6
ตั้งแต่นี้เป็นคำถามประวัติศาสตร์ส่วนใหญ่แหล่งใด?
yannis

1
ที่จริงแล้วแหล่งข้อมูลที่คุณให้ดูเหมือนจะไม่อ้างอิงปัญหานักปรัชญาด้านการรับประทานอาหารตามที่ Dijkstra ให้กับอาสาสมัคร ฉันพลาดอะไรไปรึเปล่า? สิ่งที่ฉันกำลังมองหาคือแหล่งข้อมูลที่น่าเชื่อถือเพื่อสนับสนุนปัญหา "นักปรัชญาการรับประทานอาหาร" ของคุณเป็นปัญหาที่นำเสนอการอ้างสิทธิ์ไม่ใช่คำอธิบายของปัญหาเอง (แม้ว่าลิงก์ของคุณจะให้ข้อมูลและน่าสนใจอย่างมาก)
yannis

@ Robert ขอขอบคุณสำหรับลิงค์ :) (อย่าลบออกพวกเขาอาจเป็นประโยชน์กับคนอื่น ๆ ) ฉันรอคอยว่ามันเป็นปัญหาที่เขาให้
user712092

4
@RobertFrench สิ่งที่เรากำลังมองหาคือสิ่งที่เป็นปัญหาเฉพาะ Dijkstra กล่าวถึงในคำพูดในคำถามและแหล่งที่มาที่พิสูจน์ได้ไม่ใช่แค่ปัญหา Dijkstra สูตร ไม่มีอะไรในคำพูดที่บ่งบอกว่ามันเป็นหนึ่งในปัญหาของเขาเองมันอาจเป็นปัญหาใด ๆ จริงๆ ปรัชญาของหลักสูตรการรับประทานอาหารเป็นหนึ่งในต้นฉบับของ Dijkstra (ด้วยความช่วยเหลือจากรถโฮร์) ไม่มีใครเป็นที่ถกเถียงกันว่า แต่ที่มีอะไรจะทำอย่างไรกับคำถาม
yannis

4
นี่เป็นเพียงผิดธรรมดา "การแก้ปัญหาในการควบคุมการเขียนโปรแกรมที่เกิดขึ้นพร้อมกัน" เป็นปัญหานักปรัชญาด้านการรับประทานอาหารและมีการอ้างอิงใน Humble Programmer ซึ่งเป็นหนึ่งในงานก่อนหน้าของ Dijkstra ในการอ้างอิง แต่อ้างว่ามันเป็นปัญหาในการอ้างอิงด้วย
yannis
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.