zoukankan      html  css  js  c++  java
  • 对数器

    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();
        }
  • 相关阅读:
    如何在google官方网站下载测试版、开发版(Beta、Dev)离线安装包?
    Google Chrome 开发进度 官方Blog
    如何在google官方网站下载正式版(Stable)离线安装包?
    asp 毫秒数 timer 当前0点与当前时间的毫秒差
    JavaScript toFixed() 方法
    sqlserver 数据库 SQL循环语句
    IE里Iframe的Cookie问题解决办法总结
    js cookie
    IIS 限制上传大小的问题 200k (SWFUpload_ASP操作的时候更改了本身的限制,还需要更改iis的大小)
    SWFUpload免费FLASH上传组件(ASP修改版)
  • 原文地址:https://www.cnblogs.com/bigdata-stone/p/10467062.html
Copyright © 2011-2022 走看看