我是CS领域的新手,我注意到在我阅读的许多论文中,没有经验结果(没有代码,只是引理和证明)。这是为什么?考虑到计算机科学是一门科学,它是否应该遵循科学方法?
我是CS领域的新手,我注意到在我阅读的许多论文中,没有经验结果(没有代码,只是引理和证明)。这是为什么?考虑到计算机科学是一门科学,它是否应该遵循科学方法?
Answers:
数学也是一门科学,您必须花很长时间才能找到该领域已发表的经验结果(尽管我想一定会有)。在其他科学领域中,“引理和证明”比经验更有价值,例如量子物理学。就是说,大多数科学都将理论和实践(具有不同的比例)混合在一起,计算机科学也不例外。
计算机科学源于数学(例如,参见图灵的传记http://en.wikipedia.org/wiki/Alan_Turing),因此,许多结果(通常被称为“理论计算机科学”领域)都包含在证明中计算模型中的计算机可以解决给定数量的操作中的某些问题(例如FOCS,STOC,SODA,SoCG等会议)。然而,通过分析实验结果(例如WADS,ALENEX等会议),计算机科学的许多其他结果都与这些理论在实际生活中的适用性有关。
人们通常认为理想是理论与实践之间的良好平衡,例如在《自然科学》中,对实验的观察促使了新理论的产生,而新理论反过来又提出了新的实验来确认或证实那些理论:会议试图接受实验性和理论性结果(例如,ESA,ICALP,拉丁语,CPM,ISAAC等)。计算机科学中的“算法和数据结构”子领域可能会遭受不平衡的局面,因为“理论”会议的排名通常比实验会议的排名更高。我相信在计算机科学的其他子领域(例如HCI或AI)中并非如此。
希望能帮助到你?
很好地实现算法是一项技能,它需要一套不同于证明定理的工具。理论界发现的许多算法实际上已在实践中实施(尽管我希望理论界在此过程中发挥更大作用)。物理并没有要求同一个研究人员进行理论和实验,尽管可以期望这两个小组进行交流。您为什么不期望在计算机科学中看到同样的鸿沟?
加入编辑:
在贝尔实验室和AT&T实验室,我回答了Suresh关于我上面的“角色”的含义时,扩展了我的评论,鼓励算法研究人员与开发人员进行交流。我没有做应该做的很多事情,但是我确实得到了至少一篇论文,并且我认为如果理论上的人们与从业人员之间进行更多的交流对领域将是有益的。这并不意味着我认为每个提出算法的人都应该对其进行编码(即使它很实用)。
另一方面,您认为实用的编码算法(或让学生对它们进行编码)对于使从业人员适应它们很有用。考虑一个例子。Lempel和Ziv分别于1977年和1978年撰写了两篇有关新数据压缩算法的技术论文。每个人都忽略了他们。1984年,Welch撰写的技术文章少得多,略微改变了LZ78,从而稍微改善了其性能,并给出了一项小型研究的结果,将其性能与其他数据压缩方法进行了比较。它发表在许多程序员都读过的期刊上,并且该算法由几行伪代码给出。该方法很快在许多地方进行了修改,最终导致了声名狼藉的知识产权纠纷。
当然,算法研究人员与实践交流的最佳方法之一就是培养毕业于Google,IBM或其他公司工作的研究生,而我们已经在这样做。另一种方法可能是在此论坛中回答从业者的问题。希望我们也能做到这一点。
使用经验方法和理论计算机科学方法的一个研究领域是称为“实验算法”或“算法工程”的领域。就像Chris提到的那样,高性能计算在很大程度上依赖于此,因为现代系统存在复杂的缓存和延迟问题,而我们很难进行建模。
Gerth Brodal和Peter Sanders是在“证明”和“经验”领域都站稳脚跟的研究人员的好例子。
--2013年1月20日更新-我还要提到Robert Sedgewick的精彩演讲。
这取决于您所处的学科。正如杰里米(Jeremy)所说,理论和实践之间存在着广泛的联系。
诸如复杂性之类的话题往往偏重于理论方面,因为通常的目标是找到空间或运行时的边界。用C ++实现算法,然后运行很多次并不能证明问题是NP完全的。
与之相反的是,高性能计算(例如像Supercomputing这样的会议)都是经验性的。没有人会向HPC出版物提交证明,因为在内存层次结构和内核开销方面存在太多可变性。
因此,根据目标,技术,社区等,可以用两种完全不同的方法来处理似乎相同的问题(需要花多长时间才能完成?)。请参见Poul-Henning Kamp的“ 您做错了”。不和谐。
在编程语言研究中,许多有关新编程语言结构或新型类型检查机制的想法都源于理论(也许是从实践经验中获悉的)。通常从形式/理论/概念角度撰写有关此类机制的论文。这是相对容易做到的。接下来是第一个障碍:在现有编译器的上下文中实现新结构,并在效率或灵活性方面进行试验。这也相对容易。
但是我们可以说编程结构构成了编程科学的进步吗?我们可以说这使编写程序更容易吗?我们可以说它使编程语言更好吗?
答案是不。要回答这些问题,就需要进行适当的实证评估,其中涉及大量经验丰富的程序员。这项研究几乎从未进行过。编程语言(及其构造)的价值的唯一判断是该语言的普及程度。对于编程语言的纯粹主义者而言,这与我们的假设所告诉我们的背道而驰。
也许我想念您提出这个问题的动机,但是有许多实证结果激励研究,算法和其他结果的例子。
同样,Bailey和Borwein是实验数学的重要支持者。请参见“计算机为坩埚:介绍实验数学”,“计算在游览数论”当中他人。有人可能会认为这是实验性的数学,但我会认为在这一级别上的讨论是语义上的区别。
NP-完全问题的相变是大量使用经验结果的领域。请参阅Monasson,Zecchina,Kirkpatrick,Selman和Troyansky以及Gent和Walsh的入门书 ,尽管还有很多很多(请参阅此处进行简要调查)。
虽然不是很理论计算机科学或数学的水平,有一个讨论,在这里大约是因为它依赖于一个事实,即它的搜索人类可读的文本(grep的不作为不良或Unix工具grep的平均情况下运行节奏如何优化最坏的情况下算法最不利于其中包含随机字符的文件)。
甚至高斯也用实验证据给出了素数定理的假设。
数据挖掘(贝尔科(Bellkor)对Netflix奖的解决方案,以建立更好的推荐系统)可能被认为是完全基于经验证据的理论。人工智能(遗传算法,神经网络等)在很大程度上依赖于实验。密码学在代码制作者和代码破坏者之间不断地推拉。我实际上只列举了一些,如果您放宽对经验的定义,那么您可以投放更大的范围。
我很抱歉在回答您的问题时如此分散,但我希望我至少提供了一些有用的示例。