Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/xslt/3.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 - Fatal编程技术网

Algorithm 大O符号上的加法和乘法

Algorithm 大O符号上的加法和乘法,algorithm,Algorithm,设f和g是两个函数。它们用于其他函数,将两个函数的输出相加,在其他情况下将两个函数的输出相乘。即 如果f=O(n)和g=O(n^3),那么f+g=?。那么f*g呢?O(n)的工作原理是取最大订单项,忽略其他订单项。在你的例子中: f=O(n) g=O(n3) 假设*和+本身是O(n)顺序的 f+g=Of+O++Og=O(n)+O(n)+O(n3)=O(n3+2n)=O(n3) 请注意,在最后一步中,您只需忽略除最高阶项以外的所有项,并删除任何多个项。对于*,结果是相同的 另一个例子: f+f=O

设f和g是两个函数。它们用于其他函数,将两个函数的输出相加,在其他情况下将两个函数的输出相乘。即 如果f=O(n)和g=O(n^3),那么f+g=?。那么f*g呢?

O(n)的工作原理是取最大订单项,忽略其他订单项。在你的例子中:

f
=O(n)

g
=O(n3)

假设
*
+
本身是O(n)顺序的

f+g
=Of+O++Og=O(n)+O(n)+O(n3)=O(n3+2n)=O(n3)

请注意,在最后一步中,您只需忽略除最高阶项以外的所有项,并删除任何多个项。对于
*
,结果是相同的

另一个例子:

f+f
=Of+O++Of=O(n)+O(n)+O(n)=O(3n)=O(n)

只需记住,运营商还有一个“成本”,它与其他运营商一起加入


大O表示法总是添加,但是如果元素的数量发生变化,请确保将其考虑在内。(例如,如果执行增加元素数量的操作,则
n
的未来实例将增加。如果执行矩阵乘法之类的操作,这一点很重要。)

f+g是O(n^3)。f*g是O(n^4)。这似乎是一个更好的问题。@Asad没有理由认为乘法会有一个O(n^4),而不知道更多关于f和g的结果。通常,运算符有自己的顺序成本,这些成本与函数的成本相加,而不是相乘。@PiMarillion您能否提供两个函数f和g的示例,使f是O(n^3),g是O(n),fg=O(n^4)?@Asad我不熟悉任何渐近时间代价为O(n^4)的常见算法,尽管它们确实存在。以函数g(x)=[1,x[1:n-1]]*x[0:n]为例,其时间成本为O(n)。如果f(x)=h(h(h(x)),时间复杂度为O(n^3),则f(x)*g(x)需要O(n^3)时间来计算f(x),O(n)来计算g(x),O(n)来执行它们之间的乘法。结果是O(n^3+n+n),也就是O(n^3)。你没有明确地说明它(不完全确定“结果相同”是什么意思),你似乎在声称
f(x)*g(x)=O(x^3)
。这显然是不正确的:让
f(x)=x
g(x)=x^3
(这两个都满足给定的假设),然后
f(x)*g(x)=x^4
,这不是
O(x^3)
。我从未见过运营商的这种方法“有自己的成本”,并且相当肯定它是错误的。你能链接到描述这种方法的论文或资料来源吗?@Asad f(x)=x如果通过引用完成,时间成本为O(1);如果通过复制完成,时间成本为O(n)。与所有标量数学运算一样,g(x)=x^3的时间开销为O(n)。。。大O表示法测量算法或操作的渐近时间复杂度(最常用于排序算法)。它与多项式中的指数不同。苹果和桔子。一个函数没有时间成本。它只是集合中元素之间的对应关系。类似地,大O只是一种数学形式主义,当应用于将算法的输入大小映射到它所涉及的步数或所占用的空间量的函数时,它非常有用。函数f(x)=O(g(x))当且仅当存在任何正实M和x|min,使得| f(x)|=x|min。这就是它的全部意思。你把两个函数乘积的渐近值与计算它的某个未指定算法的渐近复杂性混在一起了。它们没有相同的域:前者只是一个将某个实数映射到另一个实数的任意函数,例如f(x)*g(x)=x^4中的x->x^4。另一方面,加法或乘法的算法复杂性不是操作数数值的函数,而是位数的函数。