返回顶部
首页 > 资讯 > 后端开发 > Python >Java对数器验证算法详解
  • 761
分享到

Java对数器验证算法详解

Java对数器Java对数器验证算法 2023-05-15 14:05:11 761人浏览 安东尼

Python 官方文档:入门教程 => 点击学习

摘要

目录对数器验证算法的正确性对数器模板对数器验证算法的正确性 对数器介绍 1.有一个你想要测的方法a; 2.实现一个绝对正确但是复杂度不好的方法b; 3.实现一个随机样本产生器; 4.

对数器验证算法的正确性

对数器介绍

1.有一个你想要测的方法a;

2.实现一个绝对正确但是复杂度不好的方法b;

3.实现一个随机样本产生器;

4.实现对比算法a和b的方法;

5.把方法a和方法b比对多次来验证方法a是否正确;

6.如果有一个样本使得比对出错,打印样本分析是哪个方法出错;

7.当样本数量很多时比对测试依然正确,可以确定方法a已经正确。

我们在写算法的时候很多情况下可能是应为没有案例测试而找不到bug,而通过对数器我们可以很方便的进行大量的样本测试,在这些样本中找到算法中不正确的案例,通过这些案例我们就能够发现我们的的程序出错在哪?如果大样本我们的程序都没有出错那么我们的程序也就可以理解为是正确的了。


public static int[] randomArray(int maxLength, int minValue, int maxValue) {
    int[] array = new int[random(0, maxLength + 1)];
    if (minValue > maxValue) {
        throw new IllegalArgumentException("左边界不能大于右边界");
    }
    int range = maxValue - minValue;
    for (int i = 0; i < array.length; i++) {
        array[i] = (int) (Math.random() * range) + minValue;
    }
    return array;
}

public static int random(int minValue, int maxValue) {
    if (minValue > maxValue) {
        throw new IllegalArgumentException("左边界不能大于右边界");
    }
    int rang = maxValue - minValue;
    return (int) (Math.random() * rang) + minValue;
}

public static boolean isSorted(int[] arr) {
    if (arr.length < 2) {
        return true;
    }
    int max = arr[0];
    for (int i = 1; i < arr.length; i++) {
        if (max > arr[i]) {
            return false;
        }
        max = Math.max(max, arr[i]);
    }
    return true;
}

private static void swap(int[] arr, int i, int j) {
    int tmp = arr[i];
    arr[i] = arr[j];
    arr[j] = tmp;
}

public static void selectionSort(int[] arr) {
    if (arr == null || arr.length < 2) {
        return;
    }
    int N = arr.length;
    for (int i = 0; i < N; i++) {
        int minValueIndex = i;
        for (int j = i + 1; j < N; j++) {
            minValueIndex = arr[j] < arr[minValueIndex] ? j : minValueIndex;
        }
        swap(arr, i, minValueIndex);
    }
}
public static void main(String[] args) {
    int maxLength = 50;
    int maxValue = 1000;
    int testTimes = 1000000;
    for (int i = 0; i < testTimes; i++) {
        int[] arr1 = randomArray(maxLength, 0, maxValue);
        int[] arr2 = arr1.clone();
        selectionSort(arr1);
        if (!isSorted(arr1)) {
            printArray(arr2);
            System.out.println("选择排序错了");
            break;
        }
    }
}

对数器模板

介绍:

该对数器会对我们写的 target() 函数 进行 500000 ,每次目标数组是最大长度为 maxLength 最大值为maxValue 的整数数组, 目标值是生成一个最大值为maxValue 的整数,通过检验两个函数的计算结果来比对我们写的函数是否正确的方法。

如果我们的函数在高达 50万次 的测试中都正确,那么就可以说明我们的函数是正确的。

  • testTimes 函数的测试次数
  • randomArray(maxLength, maxValue) 生成一个 最大长度为 maxLength 最大值为maxValue 的整数数组
  • random(0, maxValue); 生成一个最大值为maxValue 的整数
  • test(arr, num) 通过暴力方法写的低效率函数,但是保证正确率是100%
  • target(arr, num) 我们自己写的高效率的函数,不保证100%正确,通过对数器进行检验模板的正确性
public static void main(String[] args) {
    int testTimes = 500000;
    int maxLength = 50;
    int maxValue = 100;
    boolean success = true;
    for (int i = 0; i < testTimes; i++) {
        int[] arr = randomArray(maxLength, maxValue);
        Arrays.sort(arr);
        int num = random(0, maxValue);
        if (target(arr, num) != test(arr, num)) {
            success = false;
            printArray(arr);
            System.out.println(num);
            System.out.println("判断出错");
            System.out.println("目标函数结果 = " + target(arr, num));
            System.out.println("测试函数结果 = " + test(arr, num));
            break;
        }
    }
    System.out.println(success ? "LUCK" : "Fucking fucked");
}

到此这篇关于Java对数器验证算法详解的文章就介绍到这了,更多相关Java对数器内容请搜索编程网以前的文章或继续浏览下面的相关文章希望大家以后多多支持编程网!

--结束END--

本文标题: Java对数器验证算法详解

本文链接: https://lsjlt.com/news/209084.html(转载时请注明来源链接)

有问题或投稿请发送至: 邮箱/279061341@qq.com    QQ/279061341

