📜  门| GATE-CS-2014-(Set-1)|第51章

📅  最后修改于: 2021-06-29 02:55:10             🧑  作者: Mango

考虑下面的伪代码。要执行的乘法运算总数是多少?

D = 2
for i = 1 to n do
   for j = i to n do
      for k = j + 1 to n do
           D = D * 3

(A) 3个连续整数的乘积的一半。
(B) 3个连续整数的乘积的三分之一。
(C) 3个连续整数乘积的六分之一。
(D)以上都不是。答案: (C)
说明:语句“ D = D * 3”被执行n *(n + 1)*(n-1)/ 6次。让我们看看如何。
对于i = 1,乘法语句执行(n-1)+(n-2)+ .. 2 + 1次。
对于i = 2,语句执行(n-2)+(n-3)+ .. 2 + 1次
…………………………..
…………………………。
对于i = n-1,该语句执行一次。
对于i = n,该语句根本不执行

因此,总体而言,该语句在以下时间执行
[(n-1)+(n-2)+ .. 2 +1] + [(n-2)+(n-3)+ .. 2 +1] +…+ 1 + 0

以上系列可以写成
S = [n *(n-1)/ 2 +(n-1)*(n-2)/ 2 +….. + 1]

可以通过从标准系列S1 = n2 +(n-1)2 + ..中减去系列的技巧来获得上述系列的总和。12.此标准系列的总和为n *(n + 1)*(2n + 1)/ 6

S1 – 2S = n +(n-1)+…1 = n *(n + 1)/ 2
2S = n *(n + 1)*(2n + 1)/ 6 – n *(n + 1)/ 2
S = n *(n + 1)*(n-1)/ 6

上面的解决方案依靠技巧来获得级数之和,但是有一种更简单的方法来获得相同的结果:

对于i = 1,乘法语句执行(n-1)+(n-2)+ .. 2 + 1次。

对于i = 2,该语句执行(n-2)+(n-3)+ .. 2 + 1次

因此,对于每个i,执行该语句的次数为:

\sum_{k=1}^{n-i}k

这是从1到n – i的n个自然数的总和。因此,可以简化为:

\frac{(n -i) \times (n - i + 1)}{2}

相乘,我们将得到以下结果:

\frac{n^{2}-2ni + n + i^{2} - i}{2}

现在,这是将对每个i执行该语句的次数。因此,总共将执行该语句的次数为:

\frac{1}{2}\sum_{i = 1}^{n}\left ( n^{2}-2ni + n + i^{2} - i \right )

暂时忽略一半。扩展求和很简单。您可以将其分布在整个表达式中以获取此信息:

n^{2}\sum 1 - 2n\sum i + n\sum 1 + \sum i^{2} - \sum i

使用n个自然数之和和n个自然数的平方和的公式,我们得到:

n^{3} - 2n \times \frac{n \times (n + 1)}{2} + n^{2} + \frac{n \times (n + 1) \times (2n + 1)}{6} - \frac{n \times (n + 1)}{2}

进一步简化并以n / 6作为通用术语将为您提供:

\frac{n}{6}\left ( 2n^{2} - 2 \right )

现在,以2作为通用项,并用它来抵消我们之前忽略的一半。这给您:

\frac{n}{6}\left ( n^{2} - 1 \right )

最后,使用2 -b 2 ,您将获得所需的答案:

\frac{n}{6}\left ( n - 1 \right )\left ( n + 1 \right )

现在应该可以使您清楚地知道解决方案了!

这个问题的测验