【问题标题】:Can Someone please explain me the logic of calculating big-O in my example有人可以在我的例子中解释一下计算大 O 的逻辑吗
【发布时间】:2019-07-06 06:05:42
【问题描述】:

据说选择排序的复杂性是 O(N^2) 但我不明白逻辑,因为我正在减少循环执行的次数。我了解代码块 2,但不了解代码块 1

public int[] Sorting(int[] array)
{
    for (i = 0; i <= array.Length - 1; i++)
    {           
        minimum=i;
        for (j = i; j < array.Length-1; j++) 
        {
            if (array[minimum] > array[j+1])
                minimum = j + 1;
        }   
        int temp = array[minimum];
        array[minimum] = array[i];
        array[i] = temp;
    }

    return array;
}

for(i=0;i<=n;i++) //Code 2
{
    for(j=0;j<=n;j++)

【问题讨论】:

  • 如果您使用适当的缩进格式化您的代码,这将极大地帮助每个人。
  • 你能给我举个例子吗,对不起,我是新人@Igor
  • @nevas 我刚刚在 Igor 发表评论时编辑了帖子。请刷新页面,您会看到正确的缩进。
  • 我知道在这个编辑器中我需要留出 4 次空间来制作代码 sn-p 但是如果我添加文本,那么它会显示为普通文本 @Amy
  • @nevas - 单击您问题的edit 链接以查看 hankide 提供的新文本,这应该说明您需要如何格式化所提供的任何代码。

标签: c# algorithm sorting time-complexity big-o


【解决方案1】:

n 为数组大小。

并查看比较次数(调用if (array[minimum] &gt; array[j+1]))。

  • 对于 i=0,它被称为 n-1 次。
  • 对于 i=1,它被称为 n-2 次。
  • ...
  • 对于 i=n-1,它被调用 0 次。

最后,调用了 0+1+...+(n-1) 次。

这是sum of consecutive integers

而且,在你的情况下,它是(n-1)*n/2,即O(n²)

编辑

所以确切的比较数是(n-1)*n/2,不完全是,看起来比好,但实际上不是。

  • 对于 n=10,您有 45 次比较。
  • 对于 n=100,您有 4950 次比较。

也就是说,对于 10 倍以上的条目,您需要 100 倍以上的时间来完成您的算法。

  • 对于 n=10,您有 45 次比较。
  • 对于 n=1000,您有 499500 次比较。

也就是说,多 100 倍的输入,你需要多 10000 倍的时间来完成你的算法。

如您所见,当您乘以 k 条目数时,您大致乘以 计算时间。

【讨论】:

  • 谢谢。但是,如果我们说 n 次,则意味着循环执行 n 次,假设 n=5 现在执行 5 次,当我们说 n^2 时,则意味着存在 25 个组合,这在代码块 2 中很好,但在代码块中1 当 n 为 5 j 时执行了大约 15 次,这就是我没有得到它的地方
  • @nevas,Big-O 表示法不是关于精确数字,而是关于渐近的。
  • @Dale 但是我们什么时候决定某个变化是可以接受的,比如如果 j 循环被分成两半,那么它将是 logn 但这里的时间数量在某些系列中会减少,所以应该予以考虑。我可能是非常错误的,但请帮助我一点
  • @nevas 在您的示例中,操作次数T(n)(n-1)*n/2 = n^2/2 - n/2 成正比。但是对于足够大的n 值,这个表达式的唯一重要部分是n^2/2。当我们谈论大 O 表示法时,也可以省略常量。因此,结果是O(n^2)
  • @Dale 你说的是 10+7+8..n 所以 (n+1)*(n/2) 所以在这种情况下很好但是代码块 2 是什么大 O 符号
猜你喜欢
  • 2011-12-22
  • 2015-01-31
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2013-07-13
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多