我试图确定运行时间的界限, 我想我明白了,但可能是双重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。 这似乎太复杂了,
任何正确方向的观点都会受到赞赏。
答案 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 )