这个指针函数的复杂性是什么?

时间:2018-02-15 17:27:09

标签: c++ algorithm time-complexity

这是代码,函数接收指针* ptr(指向外部的字符数组).Loop只是计算长度。这个函数的复杂功能是什么?我已经算了。

Complexity Function of this Code

  1. 这是正确的复杂度函数计算吗?
  2. 在里面,我应该考虑3个操作,*, ptr + c !=
  3. Astaric *正解除引用,ptr + c正在计算地址,而!=表示条件。

2 个答案:

答案 0 :(得分:4)

当我们说O(N)时,我们确实意味着O(N)+ c,其中c是常数。这是因为非常小的,复杂性的特征可能不会显示出来,因为非必需品(噪声)可能占主导地位,因此这由 c 表示。但随着N的增长,常数变得无关紧要,因为相对于N的复杂性成为主导时间。通常,常数仅仅将图形向上或向下移动少量,但不会改变其形状。因此,我们省略它,只说O(N),这是我们真正感兴趣的知识。

对于系数,同样的事情发生了。如果复杂度与N成比例,则它是线性关系。线性运算的图形乘以X将具有不同的斜率,但其形状仍然是线性的。因此,系数并未真正提供复杂性类别的附加信息。

同样地,如果你有O(N)+ O(N ^ 2)的东西,则N ^ 2占主导地位,我们倾向于忽略较小的项O(N),并将其称为O(N ^ 2)算法。它不是一门精确的科学,它是一种理解复杂性本质的分类。 Big-oh表示法是最坏情况的复杂性。

我认为只有在评估具有相同分类复杂度的特定算法的相对指标时,您才可能对系数和常数感兴趣。 (例如,某些O(N * lg(n))排序比其他排序更快。)但通常以不同的方式测量。

答案 1 :(得分:3)

这在很大程度上取决于"复杂性"的定义。您正在使用(当然这不是the typical asymptotic notations之一)但是,如果我从这一级别的教育中正确记住这些作业,是的,您已经正确计算了。

在大写符号中产生的最坏情况渐近算法复杂度将是O(N)(通过忽略系数和较低项(类型)得出)。