算法复杂度详解(O(1),O(n),O(logn)等)

算法复杂度详解(O(1),O(n),O(logn)等)观前提示:本文所使用的IDEA版本为ultimate 2019.1,JDK版本为1.8.0_141。
摘要由CSDN通过智能技术生成

相关文章链接:

相关文章链接 第2节 数据结构

1.算法分析

算法分析分三个种类:

  1. 最坏情况(Worst Case):任意输入规模的最大运行时间。(Usually)

  2. 平均情况(Average Case):任意输入规模的期待运行时间。(Sometimes)

  3. 最佳情况(Best Case):通常最佳情况不会出现。(Bogus)

实际中,我们会按照最坏情况考量算法,也就是算法运行最长时间。一个算法的最坏情况运行时间是在任何输入下运行时间的一个上界(Upper Bound)。

2.算法复杂度

算法复杂度分为时间复杂度和空间复杂度

  1. 时间复杂度是度量完成一个算法所需要的时间。

  2. 空间复杂度是度量完成一个算法所需要占用的存储空间。

    时间和空间都是计算机资源的重要体现,而算法的复杂性就是体现在运行该算法时的计算机所需的资源多少。

2.1 O(1)、O(n)、O(logn)、O(nlogn)等

首先,我们了解一下渐近记号(Asymptotic Notation)通常有 O、 Θ 和 Ω 记号法。

  1. Θ 记号渐进地给出了一个函数的上界和下界

  2. 当只有渐近上界时使用 O 记号

  3. 当只有渐近下界时使用 Ω 记号。

复杂度 标记符号
常量 O(1)
对数 O(logn)
线性 O(n)
平方 O(n2)
立方 O(n3)
指数 O(2n)、O(nn)、O(n!)

借助百度上的一张图来表示算法的时间复杂度的增长与处理数据多少的增长的关系。

在这里插入图片描述
时间复杂度的优劣

O(1)<O(logn)<O(n)<O(nlogn)<O(n2)<O(n3)<O(2n)<O(n!)<O(nn)

常见的数量级大小:越小表示算法的执行时间频度越短,则越优。

2.2 例子

2.2.1 常量复杂度 O(1)

无论输入数据增大多少倍,耗时/耗空间都不变。

哈希算法就是典型的O(1)时间复杂度。

index = a;

a = b;

b = index;

2.2.2 线性复杂度 O(n)

数据量增大几倍,耗时也增大几倍。

package testAlgorithmicComplexity;

/**
 * 线性复杂度
 */
public class TestLinear {
   
    public static void main(String[] args) {
   
        int n = 10;
        int target = n;
        for (int i = 1; i < n+1
  • 3
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值