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