Algorithm 当正确输出未知时有效验证程序逻辑的方法
在今年的谷歌代码堵塞资格赛中,我遇到了一个问题,那就是如何验证我的程序。我执行这类任务的标准方法是编写两个程序,它们以完全不同的方式执行相同的任务。然后在输入端上运行这两个命令。如果两个程序之间的输出不同,则您知道其中一个或两个程序中都存在错误。这种方法的缺点是程序员必须创建两个程序,有效地将花费的时间增加了一倍 与编写程序的多个版本并相互运行相比,是否有更好/更有效的方法来验证程序是否正确 请注意,只有当正确输出未知且无法生成验证输入输出集时,才会出现此问题。如果您事先知道任何给定输入集的输出应该是什么,那么验证程序就很容易了。因此,这个问题只适用于您不知道正确输出应该是什么的情况,您只知道程序应该执行的过程的规范Algorithm 当正确输出未知时有效验证程序逻辑的方法,algorithm,testing,logic,verification,Algorithm,Testing,Logic,Verification,在今年的谷歌代码堵塞资格赛中,我遇到了一个问题,那就是如何验证我的程序。我执行这类任务的标准方法是编写两个程序,它们以完全不同的方式执行相同的任务。然后在输入端上运行这两个命令。如果两个程序之间的输出不同,则您知道其中一个或两个程序中都存在错误。这种方法的缺点是程序员必须创建两个程序,有效地将花费的时间增加了一倍 与编写程序的多个版本并相互运行相比,是否有更好/更有效的方法来验证程序是否正确 请注意,只有当正确输出未知且无法生成验证输入输出集时,才会出现此问题。如果您事先知道任何给定输入集的输出
在Dijkstra问题的例子中,我可以编写一个“测试数据生成器”,它从输出向后生成已知的输入状态。通过这样做,我可以通过编写第二个程序来创建测试数据集,但是这个程序要比解算器简单得多,因此比编写两个解算器的工作量要小得多,但是,为了论证起见,让我们假设这个选项不可用。看不到更好的测试方法。通常其中一个程序应该是蛮力算法,您可以确保在任何输入集上正确输出。然后验证具有最佳内存和时间复杂度的程序是否提供相同的输出(您没有提到它们在哪些方面不同,但我认为这就是您的意思) 对,对于另一个资格认证项目(无限煎饼屋),这很容易做到,但由于Dijkstra更复杂,编写替代算法会更难。许多实际情况都是一样的,需要花费大量的精力来创建一个完全替代的算法,因此问题就来了。Dijkstra的替代方法是BellmanFord算法。你能为那个特定的问题实现它吗?问题不在于如何解决这个问题,而在于验证方法。(顺便提一下,代码阻塞问题与最短路径无关。)哦,我没看到它与一个名为Dijkstra的问题有关。我以为你说的是最短路径算法。。。