码农知识堂 - 1000bd
  •   Python
  •   PHP
  •   JS/TS
  •   JAVA
  •   C/C++
  •   C#
  •   GO
  •   Kotlin
  •   Swift
  • 算法时间复杂度详解


    文章目录

    • 1:master公式的用法
    • 2:实际例子
      • 2-1:用分治法解决一个规模为N的问题。若每步将问题分成规模均为N/3的8个子问题,且治而得到解的步骤耗时O(N^2logN),则整个算法的时间复杂度为
      • 2-2:用分治法解决一个规模为N的问题。下列哪种方法是最慢的?
      • 2-3:给定程序时间复杂度的递推公式:T(1)=1,T(N)=2T(N/2)+ N。则对该程序时间复杂度最接近的描述是:
      • 2-4:用分治法解决一个规模为N的问题时,若每步将问题划分为4个规模为N/2的子问题,并且用O(N^2logN)的时间执行治。则下列哪项最接近于整体时间复杂度?
      • 2-5:给定两个n × n的矩阵A和B。考虑下列计算矩阵乘积C= A·B的分治法。将每个矩阵划分为如下四个 n 2 × n 2 \frac{n}{2}×\frac{n}{2} 2n​×2n​的子矩阵:
      • 2-6:假如需要计算以下6个矩阵的依次连乘:

    1:master公式的用法




    T(N) = a * T(N / b) + f(N) (f(N) 为多项式 Nd …)


    (1)log(b, a) > d ==> 时间复杂度为O(Nlog(b,a))


    (2)log(b, a) = d ==> 时间复杂度为O(Nd * log(N))


    (3)log(b, a) < d ==> 时间复杂度为f(N)

    2:实际例子

    2-1:用分治法解决一个规模为N的问题。若每步将问题分成规模均为N/3的8个子问题,且治而得到解的步骤耗时O(N^2logN),则整个算法的时间复杂度为

    解析:T(N) = 8(N / 3) + (N2)
    可得:a = 8, b = 3, d = 2
    log(3, 8) < 2 ==> 时间复杂度为O(N2logN)

    A. O(N2logN)

    B. O(N2log2N)
    C.O(N3logN)
    D.O(Nlog8/log3)

    2-2:用分治法解决一个规模为N的问题。下列哪种方法是最慢的?

    A.每步将问题分成规模均为N/3的2个子问题,且治的步骤耗时O(N)
    解析:T(N) = 2(N / 3) + N
    可得:a = 2, b = 3, d = 1
    log(3, 2) < 1 ==> 时间复杂度为O(N)

    B.每步将问题分成规模均为N/3的2个子问题,且治的步骤耗时O(NlogN)
    解析:T(N) = 2(N / 3) + N
    可得:a = 2, b = 3, d = 1
    log(3, 2) < 1 ==> 时间复杂度为O(NlogN)

    C.每步将问题分成规模均为N/2的3个子问题,且治的步骤耗时O(N)
    解析:T(N) = 3(N / 2) + N
    可得:a = 3, b = 2, d = 1
    log(2, 3) > 1 ==> 时间复杂度为O(Nlog(2,3))

    D.每步将问题分成规模均为N/3的3个子问题,且治的步骤耗时O(NlogN)
    解析:T(N) = 3(N / 3) + N
    可得:a = 3, b = 3, d = 1
    log(3, 3) == 1 ==> 时间复杂度为O(NlogN)

    2-3:给定程序时间复杂度的递推公式:T(1)=1,T(N)=2T(N/2)+ N。则对该程序时间复杂度最接近的描述是:

    解析:T(N) = 2(N / 2) + N
    可得:a = 2, b = 2, d = 1
    log(2, 2) == 1 ==> 时间复杂度为O(NlogN)

    A. O(logN)
    B. O(N)
    C. O(NlogN)

    D. O(N2)

    2-4:用分治法解决一个规模为N的问题时,若每步将问题划分为4个规模为N/2的子问题,并且用O(N^2logN)的时间执行治。则下列哪项最接近于整体时间复杂度?

    解析:T(N) = 4(N / 2) + N2
    可得:a = 4, b = 2, d = 2
    log(2, 4) == 2 ==> 时间复杂度为O(N2) * logN * logN == O(N2 log2N)

    A. O(N2logN)
    B. O(N2)
    C. O(N3logN)
    D. O(N2log2N)

    2-5:给定两个n × n的矩阵A和B。考虑下列计算矩阵乘积C= A·B的分治法。将每个矩阵划分为如下四个 n 2 × n 2 \frac{n}{2}×\frac{n}{2} 2n​×2n​的子矩阵:

    在这里插入图片描述
    这里所有的矩阵乘法都是递归完成的。矩阵 C 的每一块都可以利用 P1,P2 ,⋯,P7通过加减运算得到。
    以下哪一项最接近实际的算法时间复杂度?
    解析:此问题可以看成7个(N / 2)的子问题
    即:a = 2, b = 7
    所以为:O ( n l o g 2 7 n^{log_{2}7} nlog2​7)

    A.O( n 2 l o g 2 n n^{2}log_{2}n n2log2​n)
    B. O(ne)
    C.O ( n l o g 2 7 n^{log_{2}7} nlog2​7)
    D. o( n 3 n^{3} n3)

    2-6:假如需要计算以下6个矩阵的依次连乘:

    在这里插入图片描述
    求解最优乘法次数的递推计算得到如下递推矩阵m[i][j]:
    在这里插入图片描述
    那么,A2到A5的子问题最少的乘法次数是多少次?
    解析:根据动态规划算法的性质,最次得到的结果都为当前最优解,所以直接查表即可

    A. 5000
    B.2500
    C.4375
    D.7125

    持续更新中…

  • 相关阅读:
    React框架创建项目详细流程-项目的基本配置-项目的代码规范
    【Leetcode刷题Python】416. 分割等和子集
    Shell脚本-case in语句
    邻接表的链表实现——链式前向星
    Avalonia学习1:下载通用皮肤SukiUI,并在windows上启动成功
    有意思的水平横向溢出滚动
    “零”成本即可搭建OA系统,终于知道低代码平台为什么那么火
    故障诊断实验台 | PT500mini轴承齿轮箱转子故障实验台
    Java设计模式之代理模式
    sklearn包中对于分类问题,如何计算accuracy和roc_auc_score?
  • 原文地址:https://blog.csdn.net/qq_52331221/article/details/128110757
  • 最新文章
  • 攻防演习之三天拿下官网站群
    数据安全治理学习——前期安全规划和安全管理体系建设
    企业安全 | 企业内一次钓鱼演练准备过程
    内网渗透测试 | Kerberos协议及其部分攻击手法
    0day的产生 | 不懂代码的"代码审计"
    安装scrcpy-client模块av模块异常,环境问题解决方案
    leetcode hot100【LeetCode 279. 完全平方数】java实现
    OpenWrt下安装Mosquitto
    AnatoMask论文汇总
    【AI日记】24.11.01 LangChain、openai api和github copilot
  • 热门文章
  • 十款代码表白小特效 一个比一个浪漫 赶紧收藏起来吧!!!
    奉劝各位学弟学妹们,该打造你的技术影响力了!
    五年了,我在 CSDN 的两个一百万。
    Java俄罗斯方块,老程序员花了一个周末,连接中学年代!
    面试官都震惊,你这网络基础可以啊!
    你真的会用百度吗?我不信 — 那些不为人知的搜索引擎语法
    心情不好的时候,用 Python 画棵樱花树送给自己吧
    通宵一晚做出来的一款类似CS的第一人称射击游戏Demo!原来做游戏也不是很难,连憨憨学妹都学会了!
    13 万字 C 语言从入门到精通保姆级教程2021 年版
    10行代码集2000张美女图,Python爬虫120例,再上征途
Copyright © 2022 侵权请联系2656653265@qq.com    京ICP备2022015340号-1
正则表达式工具 cron表达式工具 密码生成工具

京公网安备 11010502049817号