美文网首页
复杂度分析(时间)

复杂度分析(时间)

作者: 曹来东 | 来源:发表于2019-05-14 09:54 被阅读0次

动态数组9

方法 最好 最坏 平均
add(int index,E element) O(1) O(n) O(n)
remove(int index) O(1) O(n) O(n)
set(int index,E element) O(1) O(1) O(1)
get(int index) O(1) O(1) O(1)

链表

方法 最好 最坏 平均
add(int index,E element) O(1) O(n) O(n)
remove(int index) O(1) O(n) O(n)
set(int index,E element) O(1) O(n) O( n)
get(int index) O(1) O(n) O(n)

动态数组add(E element)复杂度分析

  • 均摊复杂度
    经过连续的多次复杂度比较低的情况后,出现个别复杂度比较高的情况.
复杂度
最好 O(1)
最坏 O(n)
均摊 O(1)

动态数组的缩容

  • 如果内存使用比较紧张,动态数组又有比较多的剩余空间,可以考虑进行缩容操作.
  • 比如剩余空间占总容量的一半时,就进行缩容.
  • 如果扩容倍数,缩容时机设计不得当,有可能会导致复杂度震荡.
private void trim() {
        // 30
        int oldCapacity = elements.length;
        // 15
        int newCapacity = oldCapacity >> 1;
        if (size > (newCapacity) || oldCapacity <= DEFAULT_CAPACITY) return;
        
        // 剩余空间还很多
        E[] newElements = (E[]) new Object[newCapacity];
        for (int i = 0; i < size; i++) {
            newElements[i] = elements[i];
        }
        elements = newElements;
        
        System.out.println(oldCapacity + "缩容为" + newCapacity);
    }

相关文章

  • 复杂度分析

    为什么需要复杂度分析? 大O复杂度表示法 时间复杂度分析 常见复杂度量级 复杂度量级简单说明 空间复杂度 时间复杂...

  • 针对封装数组的简单复杂度分析

    完成了数组的封装之后我们还需对其进行复杂度分析:此处的复杂度分析主要是指时间复杂度分析,算法的时间复杂度反映了程序...

  • map:169.求众数(投票算法)

    求众数 哈希Map 复杂度分析 时间复杂度:O(N) 空间复杂度: O(N) 投票算法 复杂度分析

  • 一个好的算法如何测评

    一个算法的好坏可以根据复杂度分析来测评. 复杂度分析包括时间复杂度和空间复杂度. 1.时间复杂度 需要考虑: 1)...

  • 常用java算法理解时间复杂度与空间复杂度

    常用的算法的时间复杂度和空间复杂度: 排序法 最差时间分析 = 平均时间复杂度 = 稳定...

  • 递归树——借助树来求解递归算法的时间复杂度

    递归代码的时间复杂度分析起来非常麻烦,今天我们尝试来借助递归树分析递归算法的时间复杂度。 1. 递归树与时间复杂度...

  • 时间复杂度和空间复杂度笔记

    复杂度分析笔记 复杂度主要分为时间和空间复杂度 时间复杂度:算法(程序)执行的时间变化趋势 空间复杂度:算法(程序...

  • 两数之和 - Rust

    采用 HashMap 记录减少时间复杂度: 复杂度分析空间复杂度: O(N):主要是记录 hash 值。时间复杂度...

  • 算法复杂度

    算法复杂度 算法复杂度的目的:分析代码执行的时间成本。我们从五个方面来介绍算法复杂度:时间复杂度、时间复杂度分类、...

  • 数据结构与算法 复杂度分析

    复杂度:时间复杂度和空间复杂度。复杂度的分析是学习数据结构与算法的基础! 极简概述 复杂度的分析已经有很多很好...

网友评论

      本文标题:复杂度分析(时间)

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