hy电玩城app官网下载(中国)集团官方网

集团官网
  • 华为授权培训中心
  • 腾讯云一级认证培训中心
  • 百度营销大学豫陕深授权运营中心
  • Oracle甲骨文OAEP中心
  • Microsoft Azure微软云合作伙伴
  • Unity公司战略合作伙伴
  • 普华基础软件战略合作伙伴
  • 新开普(股票代码300248)旗下丹诚开普投资
  • 中国互联网百强企业锐之旗旗下锐旗资本投资

怎样进行算法的复杂度分析?

编辑:云和数据 日期:2023-03-09 18:23

复杂度分析是估算算法执行效率的方法,公式O(f(n))表示算法的复杂度,此方法即为大O复杂度表示法O(f(n))中n表示数据规模,f(n)表示运行算法所需要执行的指令数。

大O复杂度表示法

下面的代码非常简单,求 1,2,3…n 的累加和,hy电玩城app官网下载要做的是估算它的执行效率。

def calc(n):    sum_ = 0    for i in range(1,n+1):        sum_ = sum_ + i    return sum_

假设每行代码执行的时间都一样为t,执行第2行代码需要时间t,第3,4行代码运行了n遍,需要的时间为2n*t,这段代码总执行时间为(2n+1)* t

结论:代码执行的总时间T(n)与每行代码的执行次数成正比

看下面的代码,估算该段代码的执行时间:

def calc(n):    sum_ = 0    for i in range(n):        for j in range(n):            sum_ = sum_ + i*j    return sum_

同样假设每行代码执行的时间都一样为t:执行第2行代码需要时间t,第3行代码运行了n遍,需要时间为n*t,第4、5行代码运行了n2次,需要时间为2n2 * t,执行所有代码的总时间为 (2n2 + n + 1)* t。

结论:代码执行的总时间T(n)与每行代码的执行次数成正比。

用O(f(n))来表示算法复杂度:

def calc(n):    sum_ = 0    for i in range(1,n+1):        sum_ = sum_ + i    return sum_
def calc(n):    sum_ = 0    for i in range(n):        for j in range(n):            sum_ = sum_ + i*j    return sum_

T(n) = O(f(n)) , O表示代码的执行时间T(n) 与 f(n)表达式成比例。

大O复杂度表示法:上面例子中的T(n) = O(2n+1), 另一个 T(n) = O(2n² + n + 1)。大O时间复杂度并不表示代码真正的执行时间,而是表示代码执行时间随数据规模增长的变化趋势,也叫作渐进时间复杂度(asymptotic time complexity),简称时间复杂度。

当数据量特别大, 也就是n的取值很大的时候,大O表示法中低阶、常量、系数三部分并不会左右增长趋势,可以忽略。

def calc(n):    sum_ = 0    for i in range(1,n+1):        sum_ = sum_ + i    return sum_
def calc(n):    sum_ = 0    for i in range(n):        for j in range(n):            sum_ = sum_ + i*j    return sum_

上面例子中的T(n) = O(2n+1), 另一个 T(n) = O(2n² + n + 1),用大O表示法表示上面两段代码的时间复杂度,可以记为O(n),O(n²)。

算法A: O(n) 执行指令,10000*n

def calc(n):    sum_ = 0    for i in range(1,n+1):        sum_ = sum_ + I  """  此处省略n行... ...  """    return sum_

算法B: O(n²) 执行指令数,10*n2

对比上面两个算法,当 n = 10, n=100 时, 算法B执行的速度更快,n = 1000 时两者速度相当

n = 104 , n = 105, n = 106 ,算法A执行的速度更快的

随着数据规模的进一步增大, 这个差距会越来越大

时间复杂度分析

如何分析一段代码的时间复杂度?

在分析一个算法、一段代码的时间复杂度时,只关注循环执行次数最多的那一段代码就可以了。

def calc(n):    sum_ = 0    for i in range(n):        for j in range(n):            sum_ = sum_ + i*j    return sum_

上面的代码中,hy电玩城app官网下载只需要关注内层for循环的时间复杂度就可以了,内层for循环的两行代码被执行了n2次,所以总的时间复杂度就是O(n²)

总复杂度等于量级最大的那段代码的复杂度

def calc(n):sum_ = 0    for i in range(1,n+1):        sum_ = sum_ + i    sum_1 = 0    for i in range(1,n+1):        for j in range(n):            sum_1 = sum_1 + i*j    return sum_+sum_1

