【 C++ 】 讲解与实现 对数器接口

什么是对数器

说是叫对数器,但我觉得叫做核验器更好。
为什么?因为其作用是核验算法是否正确,所以我觉得叫核验器更好。
注意:本文实现的是生成只能int类型的对数器,其余类型不支持。

对数器的原理

对于一个核验器,其作用就是生成大量的数据来轰炸算法,若是算法经受了大量数据的轰炸,且保证每次都可以返回一个正确的值,说明这个算法是健壮的,良好的。

实现思路

  1. 对数器会不断的生成随机大小、随机内容的数组;
  2. 复制一份相同的数组;
  3. 把两个数组分别传入自己写的算法代码,以及传入专业的代码中;
  4. 对比两份代码输出的结果,结果不一样则退出;
  5. 结果一样就回到第1步。

代码实现

核心代码

#include <iostream>
#include <ctime>
#include <random>
#include <stdlib.h>
#include <string.h>
#include <algorithm>
using namespace std;// 生成一个随机长度的内容随机数组
void Generator(int*& arr, int size, int val, int& len)
{static int i = 0;default_random_engine e;uniform_int_distribution<int> u1(0, size); // 左闭右闭区间uniform_int_distribution<int> u2(0, val); // 左闭右闭区间e.seed(time(0) + (i++));// 生成随机长度len = u1(e);arr = new int[len];for (int i=0; i < len; i++){// 生成随机数据arr[i] = u2(e);}
}// 生成随机带大小,随机数据的数组,给到两个外部传入的数组
void GenerateRandomArr(int*& arr1, int*& arr2, int& len)
{len = 0;Generator(arr1, 100, 100, len);arr2 = new int[len];memcpy(arr2, arr1, sizeof(int)*len);
}// 删除动态创建的数组
void deleteArr(int*& arr)
{delete arr;arr = nullptr;
}// 对比标准的算法,和自己编写的算法的区别
int Verifier(int NumberTest, int (*testFun)(int*& , int*& , int&))
{int len = 0;int* arr1 = NULL;int* arr2 = NULL;int err = 0;for (int i = 0; i < NumberTest; i++){// 生成部分GenerateRandomArr(arr1, arr2, len);// 运算与数据对比testFun(arr1, arr2, len);// 收尾deleteArr(arr1);deleteArr(arr2);if( err != 0 ){return 1;}}return 0;
}

测试代码

这里实现了一个快速排序,然后调用了库的排序代码进行对比测试。

#include <iostream>
#include <ctime>
#include <random>
#include <stdlib.h>
#include <string.h>
#include <algorithm>
using namespace std;// 快速排序
void quickSort(int* pArr, int len)
{int* i = pArr;int* j = (pArr+len-1);int* p = pArr;while ( j > i ){while ( i != p && *i <= *p ){i++;}if ( i != p ){*i ^= *p;*p ^= *i;*i ^= *p;p = i;}while ( j != p && *p <= *j ){j--;}if ( j != p ){*j ^= *p;*p ^= *j;*j ^= *p;p = j;}}// 左边存在超过一个值if( p-pArr > 1 ){quickSort(pArr, p-pArr);}// 右边存在超过一个值if( len - (p-pArr) - 1 > 1 ){quickSort(p+1, len - (p-pArr) - 1);}
}// 给对数器传入的运算与数据对比的函数
int sortVerifier(int*& arr1, int*& arr2, int& len)
{int err = 0;// 打印数据for(int i=0; i<len; i++){cout << arr1[i] << endl;}cout << "" << endl;cout << "" << endl;// 运算部分sort(arr1, arr1+len, less<int>());quickSort(arr2, len);// 数据对比部分err = memcmp(arr1, arr2, sizeof(int)*len);return err;
}int main()
{// 进行1000次轰炸看看效果if( Verifier(1000, sortVerifier) == 0 ){cout << "ok" << endl;}else{cout << "error" << endl;}system("pause");return 0;
}

效果

结果展示

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/pingmian/1141.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

怎么用手机远程控制电脑 远程控制怎么用

怎么用手机远程控制电脑&#xff1a;远程控制怎么用 在这个科技日新月异的时代&#xff0c;远程控制电脑已经成为了很多人的需求。有时&#xff0c;我们可能在外出时突然需要访问家中的电脑&#xff0c;或者在工作中需要远程操控办公室的电脑。这时&#xff0c;如果能用手机远…

layui框架实战案例(27):弹出二次验证

HTML容器 <button class"layui-btn layui-btn-sm layui-btn-danger" lay-event"delete"><i class"layui-icon layui-icon-delete"></i>批量删除</button>删除封装函数 function delAll(school_id, school_name) {var lo…

Springboot+Vue项目-基于Java+MySQL的网上超市系统(附源码+演示视频+LW)

大家好&#xff01;我是程序猿老A&#xff0c;感谢您阅读本文&#xff0c;欢迎一键三连哦。 &#x1f49e;当前专栏&#xff1a;Java毕业设计 精彩专栏推荐&#x1f447;&#x1f3fb;&#x1f447;&#x1f3fb;&#x1f447;&#x1f3fb; &#x1f380; Python毕业设计 &…

【信号处理】基于EEG脑电信号的自闭症预测典型方法实现

理论 自闭者主要受到遗传和环境因素的共同影响。由于自闭症是一种谱系障碍&#xff0c;因此每个自闭症患者都有独特的优势和挑战。自闭症患者学习、思考和解决问题的方式可以是高技能的&#xff0c;也可以是严峻的挑战。研究表明&#xff0c;高质量的早期干预可以改善学习、沟…

ZStack教育云计算解决方案入选高质量数字化转型技术解决方案集

近日&#xff0c;中国信通院“铸基计划”《高质量数字化转型技术解决方案&#xff08;2023年度&#xff09;》&#xff08;以下简称“方案集”&#xff09;发布&#xff0c;云轴科技ZStack智慧教育云计算解决方案入选《高质量数字化转型技术解决方案集》。 为促进数字化转型相…

第63天:服务攻防-框架安全CVE 复现DjangoFlaskNode.JSJQuery

目录 思维导图 案例一&#xff1a;JavaScript-开发框架安全-Jquery&Node node.js目录穿越 CVE-2021-21315命令执行 Jquery CVE-2018-9207 案例二&#xff1a;Python-开发框架安全-Django&Flask django cve_2019_14234 CVE-2021-35042 flask ssti 思维导图 案…

Jenkins和gitlab实现CICD

1 背景 在开发TracerBackend服务的时候&#xff0c;每次更改代码之后需要推送到gitlab&#xff0c;然后ssh登录到Ubuntu的服务器上部署新的代码。服务成功启动之后&#xff0c;在本地执行测试用例&#xff0c;觉得这一套操作流程还是挺复杂的。想起公司的代码发布流程&#xf…

多模态视觉语言模型:BLIP和BLIP2

1. BLIP BLIP: Bootstrapping Language-Image Pre-training for Unified Vision-Language Understanding and Generation BLIP的总体结构如下所示&#xff0c;主要包括三部分&#xff1a; 单模态编码器&#xff08;Image encoder/Text encoder&#xff09;&#xff1a;分别进…

智慧浪潮下的产业园区:解读智慧化转型如何打造高效、绿色、安全的新产业高地

随着信息技术的飞速发展&#xff0c;智慧化转型已经成为产业园区发展的重要趋势。在智慧浪潮的推动下&#xff0c;产业园区通过集成应用物联网、大数据、云计算、人工智能等先进技术手段&#xff0c;实现园区的智慧化、高效化、绿色化和安全化&#xff0c;从而打造成为新产业高…

(四)SQL面试题(连续登录、近N日留存)学习简要笔记 #CDA学习打卡

目录 一. 连续登录N天的用户数量 1&#xff09;举例题目 2&#xff09;分析思路 3&#xff09;解题步骤 &#xff08;a&#xff09;Step1&#xff1a;选择12月的记录&#xff0c;并根据用户ID和登录日期先去重 &#xff08;b&#xff09;Step2&#xff1a;创建辅助列a_rk…

数字接龙(蓝桥杯)

文章目录 数字接龙【问题描述】解题思路DFS 数字接龙 【问题描述】 小蓝最近迷上了一款名为《数字接龙》的迷宫游戏&#xff0c;游戏在一个大小为N N 的格子棋盘上展开&#xff0c;其中每一个格子处都有着一个 0 . . . K − 1 之间的整数。游戏规则如下&#xff1a; 从左上…

使用Python进行云计算:AWS、Azure、和Google Cloud的比较

&#x1f47d;发现宝藏 前些天发现了一个巨牛的人工智能学习网站&#xff0c;通俗易懂&#xff0c;风趣幽默&#xff0c;忍不住分享一下给大家。【点击进入巨牛的人工智能学习网站】。 使用Python进行云计算&#xff1a;AWS、Azure、和Google Cloud的比较 随着云计算的普及&am…

【网络】Burpsuite学习笔记

文章目录 1.介绍1.1 正常客户端与服务端通信&BurpSuite代理后1.2 下载激活参考地址1.3 代理设置1.4 Proxy SwitchyOmega 使用1.4.1 新建情景模式1.4.2 设置代理1.4.2 应用选项 1.5 FoxyProxy 使用1.6 安装证书1.6.1 方式一1.6.2 方式二1.6.3 浏览器安装证书1.6.4 或者直接双…

Docker - 入门基础

原文地址&#xff0c;使用效果更佳&#xff01; Docker - 入门基础 | CoderMast编程桅杆https://www.codermast.com/dev-tools/docker/docker-basic.html Docker架构 Docker 使用的是客户端-服务端&#xff08;C/S&#xff09;架构模式&#xff0c;使用远程 API 来管理和创建…

llama-factory SFT 系列教程 (四),lora sft 微调后,使用vllm加速推理

文章目录 文章列表&#xff1a;背景简介llama-factory vllm API 部署融合 lora 模型权重 vllm API 部署HuggingFace API 部署推理API 部署总结 vllm 不使用 API 部署&#xff0c;直接推理数据集 tenplatevllm 代码部署 文章列表&#xff1a; llama-factory SFT系列教程 (一)&a…

JUC面试——⭐⭐Java中的四种引用类型/Threadlocal

四种引用类型 Java 中对象的引用分为四种级别&#xff0c;这四种级别由高到低依次为&#xff1a;强引用、软引用、弱引用和虚引用。 基础知识 强引用&#xff1a;普通使用的引用 强引用是造成 Java 内存泄漏的主要原因之一 软引用&#xff1a; GC内存不够时回收 适用于&…

翻译 《The Old New Thing》 - What is the Alt+Tab order?

What is the AltTab order? - The Old New Thing (microsoft.com)https://devblogs.microsoft.com/oldnewthing/20031020-00/?p42093 Raymond Chen 2003年10月20日 AltTab 列表中的图标顺序是如何确定的&#xff1f; 是什么决定了在 AltTab 列表中图标出现的顺序&#xff1f;…

第十五届蓝桥杯题解-数字接龙

题意&#xff1a;经过所有格子&#xff0c;并且不能进行交叉&#xff0c;走的下一个格子必须是当前格子值1%k&#xff0c;输出路径最小的那一条&#xff08;有8个方向&#xff0c;一会粘图&#xff09; 思路&#xff1a;按照8个方向设置偏移量进行dfs&#xff0c;第一个到达终…

一台服务器同时启动两个版本jdk

之前Java项目都是1.8的jdk&#xff0c;在服务器部署正常使用&#xff0c;服务器配置环境变量jdk1.8版本。最近一次我用了jdk17版本&#xff0c;部署服务器后&#xff0c;遇见了jdk版本不一致报错 报错内容&#xff1a; 52指向jdk1.8,61指向jdk17&#xff0c;大概就是jdk版本不…

[Java基础揉碎]集合

目录 集合的理解和好处 数组 集合的理解和好处 继承图 ​编辑 简单实例 Collection接口和常用方法 1) add:添加单个元素 2) remove:删除指定元素 3) contains:查找元素是否存在 4) size:获取元素个数 5) isEmpty:判断是否为空 ​编辑 6) clear:清空 7) addAll:添…