首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >程序员如何在TopCoder或其他竞赛中测试他们的算法?

程序员如何在TopCoder或其他竞赛中测试他们的算法?
EN

Stack Overflow用户
提问于 2013-07-11 09:12:57
回答 3查看 1.1K关注 0票数 7

在TopCoder或ACM竞赛中编写中、高难度程序的优秀程序员,在提交前必须保证算法的正确性。

虽然它们提供了一些示例测试用例以确保正确的输出,但它如何保证程序的行为正确?他们可以自己编写一些测试用例,但并不是所有情况下都可以通过手工计算知道正确的答案。他们是怎么做到的?

更新:虽然看起来是,但是在竞争环境的严格限制下,分析和保证算法的结果是不可能的。然而,如果有任何手册,在解决这些问题时所采用的更常见的特征-应该足以回答这个问题。类似于最佳实践..。

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2013-07-11 09:18:16

在比赛中,顶级程序员有足够的经验来阅读问题,并想出一些测试用例,这些测试用例应该能捕捉到输入的大部分可能性。

它通常捕获大部分的but -但它不是100%安全的。

然而,在现实生活中的关键应用程序(例如飞机上的关键系统或核反应堆)中,有一些方法可以证明某段代码实现了它应该做的事情。

这就是形式验证领域--它太复杂了,在比赛中做起来太费时了,但是对于某些系统来说,使用它是因为错误是不能容忍的。

一些附加信息:

形式核查主要由两部分组成:

  1. 手动验证-在这里,我们使用验证系统,如Hoare逻辑,并手动证明程序完成了我们希望它做的事情。
  2. 自动模型检验 -将问题建模为状态机,并使用模型检查工具来验证模块是否完成了它应该做的事情(或者没有做一些“坏”的事情)。 指定“它应该做什么”通常是用时态逻辑完成的。 这通常用于验证硬件模型的正确性。例如,英特尔使用它来确保他们不会再次获得浮点虫
票数 8
EN

Stack Overflow用户

发布于 2013-07-11 14:56:49

想象一下,假设您是一个顶级的programmer.Meaning --您知道许多算法,在实现them.You时不会三思而后行--知道如何修改已经知道的算法以适应问题的需要-- needs.You具有很强的估计时间和复杂性的能力,而且在最坏的情况下,您的量身定制算法会在时间和内存约束范围内运行。

在这个级别上,您只需想一想并使用一个大概5到10分钟的便签,并且在开始code.Once之前有一个非常清晰的算法,您可以完成编码,然后点击error.Because,通常没有编译error.Because--代码对您来说是如此直观。然后,根据所使用的算法和数据结构,您预计可能会出现以下问题之一。

  1. 拐角箱
  2. 溢出问题

拐角情况基本上是为一般情况编写的,但是当假设为N=1时,答案与others.So不同,通常将其作为特例编写。溢出是指中间值或结果溢出数据类型的限制。

您将注意到此时出现的任何问题,并在挑战阶段(如TopCoder中)使用这些数据。

一旦您检查了这两个,您就点击提交。

票数 3
EN

Stack Overflow用户

发布于 2013-07-11 09:15:45

Top有一个时间元素,所以不可能测试该约束中的每个组合。他们可能会尽力而为,并在其他方面依靠经验,就像在现实生活中一样。我不知道是否有可能保证一段重要的代码永远没有错误。

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/17589480

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档