Dijkstra给志愿者做了什么任务,他的论文“谦虚的程序员”中提到了这一点?


65

Dijkstra的论文“谦虚程序员”中,他提到自己给一些志愿者解决了一个问题:

“我已经对真正有经验的志愿者进行了一些编程实验,但结果出乎意料,出乎意料。我的志愿者中没有一个人找到明显且最优雅的解决方案。经过仔细分析,结果发现有一个共同的来源:他们的重复概念与相关的受控变量要加强的思想紧密联系在一起,以至于他们在精神上看不见明显的事物。他们的解决方案效率低下,不必要地难以理解,并且花了很长时间才找到它们。”

Dijkstra给志愿者的问题是什么?有什么解决方案?


3
我敢打赌递归的东西。EWD654“以纪念斐波那契”似乎是一个不错的选择
gna

只要人们不将其用作猜测或推测的机会,这个问题就可以了:可能很难找出来,但是它有一个答案,历史问题在这里成为话题。

9
该报价来自EWD340“非常谦虚的程序员”。我无法找到关于实验内容的确切描述,但这是他完整演讲记录的链接。cs.utexas.edu/~EWD/transcriptions/EWD03xx/EWD340.html
泰勒·费拉罗

2
任何人都可以找到免费的Dijkstra报价吗?我对他的最喜欢的报价是“计算机科学的傲慢是用纳米Diijkstras来衡量的” –艾伦·凯
詹姆斯·安德森

向年轻人提供建议时,我们必须非常小心:有时他们会遵循!... heh :-)来源:en.wikiquote.org/wiki/Edsger_W._Dijkstra
罗伯特·法兰西

Answers:


11

提出了“用餐哲学家问题”。

基本上有5位哲学家需要吃饭。(想象一个在每个哲学家面前永无休止的食物的盘子),每个盘子之间是一个叉子(5个盘子,5个叉子,5个哲学家)。

哲学家只有将叉子放在右边和左边都握住才能吃东西。(在任何给定时间只能有两个哲学家进餐)。

可以在有货叉的任何时候将其拿起,如果有货叉则将其放下。每个货叉必须相互独立地捡起。(一次一个)。

当一个哲学家不吃饭时,他们在思考(导致问题的原因是需要改变状态)。

您如何允许他们每个人吃东西和交替思考(以便其他人可以吃东西)而又不会造成僵局(一个哲学家握着一把叉子等待另一把叉子,阻止另一位哲学家吃东西)。

这源于并发系统,是讨论并发时提出的一个典型的大学问题。

我相信已经开发了4或5种“官方”算法来解决该问题,但是在Google上快速搜索“餐厅哲学家问题”将为您带来各种各样的结果。

如果您在第866页的脚注中阅读了该文件的原始版本,则其内容为:“ IFIP Congress 1965的会议记录,213-217。“并发编程控制中的问题的解决方案。”

并发和共享资源问题是“吃饭的哲学家问题”。:-)

希望能有所帮助。


6
由于这主要是一个历史问题,因此有任何来源吗?
yannis,2011年

1
实际上,不,您提供的消息来源似乎没有提到Dijkstra给志愿者提供的“餐饮哲学家”问题。我想念什么吗?我正在寻找的可靠信息来源将为您提供支持。“吃饭的哲学家问题”是所提出的问题,而不是问题本身的描述(尽管您的链接非常有用且有趣)。
yannis 2011年

@Robert感谢您的链接。:)(不要删除它们,它们可能对其他人有用)我很期待这是否是他提出的问题。
user712092 2011年

4
@RobertFrench我们正在寻找的是Dijkstra在问题引用中提到的具体问题是什么,并证明了这一点,而不仅仅是Dijkstra提出的任何问题。引文中没有任何东西甚至暗示这是他自己的问题之一,实际上可能是任何问题。当然,餐饮哲学家是迪杰斯特拉(Dijkstra)的原创著作之一(在CAR Hoare的帮助下),没有人对此进行辩论,但这与问题无关
yannis 2011年

4
这是完全错误的。“并发编程控制中的问题的解决方案”是Dining Philosophers问题,在谦卑程序员中被引用为Dijkstra在引用中的较早著作之一,但声称这也是引号中的问题是无法验证的。
yannis 2011年
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.