• 如何写对拍?


    一直以来就听到诸多orz谈论“对拍”

    今天可算知道对拍是怎么一回事了 跟大家分享一下

    对拍就是当你写完一个代码 

    你想要验证它是否是正确的

    但是单单手造样例或者看题目上的样例往往不一定能发现错误 而且十分繁琐

    所以我们可以依靠强大的计算机来帮助我们检验程序的正确性

    接下来来讲一下对拍是如何实现的

    我们以a+b问题为例

    首先std是我们写的程序(可能有错误)

     然后我们再写一个程序bs  一般是暴搜等暴力程序 但一定要确保这个程序是没有错误的

    如下图

     我们再写一个数据生成器data

    利用系统里的随机数来生成随机数据

     最后我们写一个程序“对拍”

     先解释一下上面的代码是什么意思

    第7行 就是我们把随机数据生成器生成树数据导入到in.txt里

    第8行 我们把in.txt里的数据导入到我们写的更优的但是可能有错误的那个std程序

    然后把std程序的结果导入到out.txt里

    第9行 我们再按照同样的方式把那个暴力程序跑一边 存储结果到ans.txt

    第10行 就是比对out.txt和ans.txt这两个输出数据是否相同

    当然我们不能只验证一组数据就完事 

    所以我们一般在前面加上一个while(1)

    不停地制造数据进行验证

    知道发现错误

    就return 1 也就是异常返回 那个对拍的程序就会自动停止告诉你出现了错误

    具体的效果图如下

     然后我们就发现 我们的a+b程序出现了问题

    暴力程序算出的正确答案是39268

    而我们写的程序得出的答案是39269 比正确答案多了1

    然后我们再回到我们的那个文件夹里瞅一瞅

     

     这时的输入数据是上面的12280和26988

     左边是标准答案 右边是我们输出的答案

    所以我们再回到原std程序挑错

    利用中间输出的方式寻找错误

    结果我们就非常惊奇地发现

    第8行是发生了什么情况 怎么多了一行这样的代码。。。。(额。

    ‘至此’ 我们的对拍讲解就结束啦  

    如果感觉讲的还不错

    记得点个赞 或者加个关注再走哦~

  • 相关阅读:
    组合模式
    数据去重
    combiner
    合并文档
    对象锁 区别 类锁
    一个简单的死锁示例
    线程安全的单例模式
    线程安全与不安全(误解)
    tf.nn.max_pool 池化
    tf.nn.depthwise_conv2d 卷积
  • 原文地址:https://www.cnblogs.com/akioi/p/12218830.html
Copyright © 2020-2023  润新知