猜你喜欢
  • Java对数器验证算法详解
    目录对数器验证算法的正确性对数器模板对数器验证算法的正确性 对数器介绍 1.有一个你想要测的方法a; 2.实现一个绝对正确但是复杂度不好的方法b; 3.实现一个随机样本产生器; 4....
    99+
    2023-05-15
    Java对数器 Java对数器验证算法
  • Java对数器验证算法怎么使用
    本文小编为大家详细介绍“Java对数器验证算法怎么使用”,内容详细,步骤清晰,细节处理妥当,希望这篇“Java对数器验证算法怎么使用”文章能帮助大家解决疑惑,下面跟着小编的思路慢慢深入,一起来学习新知识吧。对数器验证算法的正确性对数器介绍有...
    99+
    2023-07-06
  • Java身份证验证方法实例详解
    Java身份证验证方法实例详解身份证号码验证 1、号码的结构 公民身份号码是特征组合码,由十七位数字本体码和一位校验码组成。排列顺序从左至右依次为:六位数字地址码,      八位数字出生日...
    99+
    2023-05-31
    java 身份证 验证
  • 详解Java如何实现数值校验的算法
    给定一个字符串如何判断它是否为数值类型?例如:字符串+100、5e2、-123、3.1416以及-1E-16都表示数值,为数值类型,但12e、1a3.14、1.2.3、+-5以及12...
    99+
    2024-04-02
  • uniapp表单验证方法详解
    目录表单验证不触发解决办法1:直接在input中加入@input="binddata('email',$event.detail.value)"方...
    99+
    2022-11-13
    uniapp表单验证不生效 uniapp实现表单验证 uni-app表单验证
  • Java JWT实现跨域身份验证方法详解
    目录1、JWT简介2、JWT的结构2.1 头部(header)2.2 载荷(payload)2.3 签证(signature)3、JWT的原则4、JWT的用法5、JWT的问题和趋势6...
    99+
    2024-04-02
  • C语言算法打卡回文串验证算法题解
    目录概念Leetcode例题:1.回文串的验证2.有效回文3.回文排列点杀回文排列点杀回文验证(有效性)对撞指针概念 所谓回文串,就是字符串反转以后和原串相同,如 abba 和 li...
    99+
    2024-04-02
  • 详解Python结合Genetic Algorithm算法破解网易易盾拼图验证
    首先看一下目标的验证形态是什么样子的 是一种通过验证推理的验证方式,用来防人机破解的确是很有效果,但是,But,这里面已经会有一些破绽,比如: (以上是原图和二值化之后的结果) ...
    99+
    2024-04-02
  • java仿Servlet生成验证码实例详解
    java仿Servlet生成验证码实例详解实现原理:使用BufferedImage对象的Graphics来进行绘制,然后输出成一张图片进行保存实现代码及详解:public class validateCode{ private stati...
    99+
    2023-05-31
    java servlet 验证码
  • Java实现验证文件名有效性的方法详解
    目录使用java.io.File使用 NIO2 API自定义的实现使用String.contains正则表达式模式匹配总结在本文中,我们将讨论使用 Java 验证一个给定的字符串是否...
    99+
    2024-04-02
  • java验证是否是数字的方法
    java验证是否是数字的方法:方法一:用JAVA自带的函数public static boolean isNumeric(String str){ for (int i = str.length();--i>=0;){ if (!Chara...
    99+
    2019-02-01
    java
  • C#实现公式计算验证码的示例详解
    目录场景需求开发环境开发工具实现代码实现效果场景 现在很多的平台已经不使用普通的数字、字母等验证码了,取而代之的是拼图类、选图类、旋转类或者计算类的验证码。关于字母数字或者中文验证码...
    99+
    2024-04-02
  • vue验证码组件使用方法详解
    本文实例为大家分享了vue验证码组件使用的具体实现代码,供大家参考,具体内容如下 代码如下: <template> <div class="join...
    99+
    2024-04-02
  • ASP.NET Core中Cookie验证身份用法详解
    目录添加配置ASP.NET Core 1.xASP.NET Core 2.x创建身份认证CookieASP.NET Core 1.xASP.NET Core 2.xSigning o...
    99+
    2024-04-02
  • PHP验证手机浏览的方法详解
    PHP验证手机浏览的方法详解 随着移动互联网的快速发展,越来越多的网站需要优化适配手机浏览,为此,我们可以通过PHP来验证用户是否使用手机浏览器访问网站,从而实现手机端与PC端的自动适...
    99+
    2024-03-07
    验证 php 浏览 iphone
  • Golang验证器之validator是使用详解
    目录前言什么是validator安装使用方法校验规则跨字段验证错误处理小结前言 对于HTTP请求,我们要在脑子里有一个根深蒂固的概念,那就是任何客户端传过来的数据都是不可信任的。那么...
    99+
    2024-04-02
  • Java递归算法详解
    递归算法是一种通过调用自身来解决问题的方法。在Java中,递归算法通常有以下几个要素:1. 基本情况:递归方法必须有一个基本情况,即...
    99+
    2023-09-14
    Java
  • 详解正则表达式之数字验证
    正则表达式可以用来验证字符串是否符合特定的格式要求。在数字验证中,我们可以使用正则表达式来验证字符串是否只包含数字字符。以下是一个基...
    99+
    2023-08-15
    正则表达式
  • Java对称与非对称加密算法原理详细讲解
    目录一、对称加密算法1.概述2.常用的对称加密算法3.AES加密①ECB模式②CBC模式二、秘钥交换算法三、非对称加密算法1.概述2.RSA算法3.非对称加密算法的优缺点四、总结一、...
    99+
    2022-11-13
    Java对称与非对称加密算法 Java对称加密算法 Java非对称加密算法
  • java开发建造者模式验证实例详解
    目录引言经典再现建造者模式优点及应用场景工厂方法模式和建造者模式区别拓展与总结引言 创建一个类的实例,我们通常使用类中构造函数来完成对象的初始化,如果一个对象构造过程很复杂,如果将构...
    99+
    2024-04-02
软考高级职称资格查询
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作