【算法学习系列】05 - 对数器的说明与使用

这篇具有很好参考价值的文章主要介绍了【算法学习系列】05 - 对数器的说明与使用。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

对数器说明


在算法领域中,对数器指的是一个用于测试算法正确性的工具。对于一个需要被测试的算法A,对数器会生成一组随机数据,然后将这组随机数据作为输入分别传递给算法A和一个暴力算法B,然后比较两者的输出结果是否相同。

如果A和B的输出结果相同,则说明A的实现是正确的。否则需要进一步检查并修复A的实现。使用对数器可以帮助程序员在开发算法时更快速地发现并修复错误,提高开发效率。

对数器使用

创建随机样本生成器


我们后面会来验证选择排序算法的正确性,所以这里先实现一个随机样本生成器:返回一个数组 arr,arr的长度∈[0, maxLen - 1],arr中的每个值∈[0, maxValue - 1]。其中 maxLen 和 maxValue 当作参数传入。

该随机样本生成器可以生成一个随机长度和随机值的数组。实现如下:

	// 返回一个数组 arr、arr的长度∈[0, maxLen - 1]、arr中的每个值∈[0, maxValue - 1]
    private int[] createRandomArr(int maxLen, int maxValue){
        int len = (int)(Math.random() * maxLen);
        int[] arr = new int[len];
        for (int i = 0;i < len;i++){
            arr[i] = (int)(Math.random() * maxValue);
        }
        return arr;
    }

实现 isSorted(int[] arr) 函数验证排序正确性


实现代码如下:

	// 验证数组是否排序正确(值是否从小到大排序)
    private 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 = arr[i];
        }
        return true;
    }

后面验证选择排序算法功能正确性需要使用到:

  • isSorted(int[] arr) 函数返回 true 表示排序正确,返回 false 表示排序错误。

实现选择排序算法


排序工具类实现代码如下:

package com.example.myapplication.util;

/**
 * 排序工具类
 */
public class SortUtil {

    private static volatile SortUtil sortUtil;

    private SortUtil() {
    }

    public static SortUtil instance(){
        if (sortUtil == null){
            synchronized (SortUtil.class){
                if (sortUtil == null){
                    sortUtil = new SortUtil();
                }
            }
        }
        return sortUtil;
    }

    // 选择排序算法
    public static void selectionSort(int[] arr){
        if (arr == null || arr.length < 2){
            return;
        }
        for (int i = 0;i < arr.length - 1;i++){
            int minIndex = i;
            for (int j = i + 1;j < arr.length;j++){
                if (arr[minIndex] > arr[j]){
                    minIndex = j;
                }
            }
            swap(arr, minIndex, i);
        }
    }

    // 交换数组 arr 中下标 i 和 j 的值
    private static void swap(int[] arr, int i, int j){
        int temp = arr[i];
        arr[i] = arr[j];
        arr[j] = temp;
    }
}

进行大样本随机测试验证算法正确性


这里进行一万次随机数组生成并使用选择排序算法排序。

测试代码如下:

	// 做一万次大样本随机测试 验证选择排序算法正确性
	private void useLogarithm() {
        int maxLen = 10;
        int maxValue = 1000;

        // 做一万次大样本随机测试 验证选择排序算法正确性
        int testCount = 10000;
        boolean isWrong = false;
        for (int i = 0;i < testCount;i++){
            int[] randomArr = createRandomArr(maxLen, maxValue);
            // 对生成的随机数组进行选择排序
            SortUtil.selectionSort(randomArr);
            if (!isSorted(randomArr)){
                // 选择排序算法错误
                isWrong = true;
                break;
            }
        }
        // 结果验证
        if (isWrong){
            System.out.println(":> 通过进行大样本随机测试,算法存在错误。");
        }else {
            System.out.println(":> 通过进行大样本随机测试,算法功能正确。");
        }
    }

运行结果如下图示:

【算法学习系列】05 - 对数器的说明与使用

由上图可知,大样本随机测试都对 那选择排序算法功能确定是对的

总结


Q:什么是对数器?
Ans:生成大量随机样本测试算法正确性的工具。


“Peace Love Respect”文章来源地址https://www.toymoban.com/news/detail-455095.html

