我已经制作了一个代码来实现凸包的Graham Scan算法。我通过生成一些测试用例来测试程序。在所有情况下,它都会给出准确的结但我的问题是,当程序可能无法提供完美的凸包作为输出时,是否有可能生成一些棘手的测试用例?产生此类案件的程序是什么?
答案 0 :(得分:1)
正如Sascha在评论中回答的那样,如果不知道如何实现算法,就无法帮助您生成棘手的测试用例或知道是否可行。
算法本身当然被证明是正确的并且可以解决问题。所以它只是测试你的实现是否符合算法所说的。
我建议你试着向自己证明你的实施 - 证明你正在以正确的观点作为起点,证明你为排序做的计算为什么要按角度给出正确的排序顺序,证明计算在哪放弃一个点或继续的决定是基于相当于(或直接找出)右转或左转的问题,并证明算法的每一步都在你的实现中执行。
所有这些证明都可以完成两次 - 理论上一次,然后使用测试代码,这些测试代码将针对特定问题以及为他们构建的测试用例(例如检查右转/左转计算是否正确完成)不需要算法的其余部分 - 只需测试很多3点集合,每个星座可以对照已知的正确结果来测试你使用的计算是否给出正确的答案。)