计算机科学gydF4y2Ba

复杂性/运行时分析gydF4y2Ba

大O符号gydF4y2Ba

一系列数字的前缀和gydF4y2Ba 一个gydF4y2Ba 0gydF4y2Ba ,gydF4y2Ba 一个gydF4y2Ba 1gydF4y2Ba ,gydF4y2Ba 一个gydF4y2Ba 2gydF4y2Ba ,gydF4y2Ba 一个gydF4y2Ba 3.gydF4y2Ba ...gydF4y2Ba a_0、a_1, a_3 \ ldotsgydF4y2Ba 是由第二个数字序列给出的吗gydF4y2Ba 年代gydF4y2Ba 0gydF4y2Ba ,gydF4y2Ba 年代gydF4y2Ba 1gydF4y2Ba ,gydF4y2Ba 年代gydF4y2Ba 2gydF4y2Ba ,gydF4y2Ba 年代gydF4y2Ba 3.gydF4y2Ba ...gydF4y2Ba s_0 s_1、s_2、s_3 \ ldotsgydF4y2Ba 定义为gydF4y2Ba

年代gydF4y2Ba jgydF4y2Ba =gydF4y2Ba ∑gydF4y2Ba 我gydF4y2Ba =gydF4y2Ba 1gydF4y2Ba jgydF4y2Ba 一个gydF4y2Ba 我gydF4y2Ba s_j = \ sum_ {i = 1} ^ {j} aigydF4y2Ba

下面的Python代码计算前缀和。gydF4y2Ba

1 2 3 4 5 6 7 8 9gydF4y2Ba
defgydF4y2Ba年代gydF4y2Ba(gydF4y2Ba一个gydF4y2Ba,gydF4y2BajgydF4y2Ba):gydF4y2Baprefix_sumgydF4y2Ba=gydF4y2Ba0gydF4y2Ba而gydF4y2BajgydF4y2Ba>=gydF4y2Ba0gydF4y2Ba:gydF4y2Ba我gydF4y2Ba=gydF4y2Ba0gydF4y2Ba而gydF4y2Ba我gydF4y2Ba<=gydF4y2BajgydF4y2Ba:gydF4y2Baprefix_sumgydF4y2Ba+ =gydF4y2Ba一个gydF4y2Ba[gydF4y2Ba我gydF4y2Ba]gydF4y2Ba我gydF4y2Ba+ =gydF4y2Ba1gydF4y2BajgydF4y2Ba- =gydF4y2Ba1gydF4y2Ba返回gydF4y2Baprefix_sumgydF4y2Ba

分析代码并找出将被执行次数最多的行或行。gydF4y2Ba

选择一个或多个gydF4y2Ba

下面的Java代码片段描述了一个递归方法gydF4y2Ba PgydF4y2Ba PgydF4y2Ba 它需要两个整数参数gydF4y2Ba xgydF4y2Ba xgydF4y2Ba 和gydF4y2Ba ngydF4y2Ba ngydF4y2Ba 并返回一个整数。gydF4y2Ba

12 3 4 5 6 7 8 9 10 11 12 13gydF4y2Ba
公共gydF4y2BaintgydF4y2BaPgydF4y2Ba(gydF4y2BaintgydF4y2BaxgydF4y2Ba,gydF4y2BaintgydF4y2BangydF4y2Ba) {gydF4y2Ba如果gydF4y2Ba(gydF4y2BangydF4y2Ba==gydF4y2Ba0gydF4y2Ba) {gydF4y2Ba返回gydF4y2Ba1gydF4y2Ba;gydF4y2Ba}gydF4y2Ba如果gydF4y2Ba(gydF4y2BangydF4y2Ba%gydF4y2Ba2gydF4y2Ba==gydF4y2Ba1gydF4y2Ba) {gydF4y2BaintgydF4y2BaygydF4y2Ba=gydF4y2BaPgydF4y2Ba(gydF4y2BaxgydF4y2Ba,gydF4y2Ba(gydF4y2BangydF4y2Ba-gydF4y2Ba1gydF4y2Ba)gydF4y2Ba/gydF4y2Ba2gydF4y2Ba);gydF4y2Ba返回gydF4y2BaxgydF4y2Ba*gydF4y2BaygydF4y2Ba*gydF4y2BaygydF4y2Ba;gydF4y2Ba}gydF4y2Ba其他的gydF4y2Ba{gydF4y2BaintgydF4y2BaygydF4y2Ba=gydF4y2BaPgydF4y2Ba(gydF4y2BaxgydF4y2Ba,gydF4y2BangydF4y2Ba/gydF4y2Ba2gydF4y2Ba);gydF4y2Ba返回gydF4y2BaygydF4y2Ba*gydF4y2BaygydF4y2Ba;gydF4y2Ba}gydF4y2Ba}gydF4y2Ba

