在TopCoder或ACM竞赛中编写中、高难度程序的优秀程序员,在提交前必须保证算法的正确性。
虽然它们提供了一些示例测试用例以确保正确的输出,但它如何保证程序的行为正确?他们可以自己编写一些测试用例,但并不是所有情况下都可以通过手工计算知道正确的答案。他们是怎么做到的?
更新:虽然看起来是,但是在竞争环境的严格限制下,分析和保证算法的结果是不可能的。然而,如果有任何手册,在解决这些问题时所采用的更常见的特征-应该足以回答这个问题。类似于最佳实践..。
发布于 2013-07-11 09:18:16
在比赛中,顶级程序员有足够的经验来阅读问题,并想出一些测试用例,这些测试用例应该能捕捉到输入的大部分可能性。
它通常捕获大部分的but -但它不是100%安全的。
然而,在现实生活中的关键应用程序(例如飞机上的关键系统或核反应堆)中,有一些方法可以证明某段代码实现了它应该做的事情。
这就是形式验证领域--它太复杂了,在比赛中做起来太费时了,但是对于某些系统来说,使用它是因为错误是不能容忍的。
一些附加信息:
形式核查主要由两部分组成:
发布于 2013-07-11 14:56:49
想象一下,假设您是一个顶级的programmer.Meaning --您知道许多算法,在实现them.You时不会三思而后行--知道如何修改已经知道的算法以适应问题的需要-- needs.You具有很强的估计时间和复杂性的能力,而且在最坏的情况下,您的量身定制算法会在时间和内存约束范围内运行。
在这个级别上,您只需想一想并使用一个大概5到10分钟的便签,并且在开始code.Once之前有一个非常清晰的算法,您可以完成编码,然后点击error.Because,通常没有编译error.Because--代码对您来说是如此直观。然后,根据所使用的算法和数据结构,您预计可能会出现以下问题之一。
拐角情况基本上是为一般情况编写的,但是当假设为N=1时,答案与others.So不同,通常将其作为特例编写。溢出是指中间值或结果溢出数据类型的限制。
您将注意到此时出现的任何问题,并在挑战阶段(如TopCoder中)使用这些数据。
一旦您检查了这两个,您就点击提交。
发布于 2013-07-11 09:15:45
Top有一个时间元素,所以不可能测试该约束中的每个组合。他们可能会尽力而为,并在其他方面依靠经验,就像在现实生活中一样。我不知道是否有可能保证一段重要的代码永远没有错误。
https://stackoverflow.com/questions/17589480
复制相似问题