如何严格制定一个计算问题?


20

我经常与想问一个关于计算问题(或其复杂性)的算法的人互动,但是他们并没有以一种严格的方式来表达我们(计算机科学家)可以理解的方式。

用CLRS之类的书来引用它们是没有帮助的,因为那里的示例通常有一种非常直接的方式来严格地陈述,例如,给定一个图的邻接列表,并且图中的两个顶点计算出这些顶点之间的最短路径。

是否有任何一本好书(或其他资源),使对CS知识最少的人可以学习如何以计算机科学家可以理解的严格方式来表述和陈述计算问题?

最好,这本书应该有许多示例,这些示例如何从各个领域和现实世界的示例中严格地阐述计算问题。


澄清度

为了使问题更具体,让我们假设他们了解1/2年级本科CS学生的基本数学/ CS术语,例如集合,函数,图形,列表等(我所拥有的人就是这种情况)心神)。例如,他们阅读了一些入门性教科书,例如Aho和Ullman(尽管他们可能还没有完全理解它)。


2
我认为这是一个很好的问题,但我不知道是否有一个好的答案。我感觉好像是在问:“有没有办法让我们教非计算机科学家的人像计算机科学家那样思考?” 答案是“是的,让他们成为计算机科学家。” 就是说,一些软件工程研究人员可能已经对类似的东西进行了研究。
jmite 2013年

3
另外,我认为这在一定程度上是用例的目的。如果某人不了解如何正确地解决问题,请列出他们希望给定程序执行的多种方案,以及每种情况下的预期行为。程序员然后据此制定规范。就是说,我是理论人员,而不是工程师,因此,如果我错了,请随时纠正我。
jmite 2013年

@jmite,谢谢您的评论。没错,软件工程的一部分是试图了解客户的需求(我认为他们称之为需求分析)。但这通常适用于大型项目。我并不是在谈论这样的项目,而是在谈论一些简单的问题,例如我们在本网站上遇到的那些问题,但并没有严格说明。我看过很多书,教人们如何用许多例子说明逻辑上的陈述。我希望算法和计算问题也有类似之处。
卡夫

1
就是说,我认为这需要一种不容易获得的思维方式,尤其是成年人。我试图让人们放弃技术性知识,并就日常物品尽可能简单地解释问题。问题在于,他们通常会忘记一些约束,或者听起来像在实际系统中是O(N)的运算是O(1),依此类推。因此,我将得出一个非常接近对错误问题的严格定义的东西。
svinja

2
在某种程度上,要求的是矛盾的,因为严格地制定问题恰恰是将外行与专家/专业人士区分开来的关键技能之一……
vzn 13'7

Answers:


3

Donald E. Knuth,Tracy L. Larrabee和Paul M. Roberts 撰写的《数学写作》是学术上广为人知,但在专家之外尚未广为人知的一个很好的资源。有出版的书籍,演讲视频和一组笔记。它是从尝试精通数学写作(例如撰写论文)的人们的角度编写的,但是所有建议都非常适用于外行尝试精确提出问题的情况。数学写作虽然学起来很艰巨,但却是一种科学地定义/制定公式的方法-随着书的细节,例如通过算法或证明来解决计算/算法问题。

同样,经典的Garey&Johnson著作《计算机与难处理》并未准确描述如何精确地表达问题,但确实提供了许多示例,并且将各种理论/概念/技术“模式”组织为相似问题的各个部分,可以用作描述计算/算法问题的“构建块”。


谢谢vzn,这些都是写数学的好资源,但我没有寻找其他的东西。这个问题在数学上写得不好,但是人们可以学习足够清晰的公式化计算问题的资源,以便专家可以理解提出该问题的人正在寻找什么并为他们提供帮助。
卡夫(Kaveh),

y 您说那是两回事,用词/短语来说是,但&我说它们是[借用软件工程短语]“紧密耦合”的
vzn


0

从Robert Lafore购买《算法和数据结构》一书。

在这本书上,每个算法都被解释为一个故事,就像诗歌一样。然后,为用户提供算法的Lafore版本,然后再提供CLRS版本。

也许像这样,这个人会对如何从直观的描述转换为严格的描述有一种感觉。

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.