• 【左神算法】对数器


    1.计数器概念

    对数器的概念和使用
    0,有一个你想要测的方法a,
    1,实现一个绝对正确但是复杂度不好的方法b,
    2,实现一个随机样本产生器
    3,实现比对的方法
    4,把方法a和方法b比对很多次来验证方法a是否正确。
    5,如果有一个样本使得比对出错,打印样本分析是哪个方法出6,当样本数量很多时比对测试依然正确,可以确定方法a已经正确。

    2.代码体现

    1.有一个你想要测的方法a,测试一个冒泡排序

    /***
         * 冒泡实现
         * @param arr
         */
        public static void bubbleSort(int [] arr){
            if (arr.length == 0 || arr.length == 1){
                return;
            }
    
            for (int i = 0; i < arr.length-1 ; i++) {
                boolean flag = true;
                for (int j = 0; j < arr.length-1-i ; j++) {
                    if (arr[j]>arr[j+1]){
                        swap(arr,j,j+1);
                        flag = false;
                    }
                }
                if (flag){
                    break;
                }
            }
        }

    2. 实现一个绝对正确但是复杂度不好的方法b, 调用系统的排序

     /***
         * 2. 实现一个绝对正确的但是复杂度不好的方法b
         *  调用Arrays.sort 排序
         * @param arr
         */
        public static void  comparator(int [] arr){
            Arrays.sort(arr);
        }

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

    /***
         * 2.实现一个随机样本产生器
         * @param maxSize
         * @param maxValue
         */
        public static int [] generateRandomArray(int maxSize,int maxValue){
            int [] arr = new int [new Random((maxSize+1)).nextInt()];
            for (int i = 0; i < arr.length; i++) {
                arr[i] = new Random(maxValue+1).nextInt();
            }
            return arr;
        }

    4.实现比对的方法

     /***
         *  实现比对的方法
         * @param arr
         * @param targetArr
         * @return
         */
        public static boolean isEquals(int [] arr,int [] targetArr){
            //for zero
            if (arr.length == 0 || targetArr.length == 0){
                return true;
            }
    
            // for null
            if (arr == null && targetArr == null){
                return true;
            }
            // for null other not null but other is null
            if (arr == null && targetArr != null || arr != null && targetArr == null){
                return false;
            }
    
            for (int i = 0; i < arr.length; i++) {
                if (arr[i] != targetArr[i]){
                    return false;
                }
            }
            return true;
        }

    5.6步骤就是代码多Test

    5.全部代码

    package com.ncst.ch01;
    
    import java.util.Arrays;
    import java.util.Random;
    import java.util.concurrent.ForkJoinPool;
    
    /**
     * @author i
     * @create 2020/3/23 21:20
     * @Description 冒泡排序
     *      对数器的概念和使用
     *      1、有一个你想要测的方法a
     *      2、实现一个绝对正确的但是复杂度不好的方法b
     *      3.实现一个随机样本产生器
     *
     */
    public class BubbleSort {
    
        /***
         * 冒泡实现
         * @param arr
         */
        public static void bubbleSort(int [] arr){
            if (arr.length == 0 || arr.length == 1){
                return;
            }
    
            for (int i = 0; i < arr.length-1 ; i++) {
                boolean flag = true;
                for (int j = 0; j < arr.length-1-i ; j++) {
                    if (arr[j]>arr[j+1]){
                        swap(arr,j,j+1);
                        flag = false;
                    }
                }
                if (flag){
                    break;
                }
            }
        }
    
        /***
         * 交换
         * @param arr
         * @param i
         * @param j
         */
        public static void swap(int [] arr,int i,int j){
            int temp = arr[i];
            arr[i] = arr[j];
            arr[j] = temp;
        }
    
        /***
         * 2. 实现一个绝对正确的但是复杂度不好的方法b
         *  调用Arrays.sort 排序
         * @param arr
         */
        public static void  comparator(int [] arr){
            Arrays.sort(arr);
        }
    
        /***
         * 2.实现一个随机样本产生器
         * @param maxSize
         * @param maxValue
         */
        public static int [] generateRandomArray(int maxSize,int maxValue){
            int [] arr = new int [new Random((maxSize+1)).nextInt()];
            for (int i = 0; i < arr.length; i++) {
                arr[i] = new Random(maxValue+1).nextInt();
            }
            return arr;
        }
    
        /***
         *  实现比对的方法
         * @param arr
         * @param targetArr
         * @return
         */
        public static boolean isEquals(int [] arr,int [] targetArr){
            //for zero
            if (arr.length == 0 || targetArr.length == 0){
                return true;
            }
    
            // for null
            if (arr == null && targetArr == null){
                return true;
            }
            // for null other not null but other is null
            if (arr == null && targetArr != null || arr != null && targetArr == null){
                return false;
            }
    
            for (int i = 0; i < arr.length; i++) {
                if (arr[i] != targetArr[i]){
                    return false;
                }
            }
            return true;
        }
    
        /***
         *
         * @param arr
         * @return
         */
        public static int [] copyArray(int [] arr){
            int [] newArray = new int [arr.length];
            for (int i = 0; i < arr.length; i++) {
                newArray[i] = arr[i];
            }
            return newArray;
        }
    
        public static void main(String[] args) {
            int maxSize = 100000;
            int maxValue = 100000;
            //随机生成一个数组
            int [] arr = generateRandomArray(maxSize,maxValue);
            int [] arr2 = copyArray(arr);
            //自己的排序
            bubbleSort(arr);
            //jdk的排序
            comparator(arr2);
            if (isEquals(arr,arr2)){
                System.out.println("success!");
            }else {
                System.out.println("fuck!");
            }
        }
    
    
    
    }
    
  • 相关阅读:
    LevelDB安装配置
    Enumerable.Intersect方法来生成2个序列的交集
    .Net 分页功能实现
    Canvas统计图表(多边形,蜘蛛网,渐变色)
    存储格式与压缩算法
    Hive数仓构建及数据倾斜
    团队沟通
    git错误:OpenSSL SSL_connect: SSL_ERROR_SYSCALL in connection to github.com:443
    linux搭建gitlab服务器
    2018牛客网暑期ACM多校训练营第一场
  • 原文地址:https://www.cnblogs.com/qxlxi/p/12860696.html
Copyright © 2020-2023  润新知