Big O表示法,算法的运行时间

时间:2014-01-21 16:55:21

标签: runtime big-o

我试图确定运行时间的界限, 我想我明白了,但可能是双重coutning。

y=0
for i = 1 to n do (1)
  for j= i to n do (2)
    if i == j then (3)
       k=n
       while k > 0 do (4)
         y = y + 1
         k = k/3

我想,

(1)循环n次 (2)循环n / 2次 (3)循环n次 (4)循环记录 3 n次

这将是n(n 2 log 3 n)/ 2。 这似乎太复杂了,

任何正确方向的观点都会受到赞赏。

1 个答案:

答案 0 :(得分:0)

要分析这一点,首先将循环相关测试拉出循环:

y = 0
for i = 1 to n do
  j = i
  (* i == j is true, no need for if test *)
    k = n
    while k > 0 do
      y = y + 1
      k = k/3
  for j = i+1 to n do
    (* i == j is false *)
    nothing

然后摆脱没有做任何事情的嵌套j循环,留下2个嵌套循环:

y = 0
for i = 1 to n do
  k = n
  while k > 0 do
    y = y + 1
    k = k/3

在计算big-O表示法时,忽略常数因子,因此日志上的不同基础是无关紧要的。因此,假设/截断整数除法,则得到 O n log n