上面的代码分为两部分,分别是求 sum_、sum_1,计算sum_部分的代码段时间复杂度O(n),计算sum_1部分的代码段时间复杂度为O(n²) ,总的时间复杂度由复杂度最大的部分决定, 所以上面代码复杂度为O(n²)。

嵌套代码的复杂度等于嵌套内外代码复杂度的乘积

def fn(n):    sum_ = 0    for i in range(n+1):        sum_ = sum_ + i    return sum_def calc(n):    sum_ = 0    for i in range(n+1):        sum_ = sum_ + fn(i)    return sum_

上面的代码中第二个函数调用了第一个函数, 如果把fn函数调用当作一个普通操作, 那么第二个函数的时间复杂度为O(n) Fn函数的时间复杂度为O(n),那么函数整体的时间复杂度为O(n*n) = O(n²)。

当两段代码的数据规模不同时,不能省略复杂度低的部分

def calc(n):sum_ = 0    for i in range(1,n+1):        sum_ = sum_ + i    sum_1 = 0    for i in range(1,m+1):        for j in range(m):            sum_1 = sum_1 + i*j    return sum_+sum_1

上面的代码分为两部分,分别是求 sum_、sum_1,计算sum_部分的代码段时间复杂度O(n),计算sum_1部分的代码段时间复杂度为O(m2) ,总的时间复杂度由复杂度最大的部分决定, 所以上面代码复杂度为O(m²+n)

相关内容

郑州it机构哪家正规? 随着互联网的快速发展,IT 行业已经成为当今最具前景和竞争力的行业之一。想要在 IT 行业学习并取得成功,选择一家正规的靠谱的 IT 机构至关重要。当然在市场上,有许多不同的 IT 培训机构,它们提供的课程、技术和项目各不相同。那么,郑州it机构哪家正规?以下几点必然重要:品牌实力很重要,这是... 使用Spring通过什么方式访问Hibernate? Spring和Hibernate是两个常用的Java框架,它们通常一起使用来构建Java应用程序。Spring提供了一个轻量级的容器和一系列模块,用于处理依赖注入、事务管理、AOP等功能。而Hibernate是一个ORM(对象关系映射)框架,用于将Java对象映射到关系型数据库中。通过Spri... 一个Spring Bean定义包含什么? Spring中的Bean定义是描述Spring容器如何创建和配置一个特定Bean的元数据。Bean定义包含以下信息:1.Bean的类名(Class):这是指定Bean类型的Java类的全限定名,Spring容器将使用这个类来创建Bean的实例。2.Bean的作用域(Scope):作用域定义了B... 去云和数据参加IT培训会是一条好的出路吗? 很多人都说做IT的是吃青春饭、职业生涯短,其实这是一个误解。IT是通用性人才,其不受行业发展的限制,而且也不受年龄和体力的影响,和医生、律师一样,年纪越大,经验越丰富,也就越值钱。有些人,想学习IT,但是自学又走不通,又觉得培训班出来的人,不能高薪毕业,但是在云和数据培训后的学员,不少都能高薪... 在云和数据培训前端开发要学多久呢?学习费用大概多少? 现在web前端开发技术在市场发展过程中的需求量在不断地增加,有越来越多的小伙伴想要通过学习web前端开发技术知识来入行IT行业。对于零基础小伙伴学习前端开发技术知识而言,自学所需要的时间比较长,而且学习不到系统的开发技术知识,在前端培训机构学习开发技术知识,所需要的学习周期较短,能够实现让小伙... 在云和数据学IT为什么工资高?揭秘高薪背后的原因 在这个科技飞速发展的时代,IT 行业已经成为了高薪的代名词。你是否曾好奇,为什么学习 IT 相关专业的人能够轻松拿到高薪工作?今天,hy电玩城app官网下载就来揭秘一下学 IT 高薪背后的原因。1、IT 行业市场需求大,人才稀缺随着我国经济的转型升级,越来越多的企业开始重视科技创新。而在这个过程中,IT 行业无疑...
×
西和县汽摩配件有限公司大箐山县园林绿化有限公司大姚县制作有限公司 天峻县算机软硬件开发销售有限公司 周宁县有限公司 秀洲区钢丝绳有限公司城固县有限公司高明区耗材有限公司广灵县纸盒纸箱包装有限公司永德县电镀设备有限公司