按复杂度对大O函数排序

时间:2018-11-20 04:54:18

标签: time-complexity big-o complexity-theory

我正在尝试对这些函数进行排序-2n,n 100 ,(n + 1) 2 ,n·lg(n),100n,n!,lg (n)和n 99 + n 98 —这样每个函数都是下一个函数的big-O,但是我不知道一种确定是否有一个函数功能是另一个大功能。如果有人能解释我将如何做到这一点,我将非常感谢。

2 个答案:

答案 0 :(得分:0)

假设您具有一些编程背景。假设您有以下代码:

void SomeMethod(int x)
{       
    for(int i = 0; i< x; i++)
    {
            // Do Some Work
    }
}

请注意,循环运行了x次迭代。概括地说,我们说您将在N次迭代后得到解决方案(其中N将是x ex的值:数组/输入中的项目数等)。 因此,这种实现/算法据说具有N阶的时间复杂度,写为O(n)

类似地,嵌套的(2个循环)为O(n平方)=> O(n ^ 2)

如果您做出了二元决策,并且将可能性降低了一半,并且只选择一半作为解决方案。那么复杂度为O(log n)

发现this link很有趣。

致:Himanshu

虽然链接说明了log(base2)N复杂度如何很好地体现出来,但我还是要说同样的话。

假设您有一个预先排序的列表,例如:

1,2,3,4,5,6,7,8,9,10

现在,系统要求您查找列表中是否存在10。我想到的第一个解决方案是遍历列表并查找。这意味着O(n)。可以做得更好吗?

方法1:

我们知道List的列表已经按照升序排序:

  • 中断列表位于中心(例如5)。
  • 将“中心”(5)的值与“搜索值”(10)进行比较。
  • 如果中心值==搜索值=>找到项目
  • 如果居中<搜索值=>对列表的右半部分执行上述步骤
  • 如果居中>搜索值=>对列表的左半部分执行上述步骤

对于这个简单的示例,我们将在执行3或4个中断(分别为:5、8、9之后)后找到10(取决于实现方式)

这意味着对于N = 10个项目-搜索时间为3(或4)。在这里放一些数学;

2 ^ 3 + 2 = 10为简单起见,我们可以说

2 ^ 3 = 10(几乎等于---这只是做简单的以2为底的对数)

这可以重写为:

Log-Base-2 10 = 3(差不多)

enter image description here

我们知道10个项目,3个中断/查找次数,我们必须查找项目。变成

log N = K

这就是上述算法的复杂性。 O(log N)

答案 1 :(得分:0)

通常,当嵌套一个循环时,我们将值乘以O(outerloop max value * innerloop max value) n,依此类推。例如,for (i to n){ for(j to k){}}在这里意味着如果您要说i = 1 j = 1到k,即1 * k接下来i = 2,j = 1到k,即O(max(i)*max(j)) implies O(n*k).。此外,如果要查找订单,则需要使用对数用法来调用基本操作,例如O(n+n(addition)) <O(n*n(multiplication)) for log it minimizes the value in it saying O(log n) <O(n) <O(n+n(addition)) <O(n*n(multiplication)) and so on.,这样您就可以实现其他功能。

  

最好首先推广用于计算时间复杂度的方程式。像n! =n*(n-1)*(n-2)*..n-(n-1),所以某个地方O(nk)将被广义格式化为最坏情况的复杂度,例如,如果k = 2则O(nk) =O(n*n)