首页 > 其他分享 >01-复杂度(complexity)

01-复杂度(complexity)

时间:2022-12-31 19:33:13浏览次数:34  
标签:01 int 复杂度 System ++ complexity 3n out

什么是算法?

算法是用于解决特定问题的一系列的执行步骤

如何判断一个算法的好坏?

正确性、可读性、健壮性(对不合理输入的反应能力和处理能力)

时间复杂度(time complexity):估算程序指令的执行次数(执行时间)

空间复杂度(space complexity):估算所需占用的存储空间

大 O 表示法(Big O)

O(1) < O(logn) < O(n) < O(nlogn) < O(n^2) < O(n^3) < O(2^n) < O(n!) < O(n^n)

O(1)

public void o1(int n) {
    // 时间复杂度
    // 执行次数 = 1 + 6 + 6 + 6 = 1 + 18 = 19
    // 大 O 表示法:O(1)
    for (int i = 0; i < 6; i++) {
        System.out.println("i = " + i);
    }
    // 空间复杂度:O(1)
}

O(logn)

public void log2n(int n) {
    // 8 = 2^3      3 = log2(8)
    // 16 = 2^4     4 = log2(16)
    // 执行次数 = log2(n)
    // 大 O 表示法:O(logn)
    while ((n = n / 2) > 0) {
        System.out.println("n = " + n);
    }
}

O(n)

public void n(int n) {
    // 执行次数 = 1 + n + n + n = 1 + 3n = 3n + 1
    // 大 O 表示法:O(n)
    for (int i = 0; i < n; i++) {
        System.out.println("i = " + i);
    }
    // 空间复杂度:O(1)
}

O(n + k)

多个数据规模的情况

// O(n + k)
public void nk(int n, int k) {
    for (int i = 0; i < n; i++) {
        System.out.println("i = " + i);
    }
    for (int i = 0; i < k; i++) {
        System.out.println("i = " + i);
    }
}

O(nlogn)

public void nlog2n(int n) {
    // 外层 for 循环执行次数 = 1 + 2log2(n) + log2(n) * (内层 for 循环执行次数)
    //  = 1 + 2log2(n) + log2(n) * (3n + 1) = 3nlog2(n) + 3log2(n) + 1

    // 大 O 表示法:O(nlogn)

    // i += i 等价于 i = i + i 等价于 i = i * 2
    for (int i = 1; i < n; i += i) {
        // 内层 for 循环执行次数 = 1 + n + n + n = 3n + 1
        for (int j = 0; j < n; j++) {
            System.out.println("j = " + j);
        }
    }
    // 空间复杂度:O(1)
}

O(n^2)

public void n2(int n) {
    // 外层 for 循环执行次数 = 1 + n + n + n * (内层 for 循环的执行次数)
    //  = 1 + 2n + n * (3n + 1) = 3n^2 + 3n + 1

    // 大 O 表示法:O(n^2)
    for (int i = 0; i < n; i++) {
        // 内层 for 循环执行次数 = 1 + n + n + n = 3n + 1
        for (int j = 0; j < n; j++) {
            System.out.println("j = " + j);
        }
    }
    // 空间复杂度:O(1)
}

数据规模较小时

image-20221231182852406.

数据规模较大时

image-20221231183647985.

标签:01,int,复杂度,System,++,complexity,3n,out
From: https://www.cnblogs.com/rnny/p/17017143.html

相关文章

  • PX01如何实现烧录函数调用--不进行Flicker调整,如烧全代码、烧固定vcom等
    在实际应用中我们经常会碰到烧某些寄存器值为固定值,此时我们并不想进行Flicker调整,按烧录键直接运行烧录函数并实现预期烧录动作,可以的,请参考如下说明。首先,勾选“烧录使......
  • BUUCTF-[GXYCTF2019]Ping Ping Ping
    一道命令执行题目  一、基础知识 Linuxshell特殊字符(参考链接)【;】作为多个命令语句的分隔符(Commandseparator[semicolon])。要在一个语句里面执行多个命令......
  • Alluer01-介绍
    什么是allureallure是一款轻量级并且非常灵活的开源测试报告框架支持绝大多数测试框架,例如TestNG、Pytest、JUint等简单易用,易于集成在python中使用allure,需要安装al......
  • 01Python的标准数据类型
    #Number数字'''intlong(python2.0)floatcomplex'''#String字符串s='abcde'print(s[1:5])#List列表sList=['a','1',1,'bd','这']sList2=['A','c']sLis......
  • P1801 黑匣子
    \(P1801\)黑匣子虽说是堆题,但也可以用主席树不是?对于每个要\(get\)的地方,相当于询问区间为\([1,x]\),其实就是模板题啦#include<algorithm>#include<cstdio>#includ......
  • P4247 [清华集训2012]序列操作 题解
    线段树练手好题。直接上线段树五问:维护的信息是什么?由于\(c\le20\),我们不妨对线段树的每个节点维护一个\(f_k\)表示在对应区间里选择\(k\)个数相乘的所有方案的和......
  • P3567 [POI2014]KUR-Couriers
    \(P3567\)[\(POI2014\)]\(KUR-Couriers\)一、题目大意给一个长度为\(n\)的正整数序列\(a\)。共有\(m\)组询问,每次询问一个区间\([l,r]\),是否存在一个数在\([l,r......
  • Mohamed Elfeki-2019-GDPP Learning Diverse Generations Using Determinantal Point
    GDPP:LearningDiverseGenerationsUsingDeterminantalPointProcess#paper1.paper-info1.1MetadataAuthor::[[MohamedElfeki]],[[CamilleCouprie]],[[M......
  • lctf2016_pwn200 堆利用
    lctf2016:pwn200堆利用一、信息收集RELRO:在Linux系统安全领域数据可以写的存储区就会是攻击的目标,尤其是存储函数指针的区域。所以在安全防护的角度来说尽量减少可写......
  • ASIS_CTF_2016_b00ks
    ASIS_CTF_2016_b00ks一、信息收集RELRO:在Linux系统安全领域数据可以写的存储区就会是攻击的目标,尤其是存储函数指针的区域。所以在安全防护的角度来说尽量减少可写的......