整个算法的时间复杂度是多少?

时间:2016-10-03 08:53:16

标签: algorithm math big-o asymptotic-complexity mod

我是渐近符号的新手,这是算法。对于时间复杂性最坏的情况是什么?为什么?

F(A,B) {  //A and B are positive
  while A>0 
    print(A mod B)
    A=A div B
}

2 个答案:

答案 0 :(得分:0)

时间的复杂性:

F(A,B) {  //A and B are positive
  while A>0 
    A=A/B
}

等于循环执行的次数,让我们调用l并且等于B必须将A除以多少次以使“A> 0”为假。

question开始,我们知道:

  

Knuth的书“计算机程序设计的艺术”(第2卷)4.3.1中的算法D在O(m)步骤中执行任何长除法,其中m是A的位数,所以我们有一个上限。

因此,时间复杂度为:* O(l * m)*

现在这个:

print(A mod B)

假设IO是常量(这当然在real-wolrd中是不正确的),你需要模数本身的复杂性,来自this,我们知道它是:

  

O(log A log B)

并将运行l次。

因此,我们有:

O(l *(m + log A log B))

答案 1 :(得分:0)

这不是一个很好的问题。首先,如果B是单位,算法永远不会完成。据推测B必须是2或更大。所以我们有O(log A)步骤。但现在的问题是该部门本身是否是一个“运作”。如果A和B是无界的,那么它本身也必须是对数的。但通常代码将在一个处理器上运行,该处理器实现32位或64位的所有分区,并且它不能将数字除以范围。所以我们通常说分歧是“操作”。

如果我们说除法是对数而B是小的那么我们就是O(log A)^ 2。