美文网首页
1.2 算法分析

1.2 算法分析

作者: 月影追猎者 | 来源:发表于2020-06-11 10:53 被阅读0次

级数

  • 算数级数,与末项平方同阶
    T(n) = 1+2+...+n = n(n+1)/2 = O(n2)
  • 幂方级数,比幂次高一阶
    T2(n) = 12+22+...+n2 = n(n+1)(2n+1)/6 = O(n3)
    T3(n) = 13+23+...+n3 = n2(n+1)2/4 = O(n4)
    T4(n) = 14+24+...+n4 = n(n+1)(2n+1)(3n2+3n-1)/30 = O(n5)
    幂方级数
  • 几何级数,与末项同阶
    Ta(n) = a0+a1+...+an = (an+1-1)/(a-1) = O(an)
    1+2+4+...+2n = 2n+1-1 = O(2n+1) = O(2n)
  • 收敛级数
    1/(1×2)+1/(2×3)+1/(3×4)+...+1/((n-1)×n) = 1-1/n = O(1)
  • 几何分布
    (1-p)(1+2p+3p2+...+npn-1+...) = 1/(1-p) = O(1), 0 < p < 1
  • 调和级数
    1+1/2+1/3+...+1/n = Θ(logn)
  • 对数级数
    log1+log2+log3+...+logn = log(n!) = Θ(nlogn)

循环与级数

for (int i = 0; i < n; i++)
    for (int j = 0; j < n; j++)
        O(1) Operation(i, j)

{\textstyle \sum_{i=0}^{n-1}} n = n + n + ... + n = n^{2} = O\left ( n^{2} \right )

for (int i = 0; i < n; i++)
    for (int j = 0; j < i; j++)
        O(1) Operation(i, j)

{\textstyle \sum_{i=0}^{n-1}} i = 0 + 1 + 2 + ... + \left ( n - 1 \right ) = \frac{n\left ( n - 1 \right ) }{2} = O\left ( n^{2} \right )

for (int i = 1; i < n; i <<= 1)
    for (int j = 0; j < i; j++)
        O(1) Operation(i, j)

1 + 2 + 4 + ... + 2^{\log_{2}{(n-1)} } = {\textstyle \sum_{k=0}^{\left \lfloor \log_{2}{\left ( n - 1 \right ) } \right \rfloor }} 2^{k} = 2^{\left \lceil \log_{2}{n} \right \rceil } - 1 = O\left ( n \right )

for (int i = 0; i <= n; i++)
    for (int j = 1; j < i; j += j)
        O(1) Operation(i, j)

{\textstyle \sum_{k=0}^{n}} \left \lceil \log_{2}{i} \right \rceil = O\left ( nlogn \right )

取非极端元素
问题:给定整数子集S,|S| ≥ 3,取元素a ∈ S,要求a ≠ max(S) 且 a ≠ min(S)
算法:从S中任意取3个元素,因S为集合,元素互异,确定并排除最大值与最小值,余下元素即为结果。T(n) = O(1)

冒泡排序
问题:给定n个整数,按(非降)序排列
观察:有序序列中,任意相邻元素顺序;无序序列中,总有相邻元素逆序。
扫描交换:依次比较每对相邻元素,若逆序,则交换;若整个扫描过程中未发生交换,则排序完成,否则重复该过程。

void bubbleSort(int arr[], int n) {
    for (bool sorted = false; sorted = !sorted; n--) {
        for (int i = 1; i < n; i++) {
            if (arr[i - 1] > arr[i]) {
                swap(arr[i - 1], arr[i]);
                sorted = false;
            }
        }
    }
}

不变性:经k次扫描交换后,最大的k个元素必然就位
单调性:经k次扫描交换后,问题规模缩减至n - k
正确性:经至多n次扫描后,算法必然终止,且可获得正确结果
T(n) = O(n2)

相关文章

  • 1.2 算法分析

    级数 算数级数,与末项平方同阶T(n) = 1+2+...+n = n(n+1)/2 = O(n2) 幂方级数,比...

  • 第一章绪论

    1.1数据结构 1.2基本概念和术语 1.3抽象数据类型 1.4算法和算法分析 给出问题--->画出逻辑结构---...

  • Java虚拟机之垃圾回收算法

    1. 垃圾回收器如何确定对象死亡1.1 引用计数法1.2 可达性分析法 2. 垃圾回收算法2.1 标记-清除算法(...

  • 算法1.2

    数据类型:一组值和一组对其操作的集合抽象数据类型ADT:一种将数据与函数的实现相关联,隐藏了数据表示的数据类型,支...

  • 第一章 算法基础——算法性能分析

    1.2 算法性能分析 算法复杂度是算法性能最基本的评价标准,由时间复杂度和空间复杂度组成,属于计算复杂性理论中的内...

  • 带相似度的 RSVD 算法

    目录:1.1 理论分析1.2 代码解析1.3 最终结果1.4 后续工作 1. 带相似度的RSVD算法 1.1 理论...

  • 垃圾回收

    一、判断对象是否可被回收 1.1 引用计数法 缺点:无法解决对象之间循环依赖的问题 1.2 可达性分析算法 当一个...

  • JVM知识点汇总

    1.垃圾回收机制1.1 标记 - 清除算法1.2 标记 - 整理算法1.3 复制算法1.4 分代收集算法zxc2....

  • ThreadLocal、ITL、TTL原理详解及实践

    1.ThreadLocal 介绍[#1]   1.1基本使用[#1.1]   1.2原理分析[#1.2]  ...

  • 数字签名和数字证书等openssl加密基本术语

    openssl 算法基础 1.1 对称算法 : 密钥相同,加密解密使用同一密钥 1.2 摘要算法:无论用户输入的数...

网友评论

      本文标题:1.2 算法分析

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