Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/wordpress/12.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Algorithm 当正确输出未知时有效验证程序逻辑的方法_Algorithm_Testing_Logic_Verification - Fatal编程技术网

Algorithm 当正确输出未知时有效验证程序逻辑的方法

Algorithm 当正确输出未知时有效验证程序逻辑的方法,algorithm,testing,logic,verification,Algorithm,Testing,Logic,Verification,在今年的谷歌代码堵塞资格赛中,我遇到了一个问题,那就是如何验证我的程序。我执行这类任务的标准方法是编写两个程序,它们以完全不同的方式执行相同的任务。然后在输入端上运行这两个命令。如果两个程序之间的输出不同,则您知道其中一个或两个程序中都存在错误。这种方法的缺点是程序员必须创建两个程序,有效地将花费的时间增加了一倍 与编写程序的多个版本并相互运行相比,是否有更好/更有效的方法来验证程序是否正确 请注意,只有当正确输出未知且无法生成验证输入输出集时,才会出现此问题。如果您事先知道任何给定输入集的输出

在今年的谷歌代码堵塞资格赛中,我遇到了一个问题,那就是如何验证我的程序。我执行这类任务的标准方法是编写两个程序,它们以完全不同的方式执行相同的任务。然后在输入端上运行这两个命令。如果两个程序之间的输出不同,则您知道其中一个或两个程序中都存在错误。这种方法的缺点是程序员必须创建两个程序,有效地将花费的时间增加了一倍

与编写程序的多个版本并相互运行相比,是否有更好/更有效的方法来验证程序是否正确

请注意,只有当正确输出未知且无法生成验证输入输出集时,才会出现此问题。如果您事先知道任何给定输入集的输出应该是什么,那么验证程序就很容易了。因此,这个问题只适用于您不知道正确输出应该是什么的情况,您只知道程序应该执行的过程的规范


在Dijkstra问题的例子中,我可以编写一个“测试数据生成器”,它从输出向后生成已知的输入状态。通过这样做,我可以通过编写第二个程序来创建测试数据集,但是这个程序要比解算器简单得多,因此比编写两个解算器的工作量要小得多,但是,为了论证起见,让我们假设这个选项不可用。

看不到更好的测试方法。通常其中一个程序应该是蛮力算法,您可以确保在任何输入集上正确输出。然后验证具有最佳内存和时间复杂度的程序是否提供相同的输出(您没有提到它们在哪些方面不同,但我认为这就是您的意思)

对,对于另一个资格认证项目(无限煎饼屋),这很容易做到,但由于Dijkstra更复杂,编写替代算法会更难。许多实际情况都是一样的,需要花费大量的精力来创建一个完全替代的算法,因此问题就来了。Dijkstra的替代方法是BellmanFord算法。你能为那个特定的问题实现它吗?问题不在于如何解决这个问题,而在于验证方法。(顺便提一下,代码阻塞问题与最短路径无关。)哦,我没看到它与一个名为Dijkstra的问题有关。我以为你说的是最短路径算法。。。