对数器验证算法正确性----bug寻找,文章中含有测试源码

简介: 对数器验证算法正确性----bug寻找,文章中含有测试源码
先写一个随机数组生成函数
再写一个暴力求解函数
再写一个二分法函数
循环打印,产生任意随机数组,验证暴力求解和二分法求解是否一致,一致则正确,不一致则错误,打印出错误例子方便后面寻找bug
[打印出错误例子](https://editor.csdn.net/md?articleId=122718241)
package cn.Text;
import java.util.Arrays;
/**
 * 二分法
 * 一次找一半,比较找位置/数字(num)   保证有序
 * 注:我们中点位置一般去上中点
 * 135679      上中点为5
 */
public class Dichotomy {
    /**
     *  二分法查找
     */
    public static boolean find(int[] arr,int num){
        //TODO 边界条件,先剔除掉不符合条件的一部分
        if((arr==null)||(arr.length==0)){
            return false;
        }
        //TODO 左边界
        int L=0;
        //TODO 有边界
        int R=arr.length-1;
        /**
         * arr的[L...........R]之间查找一个数num
         */
        while(L<=R){
            int media=(L+R)/2;
            if(arr[media]==num){
                return true;
            }
            else if(arr[media]<num){
                L=media+1;
            }
            else{
                R=media-1;
            }
        }
        return false;
    }
    /**
     * 遍历,暴力求解
     * @param sortedArr
     * @param num
     * @return
     */
    public static boolean test(int[] sortedArr, int num) {
        for (int cur : sortedArr) {
            if (cur == num) {
                return true;
            }
        }
        return false;
    }
    /**
     * 生成一个随机数组
     */
    public static int[] generateRandomArray(int maxSize, int maxValue) {
        int[] arr = new int[(int) ((maxSize + 1) * Math.random())];
        for (int i = 0; i < arr.length; i++) {
            //TODO 最后减去一个(int) (maxValue * Math.random())是为了产生复数的测试集合,
            //         例如不减(int) (maxValue * Math.random())之前数组是  1,15,2,33,9
            //             减去(int) (maxValue * Math.random())之后数组是  -31,5,7,23,-11
            //             产生负数,增加测试机效果,减少耦合性
            arr[i] = (int) ((maxValue + 1) * Math.random()) - (int) (maxValue * Math.random());
            /** TODO int 取整     int(8.9)=8     int(1.2)=1  int(0.9)=0
             * 上面的(maxValue+1)是应为数字全部扩大maxValue倍,为什么不是maxValue呢
             * int(9.9)=9  ,   Math.random的取值范围是[0,1),左闭右开,举个例子说明一下
             *  TODO  maxValue=9,Math.random()=0.99【因为范围为[0,1),左闭右开,故不能到1,只能无限趋近于1】
             *  int((maxValue) * Math.random())=int(9*0.99)=int(8.91)=8,
             *  TODO  maxValue=1,Math.random()=0.99
             *  int((maxValue) * Math.random())=int(1*0.99)=0
             *  所以maxValue要加1
             *  int((maxValue+1) * Math.random())=int(2*0.99)=1
             */
        }
        return arr;
    }
    /**
     * 主函数
     *
     * @param args
     */
    public static void main(String[] args) {
        int testTime = 500000;
        int maxSize = 10;
        int maxValue = 100;
        boolean succeed = true;
        for (int i = 0; i < testTime; i++) {
            int[] arr = generateRandomArray(maxSize, maxValue);
            //TODO 打印出随机生成的数组,循环一次生成一个
            System.out.println(Arrays.toString(arr));
            //TODO 因为二分法的先决条件是数组有序,所以我们来个排序使数组从小到大排序
            Arrays.sort(arr);
            //TODO 排列后的数组
            System.out.println(Arrays.toString(arr));
            int value = (int) ((maxValue + 1) * Math.random()) - (int) (maxValue * Math.random());
            //TODO 二分法和暴力法进行比对,看是否一样
            if (test(arr, value) != find(arr, value)) {
                System.out.println("出错了!");
                succeed = false;
                break;
            }
        }
        System.out.println(succeed ? "Nice!" : "Fucking fucked!");
    }
}
**
## 验证算法正确
**

image.png

目录
相关文章
|
10天前
|
算法 数据挖掘 测试技术
犬类癌症检测(CANDiD)研究:使用独立测试集对1000多只犬进行基于高通量测序的多癌种早期检测"液体活检"血液测试的临床验证
这项研究首次在大规模独立测试集上验证了基于NGS的液体活检在犬类多癌种检测中的应用。该方法具有很高的特异性,可以作为一种新的无创癌症筛查和辅助诊断工具。通过早期发现癌症,有望改善犬类癌症的诊断和管理模式。
36 12
|
8天前
|
机器学习/深度学习 前端开发 算法
婚恋交友系统平台 相亲交友平台系统 婚恋交友系统APP 婚恋系统源码 婚恋交友平台开发流程 婚恋交友系统架构设计 婚恋交友系统前端/后端开发 婚恋交友系统匹配推荐算法优化
婚恋交友系统平台通过线上互动帮助单身男女找到合适伴侣,提供用户注册、个人资料填写、匹配推荐、实时聊天、社区互动等功能。开发流程包括需求分析、技术选型、系统架构设计、功能实现、测试优化和上线运维。匹配推荐算法优化是核心,通过用户行为数据分析和机器学习提高匹配准确性。
37 3
|
1月前
|
搜索推荐 算法 C语言
【排序算法】八大排序(上)(c语言实现)(附源码)
本文介绍了四种常见的排序算法:冒泡排序、选择排序、插入排序和希尔排序。通过具体的代码实现和测试数据,详细解释了每种算法的工作原理和性能特点。冒泡排序通过不断交换相邻元素来排序,选择排序通过选择最小元素进行交换,插入排序通过逐步插入元素到已排序部分,而希尔排序则是插入排序的改进版,通过预排序使数据更接近有序,从而提高效率。文章最后总结了这四种算法的空间和时间复杂度,以及它们的稳定性。
104 8
|
1月前
|
搜索推荐 算法 C语言
【排序算法】八大排序(下)(c语言实现)(附源码)
本文继续学习并实现了八大排序算法中的后四种:堆排序、快速排序、归并排序和计数排序。详细介绍了每种排序算法的原理、步骤和代码实现,并通过测试数据展示了它们的性能表现。堆排序利用堆的特性进行排序,快速排序通过递归和多种划分方法实现高效排序,归并排序通过分治法将问题分解后再合并,计数排序则通过统计每个元素的出现次数实现非比较排序。最后,文章还对比了这些排序算法在处理一百万个整形数据时的运行时间,帮助读者了解不同算法的优劣。
124 7
|
2月前
|
机器学习/深度学习 JSON 算法
实例分割笔记(一): 使用YOLOv5-Seg对图像进行分割检测完整版(从自定义数据集到测试验证的完整流程)
本文详细介绍了使用YOLOv5-Seg模型进行图像分割的完整流程,包括图像分割的基础知识、YOLOv5-Seg模型的特点、环境搭建、数据集准备、模型训练、验证、测试以及评价指标。通过实例代码,指导读者从自定义数据集开始,直至模型的测试验证,适合深度学习领域的研究者和开发者参考。
940 3
实例分割笔记(一): 使用YOLOv5-Seg对图像进行分割检测完整版(从自定义数据集到测试验证的完整流程)
|
2月前
|
监控 算法 数据安全/隐私保护
基于三帧差算法的运动目标检测系统FPGA实现,包含testbench和MATLAB辅助验证程序
本项目展示了基于FPGA与MATLAB实现的三帧差算法运动目标检测。使用Vivado 2019.2和MATLAB 2022a开发环境,通过对比连续三帧图像的像素值变化,有效识别运动区域。项目包括完整无水印的运行效果预览、详细中文注释的代码及操作步骤视频,适合学习和研究。
|
2月前
|
机器学习/深度学习 JSON 算法
语义分割笔记(二):DeepLab V3对图像进行分割(自定义数据集从零到一进行训练、验证和测试)
本文介绍了DeepLab V3在语义分割中的应用,包括数据集准备、模型训练、测试和评估,提供了代码和资源链接。
328 0
语义分割笔记(二):DeepLab V3对图像进行分割(自定义数据集从零到一进行训练、验证和测试)
|
2月前
|
机器学习/深度学习 算法 PyTorch
目标检测实战(五): 使用YOLOv5-7.0版本对图像进行目标检测完整版(从自定义数据集到测试验证的完整流程)
本文详细介绍了使用YOLOv5-7.0版本进行目标检测的完整流程,包括算法介绍、环境搭建、数据集准备、模型训练、验证、测试以及评价指标。YOLOv5以其高精度、快速度和模型小尺寸在计算机视觉领域受到广泛应用。
1038 0
目标检测实战(五): 使用YOLOv5-7.0版本对图像进行目标检测完整版(从自定义数据集到测试验证的完整流程)
|
2月前
|
缓存 数据挖掘 测试技术
目标检测实战(三):YOLO-Nano训练、测试、验证详细步骤
本文介绍了YOLO-Nano在目标检测中的训练、测试及验证步骤。YOLO-Nano是一个轻量级目标检测模型,使用ShuffleNet-v2作为主干网络,结合FPN+PAN特征金字塔和NanoDet的检测头。文章详细说明了训练前的准备、源代码下载、数据集准备、参数调整、模型测试、FPS测试、VOC-map测试、模型训练、模型测试和验证等步骤,旨在帮助开发者高效实现目标检测任务。
69 0
目标检测实战(三):YOLO-Nano训练、测试、验证详细步骤
|
2月前
|
缓存 NoSQL Ubuntu
大数据-39 Redis 高并发分布式缓存 Ubuntu源码编译安装 云服务器 启动并测试 redis-server redis-cli
大数据-39 Redis 高并发分布式缓存 Ubuntu源码编译安装 云服务器 启动并测试 redis-server redis-cli
65 3