算法步数分析 - 家庭作业

时间:2012-11-18 08:57:36

标签: algorithm

对此步数问题有疑问。我认为我有基本的想法,但努力将数学直接写在纸上。首先是伪代码:

for i = 1 to n
    x = x + 1
    j = n
    while (j>1)
        j = j/2

和我的解释:

n / 2 + 1

N / 2

N / 2

n / 2< - 第4行(while循环)的总和的顶部

Σlogn+ 2

i = 1< - 第4行的总和的底部(while循环)

n / 2< - 第5行的总和的顶部(while循环的主体)

Σlogn+ 1

i = 1< - 第5行的总和的底部(while循环的主体)


所以步数中的前三行也不错,但是循环中的两个求和对我来说有点棘手。因此,对于第一个登录+ 2,我可以分为两个步骤:

N / 2

Σ2

I = 1

N / 2

Σlogn

I = 1

所以我习惯于处理n的直接求和,而不是n / 2。但是我会给它一个快速的镜头。

2 *((n ^ 2 + n)/ 2)或者更确切地说只是丢弃这一部分,所以它是直的:n ^ 2 + n。

然后登录:

logn *((n ^ 2 + n)/ 2)=?现在我不太确定。不确定这甚至简化了。如果有人对此有任何建议我会很感激,但我想我得到的是这一半。因此,我将两者结合起来得到伪代码的第一个求和行4的最终答案:

logn *(n ^ 2 + n)/ 2 + n ^ 2 + n

对于第二次总结,我认为那将是:

logn * n ^ 2 + n

(可以从我上面已经完成的内容中借一点。刚刚放下我有2 *(n ^ 2 + n)/ 2的部分而不是我只需要两组半合并来制作一个n ^ 2 + n,如果这有任何意义我认为?

如果我完全失去了它,请告诉我。谢谢!!

1 个答案:

答案 0 :(得分:0)

我认为你的分析有点过时了。首先,请注意for循环体内发生的事情与ix的值无关。因此for循环执行n次,并且每次在for循环体中执行相同数量的步骤。 while循环的主体执行floor(log 2 (n))次。这就是所有需要的分析。结果是n * floor(log 2 (n))。 (如果通过“步骤”表示语句执行,则需要对其进行一些修改以考虑每个循环体中的语句数。)