美文网首页
算法-对数器

算法-对数器

作者: 幻影翔 | 来源:发表于2020-02-07 22:35 被阅读0次

对数器的概念和使用

0、有一个你想测的方法
1、实现一个绝对正确但是复杂度不好的方法b
2、实现一个随机样本产生器
3、实现对比的方法
4、把方法a和方法b比对很多次来验证a是否正确
5、如果有一个样本使得比对出错,打印样本分析是那个方法出错
6、当样本数量很多时比对测试依然正确,可以确定方法a已经正确

 // 对数器测试
    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 = ArrayUtils.generateRandomArray(size,value);
            int[] arr2 = ArrayUtils.copyArray(arr1);
            int[] arr3 = ArrayUtils.copyArray(arr1);
            bubbortSort(arr1);
            ArrayUtils.rightMathod(arr2);
            if (!ArrayUtils.isEqual(arr1, arr2)) {
                succeed = false;
                System.out.println(arr3);
                break;
            }
        }
        System.out.println(succeed ? "succeed" : "you failed");
    }

使用工具类


/**
 * 数组工具类
 *
 * @Author jack
 * @Since 1.0 2020/2/7 21:49
 */
public class ArrayUtils {

    /**
     * 生成随机数组
     * @param size
     * @param value
     * @return
     */
    public static int[] generateRandomArray(int size, int value) {
        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;
    }

    /**
     * 拷贝数组
     * @param arr
     * @return
     */
    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;
    }

    /**
     * 判断两个数组是否相等
     * @param arr1
     * @param arr2
     * @return
     */
    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;
    }

    /**
     * 绝对正确的方法
     * @param arr
     */
    public static void rightMathod(int[] arr) {
        Arrays.sort(arr);
    }
}

时间复杂度

在最差情况下,常熟操作数量的指标,常用O(读 big O) 标识,在常数表达式中,只要高阶项,不要低阶项,也不要高阶项的系数,剩下的部分如果记为f(n), 那么时间复杂度为O(f(N)).

相关文章

  • 算法-对数器

    对数器的概念和使用 0、有一个你想测的方法1、实现一个绝对正确但是复杂度不好的方法b2、实现一个随机样本产生器3、...

  • 对数器

    0,有一个你想要测试的方法a 1,实现一个绝对正确的但是复杂度不好的方法b 2,实现一个随机样本产生器 3,实现比...

  • 对数器

    数组排序对数器 1.java有自己的数组复制方法和比较方法,要先导入java.util.Arrays包; 2.生成...

  • 算法时间复杂度与对数器

    认识时间复杂度 常数时间的操作:一个操作如果和数据量没有关系,每次都是固定时间内完成的操作,叫做常数操作。 常数时...

  • 数据结构与算法-空间复杂度

    程序空间计算的因素 寄存器本身的指令。 常数。 变量。 输入。 对数据进行操作的辅助空间。 我们在考量算法的空间复...

  • 排序

    常见排序算法 冒泡排序 插入排序 选择排序 快速排序 归并排序 堆排序 桶排序 对数器 冒泡排序 基本思想:元素两...

  • HTML5 video audio属性

    什么是编解码器 编解码器是使用压缩算法对数据的数字流进行编码和解码,使之更适合播放的计算机程序。编解码器的目标通常...

  • 九.随机森林

    通过组合多个过拟合评估器来降低过拟合程度,实质上是一种集成学习方法,通常称为装袋算法。 虽然每个评估器都对数据过拟...

  • 说说Array.prototype.sort()

    js中原生的sort()采用快排和插入排序算法,根据比较器对数组排序。默认是将数组元素转为字符串,然后根据Unic...

  • 最全BAT算法面试100题:阿里、百度、腾讯、京东、美团、今日头

    第一:复杂度估算和排序算法(上) 1) 时间复杂度和空间复杂度 2)认识对数器 3)冒泡排序 4)选择排序 5)插...

网友评论

      本文标题:算法-对数器

      本文链接:https://www.haomeiwen.com/subject/tcspxhtx.html