我不理解sigma符号和循环

时间:2013-11-20 13:01:48

标签: algorithm for-loop

我有这本书说

enter image description here

并说这相当于说

for(i = 1; i <= N; i++)
    Sum += i;

并进一步说利用这个简单的公式,

enter image description here

因为(最大值 - 最小值+ 1)

并且说将其更改为C代码将是

for(k = j; k <= 1; k++)
    Sum += k;
但是,我真的无法理解这一点!任何人都可以向我解释这个?????

非常感谢

7 个答案:

答案 0 :(得分:3)

关于第二笔,它从k=j开始,到i结束。该总和不等于(j - i - 1),而是等于(i - j + 1)。我们举个例子:

如果j = 3i = 6,则k = 3sum = 1+1+1+1 = 4。通过应用公式:sum = (i - j + 1) = 6 - 3 + 1 = 4

现在,第一个例子的C代码,他们说:

  

for(i = 1; i <= N; i ++)       Sum + = i;

这是错误的。相反,它应该是:

for(i = 1; i <= N; i++)
    Sum += 1;

在第二个中,他们说:

  

for(k = j; k <= 1; k ++)       Sum + = k;

相反,它应该是:

for(k = j; k <= i; k++)
    Sum += 1;     // Where i >= j

答案 1 :(得分:2)

如果你不理解C代码,那是因为它的错误。

在第一种情况下,它必须是1而不是i:

for(i = 1; i <= N; i++)
    Sum += 1;

在第二种情况下,它必须是i而不是1和1而不是k:

for(k = j; k <= i; k++)
    Sum += 1;

P.S。你也有公式本身的mistypo。由于某种原因,在Sigma之后跳过1。和j和我被交换......

你在谈论这本书是什么?

答案 2 :(得分:0)

肯定是说总和相当于

for (i = 1; i <= N; i++)
  Sum += 1;

答案 3 :(得分:0)

对于给定的xy

,本书看起来就是这么说的
for (int i = x; i <= y; ++i) Sum += 1;

类似于

因此,替换x = 1y = N

for (int i = 1; i <= N; ++i) Sum += 1;

类似于

这当然是您的期望:从1N进行计数时,您会计算N项的总数。更一般地说,从x计算到y时,您会计算y - x + 1项(+ 1,因为您包含两个边界)。

答案 4 :(得分:0)

我认为我们在通过Sigma表示法计算For循环方面存在局限性

例如

x=0
For i=2 to n-1 do
    For j=i+1 To n-2 do
          x=x+1

对于n = 5,我们有x = 1

但是当我用Sigma计算它时

Sigma i = 2到n-1(Sigma j = i + 1到n-2)=(n ^ 2-7 * n + 10)/ 2

如果我们用n = 5代替,则答案为零,为什么?

答案 5 :(得分:0)

我绝不是一个微积分大师,只是一个外行,但也许外行人的条款对某些人有用。再一次,我不是大师,如果你发现错误,那就大声说道。无论如何,让我们通过“循环”堵塞和突然......

鉴于Sigma右侧的数字,我们被告知此总和从1开始,所以

第一次迭代,

Sum = 1 + 1

第二次迭代,

2 + 2

第三次迭代

4 + 3

第四次迭代

7 + 4

一直到你将拥有的LIMIT

SumBeforeLast + N

什么是“限制?”在C中,您可以将其定义为(i = 1; i&lt; = N;)。在英语中,如果N是100,则限制将是“其中i = 100”。如果N = 5,则“限制”是“其中i = 5”,依此类推。

如果你想变得迂腐(你应该),你可能也会说限制有两个部分,我在“执行”的“开始”处的原始值(Lambda Calculus不会将计算与时间或机器相关联,但是一旦你得到了这个概念,你总是可以剥离那个模型)是“下限”而我的“最终价值”就是“上限”。

你想知道衍生品的“魔力”吗?很难解释,但基本上,有时候,有时,当有时N =无穷大或其他一些值时,再次只是有时候,如果代数以这样的方式排列,以便产生的代数自我抵消,我们留下一个新的简化代数,不再需要“无限”或“N次迭代”来达到某种想要的结果。找到这些“衍生物”是数学和算法开发的重要组成部分。

换句话说,微积分的“神奇”只不过是西格玛操作产生类似(x / x)* someEquation的模式,结合某事物(如(x / x))除以自身的事实等于1,并且1乘以“someEquation”导致“someEquation”没有变化的事实,这意味着在某些迭代中计算Sigma运算不需要等式的大部分。

请记住,如果我们丢弃x / x或者更确切地说只是x,那么所有的复杂性都会被丢弃,因为它是离散的甚至是无限的,在这种情况下,全新的计算不仅可以进行优化,而且可以通过我们有限的方式实现硬件

我对此没什么经验,但据我所知,在算法设计中,衍生品用于对算法进行优化,因为它们从递归系列中提取复杂性。有时这些优化会将无限复杂的问题带入有限域的范围,这使得它们可以被计算机解决,这些计算机毕竟具有有限的寿命和资源,因此仅限于有限或离散数学。

另一方面,积分函数的复杂度增加了积分函数的复杂性,这对于发现许多新算法至关重要,特别是那些复杂性超出我们使用直觉和原始数学推理的发现能力的算法。

答案 6 :(得分:0)

我创建了这个while循环,详细说明了sigma符号元素。

//Illustrates how loops are similar to Sigmas in Math
//This is equal to:
//100
//Sigma x+5
//x=1

package justscratch;

public class SigmaCalculatorWhileLoop {
    private static int initial = 0; //Initial. Will increment by one until it reaches limit.
    private static final int limit = 100; //Limit
    private static final int incr = 5; //Number Incremental
    private static int pass = 0; //Will illustrate the current pass
    private static int tempAnswer = 0; //The previous sum
    private static int finalAnswer = 0; //The current sum

    public static void main(String[] args) {
        while(pass<=limit) {
            System.out.println("Pass: " + pass); //Prints out current Loop Pass
            System.out.println(tempAnswer); //Prints out the sequences generated by each iteration from the "sigma"
            tempAnswer = initial + incr; //Creates a new increased sequence until the limit is reached
            finalAnswer = tempAnswer + finalAnswer; //Adds the previous sequence with the current sequence
            pass++; //Increases the current pass
            initial++; //The initial value will increase by 1 until it reaches it's limit
        }
        System.out.println("Sigma Answer: " + finalAnswer); //Prints the final sum of the "Sigma"
    }
}

总之,此应用程序将模拟西格玛100Σn+ 5 n = 0 。该应用程序通过基于西格玛生成先前和当前序列,并将这些序列添加到当前&amp;先前的序列一起,直到达到sigma限制,以计算sigma返回的总数。所以序列 {5 + 6 + 7 + 8 + 9 + 10,11 +。 。 。 。 105} 将完全添加。