算法竞赛进阶指南0x72 随机数据生成与对拍

本文介绍了如何使用C++的随机数生成器构造不同规模的输入数据,进行程序的自我检测。通过对拍测试方法,可以对比不同程序的输出结果,从而验证程序的正确性。这种方法适用于无法获取实时反馈或调试困难的情况,也可用于题目创建时测试标准程序的准确性。
摘要由CSDN通过智能技术生成

        本文介绍随机数据的生成方法与对拍测试方法。读者将学习使用 C++ 随机数产生器,根据题目要求构造各种规模的输入数据,用于对自己编写的程序进行检测。同时,读者也将学习编写简单的脚本,自动化、批量化运行 "数据生成程序" 和两份不同的 "问题求解程序",并对两份程序的输出结果进行对比:我们把这种过程称为 "对拍"。

        随机数据生成与对拍可用于以下场景:

        1.在无法获得实时评测反馈的比赛中,思考并实现了一个 "高分解法",但实在不会证明自己的结论,或者不能确保自己编写的程序是否完全正确。

        这种情况下,建议读者酌情分配一些时间,额外编写一份随机数据生成程序、一份把朴素算法求解的程序 (通常朴素解法时间复杂度高,但实现简单,不易出错)。然后把 "高分解法" 与 "朴素解法" 进行对拍,看二者的输出结果是否始终保持一致。

        2.在平时解题时,自己编写的程序无法在 OJ 上取得 Accept 结果,调试很久仍未发现错误,并且不能下载到题目的测试数据,或者虽然能下载到测试数据,但发生错误的数据规模过大,不容易进行调试。

        这时可以编写一个随机数据生成程序,再编写一个使用朴素算法的程序 (或者直接在网络上搜索其他人的 AC程序),与自己的 "错误解法" 对拍。我们可以适当调整随机数据的规模,控制在易于人工演算和调试的范围内。虽然数据较小,出错概率极低,但是 "对拍" 脚本能够批量化执行,在成千上万次测试中,一般总能找到一个造成错误的小规模数据。

        3.有一个不错的构思,自己出了一道题目。

        此时当然需要生成一些测试数据,并且需要用 "对拍" 来检测自己写的 "标准程序" 的正确性。不过,除了随机数据外,通常还需要增加一些特殊构造的数据,保证测试数据的全面性。 

随机数据生成

        头文件 cstdlib (stdlib.h) 包含 rand 和 srand 两个函数,以及 RAND_MAX 常量。

        RAND_MAX 是一个不小于 32767 的整数常量,它的值与操作系统环境、编译器环境有关。一般来说,在Windows系统中为32767,在类Unix系统中为2147483647。

        rand()函数:返回一个

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值