【左神算法】对数器

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!");
        }
    }



}

 

 

 

posted @ 2020-03-23 22:00  qxlxi  阅读(299)  评论(0编辑  收藏  举报