对数器的简单使用

2023-11-19

1.前言

学习左神的数据结构的过程中,推荐使用对数器检验自己的算法是否正确

2.内容

简介对数器

1.对数器的作用:在一个题目未OJ的时候,可以通过对数器检验自己算法是否正确。
(比如,自己写了两种方法,一种是暴力但正确(也可能错误),另一种是复杂度较小,但不知道是否正确的B,此时可以通过对数器检测两种方法得出的结果是否一致,来判断对错)
(如果两种都有可能错,可以在中间结果不同 时 进行打印,通过比较,更好地修改两种方法)
2.对数器的实现
进行数据量尽可能大的测试,比如测试次数>=100000,如果两种方法的结果都一致,那么很有可能就是对的

以排序算法的检测为实例

这里选择插入排序,检测自己写的插入排序是否存在问题

#include<iostream>
using namespace std;                //整个对数器玩儿玩儿,嘿嘿
#include <ctime>        
#include <cstdlib>
#include <algorithm>    
//思路 :  利用系统的排序方法 和 自己写的方法 比较每次排序后的结果 
//如果在数据量较大的时候也可以 两个都对,那么 说明写的没毛病

void main()
{
	void test();           //测试
	test();
}

void test()
{
	int GenerateArrayAndCompare();     //生成一个随机数组并进行比较
	srand((unsigned int)time(NULL));    //设置随机种子
	int testtime = 10000;                 //测试次数
	int i;
	for (i = 0; i < testtime; i++)
	{
		if (!GenerateArrayAndCompare())     //返回为0,说明排序不对
			break;
	}
	if (i == testtime)         //通过了所有测试
		cout << "success!" << endl;
}

void InsertionSort(int* a, int n)       //插入排序
{
	for (int i = 1; i < n; i++)
	{
		for (int j = i; j > 0 && a[j] < a[j - 1]; j--)     //j从i向前看
		{
			a[j] = a[j] ^ a[j - 1];
			a[j - 1] = a[j] ^ a[j - 1];
			a[j] = a[j] ^ a[j - 1];
		}
	}
}
int Compare(int *a, int *b, int n)
{
	sort(b, b + n);     //用系统提供的快速排序将b排序好
	InsertionSort(a, n);    //用自己写的插入排序排好a

	for (int i = 0; i < n; i++)     //比较排序后的两个数组
	{
		if (a[i] != b[i])           //有不同的则先把所有的数字先打印,再返回0
		{
			cout << "fail!" << endl;
			for (int j = 0; j < n; j++)
			{
				cout << a[j] << " ";
			}
			cout << endl;
			for (int j = 0; j < n; j++)
			{
				cout << b[j] << " ";
			}
			return 0;
		}
	}
	return 1;                 //都相同返回1
}

int GenerateArrayAndCompare()
{
	int MaxValue = 100;               //数值范围为0~100
	int MaxArea = 5000;              //数组最大大小在5000以内
	int n = rand() % MaxArea + 1;     //数组大小1~5000
	int* a = new int[n];             //动态内存分配
	int* b = new int[n];
	int i;
	for (i = 0; i < n; i++)
	{
		a[i] = rand() % MaxValue + 1;            //每个元素1~100
	}
	for (int j = 0; j < n; j++)           //将a的每个元素赋给b
		b[j] = a[j];                 
	int flag = Compare(a, b, n);
	delete[]a;
	delete[]b;
	if (flag)
		return 1;
	else
		return 0;
}

在这里插入图片描述
这里设置测试次数为10000次,基本已经可以确定是正确的了

3.总结

现在只觉得很巧妙
希望在之后的学习中能更加灵活运用~~

4.更新日志

2022.4.20 整理
欢迎评论留言、指正~~

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

对数器的简单使用 的相关文章

  • Java-static关键词的引入

    Java static关键词的引入 栈 局部变量 堆 new出来的结构 对象 数组 方法区 类的加载信息 静态域 常量池 1 相关概念 静态的 公有的 不属于哪个对象 可以用来修饰 属性 方法 代码块 内部类 当static修饰属性时 按照
  • PMS及应用安装过程分析一

    本文阐释应用安装过程 对于开机过程应用包扫描过程不讲述 请参考网上其他文章 PMS类图 APP安装过程 1 PackageInstallerActivity创建 1 1 getPackageManager 1 2 processPackag
  • python如何检查一个对象是否是可迭代对象

    有的时候我们会记不住python里哪种数据类型是可以迭代的对象 这个时候我们可以使用collections里的Iterable来检查这个实例是否可以迭代 gt gt gt from collections import Iterable 载
  • 某东商品价格抓取

    今天做了一个京东商品价格的需求 整理一下 第一步 打开Chrome浏览器自带抓包工具 选择network选项卡 第二步 按下Ctrl F5 打开search 在里面输入价格 例如图中输入的是1318 00 然后回车就会出现包含价格的接口出现

