C# 这个程序的大O是O(N^2)吗?

C# 这个程序的大O是O(N^2)吗?,c#,big-o,C#,Big O,我正在读《破解密码面试》(新的一次)。程序似乎运行正常。但当我查看它时,似乎N^2/2就是答案。我认为我不对。谁能告诉我大O是什么,为什么 类程序 { 静态void Main(字符串[]参数) { int userNumber=Convert.ToInt32(Console.ReadLine()); int[]makeAnArray=newint[userNumber]; 对于(var x=0;x

我正在读《破解密码面试》(新的一次)。程序似乎运行正常。但当我查看它时,似乎N^2/2就是答案。我认为我不对。谁能告诉我大O是什么,为什么

类程序
{
静态void Main(字符串[]参数)
{
int userNumber=Convert.ToInt32(Console.ReadLine());
int[]makeAnArray=newint[userNumber];
对于(var x=0;x

基本上,该函数接受数组,针对数组长度运行
for
循环,并针对
length-1
运行for循环。我投10,我得到55。

是的,那个程序的大O是O(N^2)

在大O表示法中,您仅使用主导因子(例如忽略系数)

因此,即使你更精确(实际答案是n(n-1)/2),符号也会忽略你的1/2系数&任何小于n^2的因子,这是主导因子


看到这个答案:

是的,这个程序的大O是O(N^2)

在大O表示法中,您仅使用主导因子(例如忽略系数)

因此,即使你更精确(实际答案是n(n-1)/2),符号也会忽略你的1/2系数&任何小于n^2的因子,这是主导因子


请参阅此答案:

实际迭代次数,其中
n
是数组的大小,为:

n(n+1)/2

可以扩展到

(n^2+n)/2

然而,在大O表示法中,当输入大小变大时,您通常对算法类感兴趣,并且可以忽略常数(如上面公式中的2)以及指数小于最大值的变量-因此您可以忽略
n
组件,因为
n^2
将非常,当
n
尺寸增加时,很快超过非二次分量。因此,您可以调用实际运算计数为
(n^2+n)/2
的算法,简单地说就是O(n^2)

以下是大O符号的定义,供参考:

大O表示法是一种数学表示法,它描述了当参数趋向某个特定值或无穷大时函数的极限行为

解释为什么有n(n+1)/2个操作:

您正在以以下方式迭代数组:

for (var i = 0; i < arr.Length; i++)
{
    for (var j = i + 1; j < arr.Length; j++)
    {
    }
}
让我们画出您的程序将以1的数组长度打印的内容,其中每行表示外循环和内循环的整个迭代:

i0
现在,数组长度为3:

i0 j1 j2
i1 j2
i2
数组长度为6时:

i0 j1 j2 j3 j4 j5
i1 j2 j3 j4 j5
i2 j3 j4 j5
i3 j4 j5
i4 j5
i5
通过这种方式画出来,您可以很容易地看到,当
n
=6时,我们正在打印6+5+4+3+2+1语句。请注意,这只是从1到6的所有整数的相加,或者更一般地说,从1到
n
。从1到
n
的整数之和的通俗公式是(令人惊讶的!)
(n^2+n)/2


我有点匆忙地把它打了出来,但希望你能看到我是如何做到这一点的。这与您的评估一致,即对于长度为10的输入,您有55次迭代:(10^2+10)/2=(110)/2=55。

实际迭代次数,其中
n
是数组的大小,为:

n(n+1)/2

可以扩展到

(n^2+n)/2

然而,在大O表示法中,当输入大小变大时,您通常对算法类感兴趣,并且可以忽略常数(如上面公式中的2)以及指数小于最大值的变量-因此您可以忽略
n
组件,因为
n^2
将非常,当
n
尺寸增加时,很快超过非二次分量。因此,您可以调用实际运算计数为
(n^2+n)/2
的算法,简单地说就是O(n^2)

以下是大O符号的定义,供参考:

大O表示法是一种数学表示法,它描述了当参数趋向某个特定值或无穷大时函数的极限行为

解释为什么有n(n+1)/2个操作:

您正在以以下方式迭代数组:

for (var i = 0; i < arr.Length; i++)
{
    for (var j = i + 1; j < arr.Length; j++)
    {
    }
}
让我们画出您的程序将以1的数组长度打印的内容,其中每行表示外循环和内循环的整个迭代:

i0
现在,数组长度为3:

i0 j1 j2
i1 j2
i2
数组长度为6时:

i0 j1 j2 j3 j4 j5
i1 j2 j3 j4 j5
i2 j3 j4 j5
i3 j4 j5
i4 j5
i5
通过这种方式画出来,您可以很容易地看到,当
n
=6时,我们正在打印6+5+4+3+2+1语句。请注意,这只是从1到6的所有整数的相加,或者更一般地说,从1到
n
。从1到
n
的整数之和的通俗公式是(令人惊讶的!)
(n^2+n)/2


我有点匆忙地把它打了出来,但希望你能看到我是如何做到这一点的。这与您的评估一致,即对于长度为10的输入,您有55次迭代:(10^2+10)/2=(110)/2=55。

O(N^2)和O((N^2)/2)是同一件事。如果您不确定是否正确,请运行一个简单的实验。开始绘制t