我正在学习O符号,我认为1是O(1),因为1被认为是常数,它的Big-O将是1.但是,我读到它可以是O(n)同样。这怎么可能?是因为n = 1那么它会是一样的吗?
答案 0 :(得分:1)
是O(1)的函数也是O(n) - 和O(n 2 )和O(e n ),所以上。 (在数学上,您可以将1
视为始终具有相同值的函数。)
如果你看一下Big {O符号的formal definition,你会看到(粗略地说)函数 f(x)是 O(g(x) ))如果 g(x)超过 f(x)至少一些常数因子,因为x变为无穷大。引用链接文章:
让 f 和 g 是在真实的某个子集上定义的两个函数 数字。一个人写道
* f(x)= O(g(x))为x - > ∞
当且仅当有积极的时候 常数 M ,对于 x 的所有足够大的值, f(x)的绝对值最多 M 乘以绝对值 of g(x)。也就是说,当且仅当存在a时, f(x)= O(g(x)) 正实数 M 和实数 x 0 这样
* | F(X)| ≤M| g(x)|对于所有 x ≥* x 0 。
然而,我们很少说O(1)函数或算法是O(n),因为说它的O(n)是误导性的,并没有传达太多信息。例如,我们说Quicksort算法是O(n log n),Bubblesort是O(n 2 )。确切地说,Quicksort也是O(n 2 ),但是没有必要这样说 - 很大程度上是因为很多人不熟悉Big-O符号的确切数学含义。
另一个名为Big Theta(Θ)的符号应用了更严格的界限。
答案 1 :(得分:0)
实际上,Big O Notation显示程序的复杂程度(可能是时间,内存等)取决于问题的大小。
O(1)表示程序复杂性与问题大小无关。例如访问数组元素。无论您选择哪个索引,访问时间都与索引无关。
O(n)表示程序复杂度线性地取决于问题大小。例如如果要线性搜索数组中的元素,则需要遍历数组的大多数元素。在最坏的情况下,如果数组中不存在元素,则将遍历整个数组。
如果我们增加数组的大小,复杂性就是说,时间复杂度会有所不同,即如果我们遍历100个元素则需要更多的时间来执行,而不是只运行10个元素所需的时间。
我希望这对你有所帮助。
答案 2 :(得分:0)
Big O Notation是一种数学方法,用于解释函数在点或无穷大附近的行为。这是一种用于计算机科学的工具,用于分析算法的复杂性。算法的复杂性可帮助您分析算法是否适合您的情况并在合理的时间内处理您的逻辑。
但这不能回答你的问题。如果n
等于1
的问题在Big O表示法中没有意义。就像这个名字所说的那样,这是一种符号,而不是数学计算方法。 Big O表示法意味着评估此算法的行为接近无限,以告知算法的哪个部分最重要。例如,如果算法具有可以由函数2x^2 + 3x
表示的行为,则Big O表示法将获取此函数的每个部分并将其评估为接近无限并且采用最重要的函数。因此,通过评估2x^2
和3x
,我们会发现2x^2
将是3x
的更大无限。 x^2
和3x
之间的差异也是无限的。因此,如果我们消除系数(不是函数的变量部分),我们将有两个复杂性:O(x^2)
和O(x)
,所以O(n^2)
和O(n)
。但我们知道最重要的是O(n^2)
。
如果在代码的一部分内部,您有两个复杂性O(1)
和O(n)
,那么O(n)
将是您的算法复杂性。
但如果O(n)
复杂度只处理一个元素,则行为将等同于O(1)
。但这并不意味着您的算法具有O(1)
复杂度。