分析表明,该函数的运行时间很大gydF4y2Ba ngydF4y2Ba ngydF4y2Ba 可以表示为gydF4y2Ba TgydF4y2Ba (gydF4y2Ba ngydF4y2Ba )gydF4y2Ba =gydF4y2Ba OgydF4y2Ba (gydF4y2Ba ggydF4y2Ba (gydF4y2Ba ngydF4y2Ba )gydF4y2Ba )gydF4y2Ba T (n) = O (g (n))gydF4y2Ba 对于一些功能gydF4y2Ba ggydF4y2Ba (gydF4y2Ba ngydF4y2Ba )gydF4y2Ba g (n)gydF4y2Ba .什么是有效的函数gydF4y2Ba ggydF4y2Ba (gydF4y2Ba ngydF4y2Ba )gydF4y2Ba g (n)gydF4y2Ba ?gydF4y2Ba

细节和假设gydF4y2Ba

  • ggydF4y2Ba (gydF4y2Ba ngydF4y2Ba )gydF4y2Ba g (n)gydF4y2Ba 精确地描述了的渐近运行时gydF4y2Ba PgydF4y2Ba (gydF4y2Ba xgydF4y2Ba ,gydF4y2Ba ygydF4y2Ba )gydF4y2Ba P (x, y)gydF4y2Ba .gydF4y2Ba
  • 无视限制gydF4y2BaintgydF4y2Ba基元类型,并假定方法的行为对于大的输入不受影响。gydF4y2Ba
1 2 3 4 5 6 7 8 9 10 11gydF4y2Ba
intgydF4y2Ba函数gydF4y2Ba(gydF4y2BaintgydF4y2BangydF4y2Ba)gydF4y2Ba{gydF4y2BaintgydF4y2Ba我gydF4y2Ba;gydF4y2Ba如果gydF4y2Ba(gydF4y2BangydF4y2Ba<=gydF4y2Ba0gydF4y2Ba)gydF4y2Ba{gydF4y2Ba返回gydF4y2Ba0gydF4y2Ba;gydF4y2Ba}gydF4y2Ba其他的gydF4y2Ba{gydF4y2Ba我gydF4y2Ba=gydF4y2Ba随机gydF4y2Ba(gydF4y2BangydF4y2Ba-gydF4y2Ba1gydF4y2Ba);gydF4y2Ba返回gydF4y2Ba函数gydF4y2Ba(gydF4y2Ba我gydF4y2Ba)gydF4y2Ba+gydF4y2Ba函数gydF4y2Ba(gydF4y2BangydF4y2Ba-gydF4y2Ba1gydF4y2Ba-gydF4y2Ba我gydF4y2Ba);gydF4y2Ba}gydF4y2Ba}gydF4y2Ba

考虑上面的递归算法,其中gydF4y2Ba随机(int n)gydF4y2Ba花费一个单位时间返回在范围内均匀分布的随机整数gydF4y2Ba [gydF4y2Ba 0gydF4y2Ba ,gydF4y2Ba ngydF4y2Ba ]gydF4y2Ba [0, n]gydF4y2Ba .如果平均处理时间为gydF4y2Ba TgydF4y2Ba (gydF4y2Ba ngydF4y2Ba )gydF4y2Ba T (n)gydF4y2Ba ,什么是价值gydF4y2Ba TgydF4y2Ba (gydF4y2Ba 6gydF4y2Ba )gydF4y2Ba T (6)gydF4y2Ba ?gydF4y2Ba

