对数器

1. 对数器概念和使用

     (1)有一个你想要的测的方法a

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

  (3)实现对比的方法

  (4)把方法a和方法b对比很多次来验证方法a是否是正确的

  (5)如果有个样本使得对比出错,打印出样本分析是哪个方法出错的

  (6)当样本数量很多的时候,对比测试依然正确,可以确定方法a已经正确  

2.在笔试的时候要准备模板,二叉树的随机样本发生器,数组的随机样本发生器,在上笔试之前要准备一个随机样本发生器和一个对数器,当你出错网站不弹出出错报告的时候,可以比别人快,准备一个模板上考场要快。

下面是对数器的模型展示:

  

public static void main(String[] args) {
        int testTime=500000;
        int size = 10;
        int value=100;
        boolean succeed = true;
        for(int i = 0 ;i<testTime;i++){
            int[] arr1 = generateRandomArray(size,value);
            int[] arr2 = copyArray(arr1);
            int[] arr3= copyArray(arr1);
            BubbleSort.bubbleSort(arr1);
            rightMethod(arr2);
            if(!isEqual(arr1,arr2)){
                succeed=false;
                printArray(arr3);
                break;
            }
        }
    }
    //产生一个随机数组,数组的长度和值都是随机的,
    public static  int[] generateRandomArray(int size,int value){
        //在java中,Math.random() ->double(0,1)
        //(int)((size+1)*Math.random())--->产生的是[0,size]之间的整数
        //生成长度随机的数组,数组的最大长度是size的长度
        int[] arr = new int[(int)((size+1)*Math.random())];
        for(int i = 0 ;i<arr.length;i++){
            //针对数组中的每个值都可以随机一下,一个随机数减去另外一个随机数,可能产生正数,也可能产生负数
            arr[i]=(int)((value+1)*Math.random())-(int)(value*Math.random());//值也可以是随机的
        }
        return arr;
    }
    //复制数组
    public static int[] copyArray(int[] arr){
        if(arr==null){
            return null;
        }
        int[] res = new int[arr.length];
        for(int i = 0 ;i<arr.length;i++){
            res[i]=arr[i]  ;
        }
        return res;
    }
    //绝对正确的方法,这个方法可以时间复杂度很差,但是要保证其准确性
    public static void rightMethod(int[] arr){
        Arrays.sort(arr);
    }
    //
    public static boolean isEqual(int[] arr1,int[] arr2){
        if(arr1==null&&arr2!=null||arr1!=null&&arr2==null){
            return false;
        }
        if (arr1==null&&arr2==null){
            return true;
        }
        if (arr1.length!=arr2.length){
            return false;
        }
        for(int i = 0;i<arr1.length;i++){
            if(arr1[i]!=arr2[i]){
                return false;
            }
        }
        return true;
    }
    //打印出数组
    public static void printArray(int[] arr){
        if(arr==null){
            return;
        }
        for(int i = 0 ;i<arr.length;i++){
            System.out.println(arr[i]+" ");
        }
        System.out.println();
    }

 

posted @ 2019-03-03 19:32  stone1234567890  阅读(1166)  评论(0编辑  收藏  举报