到了这里,关于【算法学习系列】05 - 对数器的说明与使用的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • Python实现离散选择多项式对数模型(MNLogit算法)项目实战

    说明:这是一个机器学习实战项目(附带 数据+代码+文档+视频讲解 ),如需 数据+代码+文档+视频讲解 可以直接到文章最后获取。 多项式对数模型是离散选择模型的一种。 本项目通过MNLogit算法来构建多项式对数模型。   本次建模数据来源于网络(本项目撰写人整理而成),数

    2024年01月23日
    浏览(34)
  • 青岛大学_王卓老师【数据结构与算法】Week05_11_栈与递归_学习笔记

    本文是个人学习笔记,素材来自青岛大学王卓老师的教学视频。 一方面用于学习记录与分享, 另一方面是想让更多的人看到这么好的《数据结构与算法》的学习视频。 如有侵权,请留言作删文处理。 课程视频链接: 数据结构与算法基础–第05周11–3.4栈和递归 递归的定义

    2024年02月16日
    浏览(34)
  • Visual Studio Code系列--CMake Tools使用说明

            在linux系统上开发程序,一般都是使用vim+gcc+gdb进行的;但是为了开发效率我们也会使用Visual Studio Code进行开发,毕竟有界面的开发调试还是更加友好一些。         老牌程序员肯定都知道make构建工具,但是其晦涩的语法还是难住不少初级开发者的。那么有没有一种

    2024年02月12日
    浏览(76)
  • 青岛大学_王卓老师【数据结构与算法】Week05_06_栈的顺序表示_学习笔记

    本文是个人学习笔记,素材来自青岛大学王卓老师的教学视频。 一方面用于学习记录与分享, 另一方面是想让更多的人看到这么好的《数据结构与算法》的学习视频。 如有侵权,请留言作删文处理。 课程视频链接: 数据结构与算法基础–第05周06–3.3栈的表示和实现2–3.

    2024年02月16日
    浏览(43)
  • NZ系列工具NZ02:VBA读取PDF使用说明

    【分享成果,随喜正能量】时光绽放并蒂莲,更是一份殷殷嘱托,更是一份诚挚祝福,是一份时光馈赠,又是一份时光陪伴。。 我的教程一共九套及VBA汉英手册一部,分为初级、中级、高级三大部分。是对VBA的系统讲解,从简单的入门,到数据库,到字典,到高级的网抓及类

    2024年02月13日
    浏览(28)
  • 机器学习中的数学原理——对数似然函数

    这个专栏主要是用来分享一下我在 机器学习中的 学习笔记及一些感悟,也希望对你的学习有帮助哦!感兴趣的小伙伴欢迎 私信或者评论区留言!这一篇就更新一下《 白话机器学习中的数学——对数似然函数》! 目录 一、什么是对数似然函数 二、算法分析 三、总结  对

    2024年04月10日
    浏览(30)
  • STM32系列——手把手教你蓝牙模块HC05、HC06的使用,重在“用起来”(HAL库)

    不论是HC05还是HC06,我们用到的都是蓝牙模块的透传功能,只需要用到4个引脚:RXD、TXD、VCC(5V)、GND。 1、HC-05有6个引脚,但是我们只用到4个。 2、HC-05正面有一个按键。与HC-06的区别是, 它上电之前必须要按住此按键再插入电脑中,才能够进入AT模式 。HC-06没有按键,直接

    2024年02月05日
    浏览(53)
  • 青岛大学_王卓老师【数据结构与算法】Week05_08_顺序栈的操作2_学习笔记

    本文是个人学习笔记,素材来自青岛大学王卓老师的教学视频。 一方面用于学习记录与分享, 另一方面是想让更多的人看到这么好的《数据结构与算法》的学习视频。 如有侵权,请留言作删文处理。 课程视频链接: 数据结构与算法基础–第05周08–3.3栈的表示和实现4–3.

    2024年02月16日
    浏览(49)
  • 青岛大学_王卓老师【数据结构与算法】Week05_14_队列的顺序表示和实现2_学习笔记

    本文是个人学习笔记,素材来自青岛大学王卓老师的教学视频。 一方面用于学习记录与分享, 另一方面是想让更多的人看到这么好的《数据结构与算法》的学习视频。 如有侵权,请留言作删文处理。 课程视频链接: 数据结构与算法基础–第05周14–3.5队列的表示和实现3–

    2024年02月16日
    浏览(44)
  • 青岛大学_王卓老师【数据结构与算法】Week05_13_队列的顺序表示和实现1_学习笔记

    本文是个人学习笔记,素材来自青岛大学王卓老师的教学视频。 一方面用于学习记录与分享, 另一方面是想让更多的人看到这么好的《数据结构与算法》的学习视频。 如有侵权,请留言作删文处理。 课程视频链接: 数据结构与算法基础–第05周13–3.5队列的表示和实现2–

    2024年02月17日
    浏览(32)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包