Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/algorithm/12.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Algorithm 计算大O互换、计算和比较_Algorithm_Loops_Time_Complexity Theory_Notation - Fatal编程技术网

Algorithm 计算大O互换、计算和比较

Algorithm 计算大O互换、计算和比较,algorithm,loops,time,complexity-theory,notation,Algorithm,Loops,Time,Complexity Theory,Notation,查看下面的代码: Algorithm sort Declare A(1 to n) n = length(A) for i = 1 to n for j = 1 to n-1 inclusive do if A[i-1] > A[i] then swap( A[i-1], A[i] ) end if next j next i 我想说有: 2个循环,均为n,n*n=n^2(n-1截断为n) 1比较,在j循环中,将执行n^

查看下面的代码:

Algorithm sort

Declare A(1 to n)

n = length(A)

for i = 1 to n
    for j = 1 to n-1 inclusive do
       if A[i-1] > A[i] then
          swap( A[i-1], A[i] )
       end if
  next j
next i
我想说有:
  • 2个循环,均为n,n*n=n^2(n-1截断为n)
  • 1比较,在j循环中,将执行n^2次
  • 将执行n^2次的交换
  • 循环中还有2n个加法,执行n^2次,所以是2n^2
评分方案中给出的答案: 算法评估

比较

唯一的比较出现在j循环中。 因为这个循环将总共迭代n^2次 有时,它会执行 正是n^2

数据交换

  • 可能在j回路中执行交换操作
  • 交换(A[i-1],A[i]),每种交换都会发生n^2次
  • 因此,在j回路中执行2n^2操作
  • i循环有一个递增i的加法运算,发生在n 时代
  • 把这些加起来,我们就得到了加法运算的数目,即2n^2+ n
  • 当n变得很大时,n^2将占主导地位,因此它是O(n^2)
注意:计算可能包括分配操作,但这些操作不会影响总时间,因此忽略

标记概述:
  • 1个标识i循环的标记将执行n次
  • 1标识j循环的标记将执行2n^2次这不是意味着n*n=n^2吗?对于i和j
  • 1标记正确的计算次数2n^2+n为什么不是 +2n?
  • 1个标记,用于确定订单将由n^2控制,作为n 为算法指定一个非常大的O(n^2)
编辑:从评分方案中可以看出,我需要计算:
  • 循环编号,但n-1可以截断为n
  • 比较,例如if语句
  • 数据交换(计为一条语句,即arr[i]=arr[i+1],temp=arr[i]等被视为一次交换)
  • 计算
  • 空格-仅n表示数组等
有人能解释一下这些答案是如何得出的吗?


谢谢大家!

这是我对标记方案的看法,明确标记他们正在计算的操作。他们似乎在计算任务(但很容易忘记交换需要2到3个任务)。这就解释了为什么它们只计算增量而不计算索引

计算掉期 计数加法(
+=

我不确定n^3是从哪里来的,它是一个冒泡排序,在O(n^2)中运行。你必须修正你的格式才能得到答案,因为你问的不清楚。如果你不想要渐近复杂性,它是+n还是+2n并不重要。如果您要查找确切的复杂性,则必须选择定义为基本操作的内容(在本例中可能是交换),n^3在标记方案中给出。我也知道,你不需要+n等的整体,但他们在分数方案。第一部分是我对它的看法,第二部分是分数方案。我很确定n^3是错的,你得问问你的老师/教授。(顺便说一句,您可以用
#
标记标题,这可能会帮助您更好地组织问题)谢谢!希望现在更清楚一点,n^3看起来像一个简单的键入错误,因为它与文本的其余部分不一致。你的老师似乎也忘记了j的增量,也可能忘记了i和j与n和n-1的比较。内部循环运行n*(n-1)次,而不是n*n(或(n-1)*(n-1),伪代码语法很奇怪)。指出你和你老师犯的所有错误可能不是一个很好的答案@user3080953是对的-我们需要知道你需要计算什么,因为这个决定会导致非常不同的常数因子。这实际上是非常有用的-分数方案让我有好几个小时的偏差。非常感谢你!
i loop runs n times
    j loop runs n-1 times (~n^2-n)
        swap (happens n^2 times)            n^2
i loop runs n times 
    j loop runs n-1 times (~n^2)
        increment j (happens n^2 times)     n^2
    increment i (happens n times)           n

sum:                                        2n^2 + n