假设除gydF4y2Ba随机gydF4y2Ba花费的时间可以忽略不计。gydF4y2Ba

下面的简单递归python程序可用于计算gydF4y2Ba ngydF4y2Ba tgydF4y2Ba hgydF4y2Ba n ^ {th}gydF4y2Ba Fibonnaci号码。gydF4y2Ba

1 2 3 4 5 5gydF4y2Ba
defgydF4y2Ba斐波那契gydF4y2Ba(gydF4y2BangydF4y2Ba):gydF4y2Ba如果gydF4y2BangydF4y2Ba在gydF4y2Ba[gydF4y2Ba0gydF4y2Ba,gydF4y2Ba1gydF4y2Ba]:gydF4y2Ba返回gydF4y2BangydF4y2Ba其他的gydF4y2Ba:gydF4y2Ba返回gydF4y2Ba斐波那契gydF4y2Ba(gydF4y2BangydF4y2Ba-gydF4y2Ba1gydF4y2Ba)gydF4y2Ba+gydF4y2Ba斐波那契gydF4y2Ba(gydF4y2BangydF4y2Ba-gydF4y2Ba2gydF4y2Ba)gydF4y2Ba

可以证明,该程序的紧界是由gydF4y2Ba TgydF4y2Ba (gydF4y2Ba ngydF4y2Ba )gydF4y2Ba =gydF4y2Ba ΘgydF4y2Ba (gydF4y2Ba ggydF4y2Ba (gydF4y2Ba ngydF4y2Ba )gydF4y2Ba )gydF4y2Ba T (n) = \θ(g (n))gydF4y2Ba 对于一些功能gydF4y2Ba ggydF4y2Ba (gydF4y2Ba ngydF4y2Ba )gydF4y2Ba g (n)gydF4y2Ba .什么是函数族gydF4y2Ba ggydF4y2Ba (gydF4y2Ba ngydF4y2Ba )gydF4y2Ba g (n)gydF4y2Ba 在吗?gydF4y2Ba

细节和假设gydF4y2Ba

一个明显的求幂算法(gydF4y2Ba xgydF4y2Ba ngydF4y2Ba x ^ {n}gydF4y2Ba )gydF4y2Ba ngydF4y2Ba −gydF4y2Ba 1gydF4y2Ba n - 1gydF4y2Ba 乘法。假设我们提出了一种更快的算法gydF4y2Ba ngydF4y2Ba =gydF4y2Ba 2gydF4y2Ba 米gydF4y2Ba n = 2 ^ {m}gydF4y2Ba .该算法的“Big-O”复杂度可以表示为:gydF4y2Ba

TgydF4y2Ba (gydF4y2Ba ngydF4y2Ba )gydF4y2Ba =gydF4y2Ba OgydF4y2Ba (gydF4y2Ba ggydF4y2Ba (gydF4y2Ba ngydF4y2Ba )gydF4y2Ba )gydF4y2Ba T (n) = O (g (n))gydF4y2Ba

取…的值gydF4y2Ba ggydF4y2Ba (gydF4y2Ba ngydF4y2Ba )gydF4y2Ba g (n)gydF4y2Ba 对于一个任意gydF4y2Ba ngydF4y2Ba ngydF4y2Ba .如果我们乘gydF4y2Ba ngydF4y2Ba ngydF4y2Ba 由一个常数gydF4y2Ba kgydF4y2Ba kgydF4y2Ba ,价值将如何gydF4y2Ba ggydF4y2Ba (gydF4y2Ba ngydF4y2Ba )gydF4y2Ba g (n)gydF4y2Ba 最有可能改变吗?gydF4y2Ba

×gydF4y2Ba

问题加载…gydF4y2Ba

注意加载…gydF4y2Ba

设置加载…gydF4y2Ba