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

📅  最后修改于: 2021-09-26 03:26:07             🧑  作者: 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)三个连续整数的乘积的三分之一。
(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 )

这应该使您现在清楚解决方案!

这个问题的测验