對數器


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();
    }

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM