Big o 试图理解大oh符号

Big o 试图理解大oh符号,big-o,Big O,您好,我非常感谢您对Big-O表示法的帮助。明天我有一个考试,虽然我可以定义f(x)是什么,但我不能说我完全理解它 下面的问题总是在考试中出现,我真的需要试着找出答案,第一部分看起来很简单(我想)你是不是只是给n取一个值,在计算器上计算,然后把它们排列好?这似乎很容易,所以我不确定。我发现很难在网上找到例子 从最低到最高,最重要的是什么 正确的复杂性顺序 O(n2),O(log2n),O(1),O(2n),O(n!), O(n log2 n) 问题是什么 最坏情况下的计算复杂度 计算机上的二进制

您好,我非常感谢您对Big-O表示法的帮助。明天我有一个考试,虽然我可以定义f(x)是什么,但我不能说我完全理解它


下面的问题总是在考试中出现,我真的需要试着找出答案,第一部分看起来很简单(我想)你是不是只是给n取一个值,在计算器上计算,然后把它们排列好?这似乎很容易,所以我不确定。我发现很难在网上找到例子

从最低到最高,最重要的是什么 正确的复杂性顺序 O(n2),O(log2n),O(1),O(2n),O(n!), O(n log2 n)

问题是什么 最坏情况下的计算复杂度 计算机上的二进制搜索算法 长度n=2k的有序列表

从最低到最高,最重要的是什么 正确的复杂性顺序 O(n2),O(log2n),O(1),O(2n),O(n!), O(n log2 n)

顺序就像你在无穷远处比较它们的极限一样。就像
lim(a/b)
,如果它是1,那么它们是相同的,inf.或0表示其中一个更快

最坏的情况是什么 二进制编码的计算复杂性 一种有序表上的搜索算法 长度n=2k

  • 查找二进制搜索最佳/最差的大O
  • 按索引“最佳/最差的大O”查找链表访问
  • 下结论

  • 非常粗略地说,您可以想象选取非常大的n值,然后计算它们。但是,可能会超出计算器的大阶乘范围

    如果定义不清楚,更直观的描述是“高阶”意味着“随着n的增长,增长速度比”。一些经验法则:

    • 如果a>b,则O(n^a)的阶比O(n^b)的阶高
    • log(n)的增长速度比n的任何正幂都慢
    • exp(n)的增长速度比n的任何幂都快
    • n!增长速度快于经验值(kn)
    哦,至于复杂性,忽略常数乘数


    这足以推断出正确的顺序是O(1),O(logn),O(2n)=O(n),O(n logn),O(n^2),O(n!)

    对于大O复杂度,规则是如果两个事物仅以常数因子变化,那么它们是相同的。如果忽略常数因子,一个比另一个增长更快,那么它就更大

    所以O(2n)和O(n)是一样的——它们只随常数因子(2)变化。考虑这个问题的一种方法是删除常量,因为它们不会影响复杂性

    选择n并使用计算器的另一个问题是,它会为某些n给出错误的答案。大O是一个衡量事物随着n的增加增长速度的指标,但在任何给定的n下,复杂性的顺序可能不正确。例如,在n=2时,n^2是4,n!是2,但是n!增长速度比n^2快很多

    这一点很重要,因为对于具有多个项的运行时间,可以去掉较小的项——也就是说,如果O(f(n))是3n^2+2n+5,可以去掉5(常数),去掉2n(3n^2增长更快),然后去掉3(常数因子)得到O(n^2)。。。但是如果你不知道n^2更大,你就不会得到正确的答案

    实际上,你可以知道n是线性的,log(n)的增长比线性的慢,n^a>n^b如果a>b,2^n比任何n^a和n都快!比那还要快。(提示:尽量避免指数中有n的算法,尤其是避免指数中有n的算法!)

    对于问题的第二部分,在最坏的情况下,二进制搜索会发生什么?在每一步中,你都会将空间切成两半,直到最终找到你的物品(或者找不到地方)。这就是log2(2k)。在搜索中,您只需遍历列表即可找到您的项目,这需要n个步骤。从第一部分我们知道O(log(n))
    祝你考试顺利

    用易于理解的术语,Big-O表示法定义了特定函数的增长速度。虽然它起源于纯数学,但它最流行的应用是对算法的分析,可以根据输入大小进行分析,以确定必须执行的操作的大致数量

    使用这种表示法的好处是,您可以根据函数的复杂度对函数增长率进行分类。许多不同的函数(实际上是一个无限数)都可以用这种表示法以相同的复杂度表示。例如,
    n+5
    2*n
    4*n+1/n
    都具有
    O(n)
    复杂性,因为函数
    g(n)=n
    最简单地表示这些函数的增长方式

    我之所以强调最简单的一点,是因为符号的重点是函数的支配项。例如,
    O(2*n+5)=O(2*n)=O(n)
    ,因为
    n
    是增长中的主要术语。这是因为符号假定
    n
    趋于无穷大,这导致剩余项在增长率中的作用较小。按照惯例,任何常数或乘法都被省略


    阅读和了解更多更深入的概述。

    嘿,好了。如果您不真正理解“n”的含义,那么很难理解Big-O符号。你已经看到人们在谈论O(n)==O(2n),所以我将尝试解释这到底是为什么

    当我们将一个算法描述为具有“order-n空间复杂度”时,我们的意思是,如果我们有一个算法,比如说,对数组进行排序,那么该算法使用的存储空间的大小会变得更大,与它所处理的问题的大小成线性关系(称为n),为了进行排序操作,我们在内存中做的最大一件事就是创建该数组的精确副本,我们可以说它具有“顺序-n空间复杂性”,因为随着数组的大小(称之为n