随机推荐

  • 选频网络的原理

    请高手给我讲解下选频网络的原理 选频电路 2012 09 28 18 23 freechen3 分类 工程技术科学 浏览173次 提问者采纳 2012 09 30 00 07 选频网络是利用谐振原理实现 输入的信号含有各次频率分量 选频网络
  • js扩展jquery对象基元的开发与代码编写

    js扩展jquery对象基元的开发与代码编写 function window undefined var Core function var eventarr var OnPageLoad undefined 获取USER信息 var ge
  • OpenCV:旋转矩形(RotatedRect)

    RotatedRect类是OpenCV的基础类 用于创建旋转矩形 下面是它的构造函数 包含旋转中心点 尺寸大小和旋转角度 构造函数1 RotatedRect const Point2f center const Size2f size fl
  • ​2 万字系统总结,带你实现 Linux 命令自由?

    前言 Linux 的学习对于一个程序员的重要性是不言而喻的 前端开发相比后端开发 接触 Linux 机会相对较少 因此往往容易忽视它 但是学好它却是程序员必备修养之一 如果本文对你有所帮助 请点个 吧 作者使用的是阿里云服务器 ECS 最便
  • redis主从同步,总是显示master_link_status:down的解决方法

    前几天 在修改一台从节点的redis的监听端口后 重启了下redis 发现master link status 很长时间一直都是down状态 查看了redis日志 发现日志里出现很多的 I O error trying to sync wi
  • 解决Java连接MySQL后出现的时区错误问题

    好不容易连接好数据库后 第二天打开运行 发现底下一串报红 The server time zone value is unrecognized or represents more than one time zone 线程 main ja
  • Java中变量的作用域【Java基础】

    最近在看 Thinking in Java 想把Java基础再巩固一下 在博客上遇到的以前没注意到的知识点或者较难的知识点记录下来 与大家分享 Java中的基本类型变量的作用域为 int x 1 变量x的作用域只在大括号内 System o
  • QT文件读取路径

    最近在弄中兴的一个程序大赛 用QT读取XML文件的编程 在编程中发现QT文件读取路径与VS有不同之处 我们提供给QFile的文件路径无非就是绝对路径和相对路径 绝对路径是绝对没问题的 不过相对路径就得小心了 谈到相对路径 需要注意区分进程所
  • MES系统给制造型企业带来了哪些效益

    MES系统要怎么给制造型企业带来效益 在这场剧烈的市场竞争中 制造企业不只要在产品质量和创新上具有竞争优势 而且产品的价格在很大程度上决定了企业的市场竞争力 MES系统如何去打破生产暗箱 建造通明化工厂 提高生产效率 如今 中国工厂存在两大
  • 逃逸闭包和非逃逸闭包

    在使用swift开发 使用闭包作为参数传递到函数中 但是总是默认提示加上 escaping 逃逸闭包 是指闭包在函数结束时 闭包就会随着函数的结束而被释放 非逃逸闭包 是指闭包在函数结束时 逃逸函数 不会随函数的结束而被释放 在该闭包执行后
  • ubuntu 下实现 docker+ovs+quagga搭建网络---bgp

    注 本机上现有quagga镜像 ovs虚拟交换机 2 9 1 docker 18 09 7 实现bgp网络搭建 1 sudo ovs vsctl add br br1 增加一个ovs网桥br1 2 sudo docker images 查看
  • ADFS 概念与基本开发介绍 (1)

    如您转载本文 必须标明本文作者及出处 如有任何疑问请与我联系 me nap7 com ADFS 相关开发技术的中文资料相对匮乏 之前再弄这个东西的时候搞的比较辛苦 因此总结此文档 以解后人之忧 本文会首先介绍与联合身份验证有关的概念及相关的
  • 泰迪杯挑战赛优秀论文-A题-基于数据挖掘的上市公司高送转预测

    目 录 第 1 章 绪论 1 1问题背景 1 2问题重述 1 3本文主要工作与创新点 1 4模型假设 1 5本文研究意义 第 2 章 相关理论 2 1高送转相关知识介绍 2 1 1高送转的实质 2 1 2预测下一年上市公司高送转的一些其他条
  • Redis 事务

    目录 Redis 事务 一 Redis事务的概念 二 redis事务提出的逻辑 三 redis事务的基本操作 四 事务的执行流程 五 redis锁 六 redis分布式锁 Redis 事务 一 Redis事务的概念 Redis 事务的本质是
  • 3、思科模拟器介绍 (认识思科模拟器界面、安装思科模拟器、思科模拟器汉化)

    认识思科模拟器界面 标题栏 菜单栏 思科模拟器软件包 CSDN思科模拟器安装 https download csdn net download weixin 53645521 85135225 百度网盘思科模拟器安装包 链接 https p
  • 图像恢复(加噪与去噪)

    人工智能导论实验导航 实验一 斑马问题 https blog csdn net weixin 46291251 article details 122246347 实验二 图像恢复 https blog csdn net weixin 46
  • tar命令笔记

    作用 tar 可以保存文件属性 本身不具备压缩能力 配合gzip或者bzip 进行压缩解压缩 参数 相关参数如下 来自百度百科 c create 创建新的tar文件 x extract get 解开tar文件 t list 列出tar文件中
  • 火狐浏览器文本两端对齐无效text-align: justify

    找了很多地方 尝试很多办法都不好使 直到看到这篇 只需要设置了text align justify时加设一个white space pre line就可以了
  • [Docker]使用Docker部署Kafka

    Kafka 是一个分布式流处理平台 它依赖于 ZooKeeper 作为其协调服务 在 Kafka 集群中 ZooKeeper 负责管理和协调 Kafka 的各个节点 因此 要在 Docker 容器中启动 Kafka 通常需要同时启动一个 Z
  • 对数器的简单使用

    对数器 1 前言 2 内容 简介对数器 以排序算法的检测为实例 3 总结 4 更新日志 1 前言 学习左神的数据结构的过程中 推荐使用对数器检验自己的算法是否正确 2 内容 简介对数器 1 对数器的作用 在一个题目未OJ的时候 可以通过对数