Algorithm 在哪种情况下,复杂度为2^n的算法将在n^5上使用?

Algorithm 在哪种情况下,复杂度为2^n的算法将在n^5上使用?,algorithm,big-o,time-complexity,complexity-theory,Algorithm,Big O,Time Complexity,Complexity Theory,这是教授问的问题。与我交谈过的其他学生都不知道如何回答这个问题。这部分是因为这个问题有多奇怪,也因为他几乎没有解释复杂性。你能帮我们一下吗?大O符号只是一个粗略的近似值,它用来说明增加“n”的算法的复杂性。这可能是非常不准确的 例如: 2^(n)/(n^10)仍然是O(2^n),n^5+n^4+n^3仍然是O(n^5)。在这种情况下,对于较小的n,显然最好选择复杂度为O(2^n)的算法 Big-O表示法只是一个粗略的近似值,用于说明增加“n”的算法的复杂性。这可能是非常不准确的 例如: 2^(n

这是教授问的问题。与我交谈过的其他学生都不知道如何回答这个问题。这部分是因为这个问题有多奇怪,也因为他几乎没有解释复杂性。你能帮我们一下吗?

大O符号只是一个粗略的近似值,它用来说明增加“n”的算法的复杂性。这可能是非常不准确的

例如:


2^(n)/(n^10)仍然是O(2^n),n^5+n^4+n^3仍然是O(n^5)。在这种情况下,对于较小的n,显然最好选择复杂度为O(2^n)的算法

Big-O表示法只是一个粗略的近似值,用于说明增加“n”的算法的复杂性。这可能是非常不准确的

例如:

2^(n)/(n^10)仍然是O(2^n),n^5+n^4+n^3仍然是O(n^5)。在这种情况下,对于较小的n,显然最好选择复杂度为O(2^n)的算法

根据该图,当
~1.2


根据该图,当
~1.2
时,2n更好。算法复杂性通常用“大O”表示法来描述,该表示法处理一个算法在其输入朝无穷大增长时所需的运算次数。这考虑到以下假设:

  • 较小项的贡献(例如,n^5算法中的n^4)可以忽略
  • 标量因子的贡献可以忽略
例如,复杂度为2n^5+3n^4+n^2的算法的大O复杂度为O(n^5)-忽略标量因子和较小的项


当n很小时,或者当标量因子很大时,这些假设就失效了。具有较小big-O复杂度的算法可能具有较大的标量因子或非平凡的较小项,这使得算法对于较小的输入值更昂贵。

算法复杂度通常用“big-O”表示法描述,它处理一个算法在输入朝无穷大方向增长时所需的操作数。这考虑到以下假设:

  • 较小项的贡献(例如,n^5算法中的n^4)可以忽略
  • 标量因子的贡献可以忽略
例如,复杂度为2n^5+3n^4+n^2的算法的大O复杂度为O(n^5)-忽略标量因子和较小的项


当n很小时,或者当标量因子很大时,这些假设就失效了。具有较小big-O复杂度的算法可能具有较大的标量因子或非平凡的较小项,这使得算法对于较小的输入值更昂贵。

可能对于
n
s,其中2^n n < /代码> s,其中2 ^ n<n ^ 5.另一个可能的因素是,如果n ^ 5的常数项为10 ^ 10 ^ 10 ^ 10 ^ 10,那么,在你的问题的标题中,可以使用Big-O符号来考虑更多的情况:“在哪种情况下,O(n ^ 5)上的复杂度O(2 ^ n)的算法将被使用?”Big-O符号不是“不准确的”。也许人们有时会对它的含义和使用方法感到困惑,但它本身并不是不准确的。@NiklasB:是的,你是对的,我改变了它。感谢you@Overholt,对于第一个示例,尽管您所说的在数学上是正确的,但在实践中,大O仍然表示为
O(2^n/n^10)
。任何big-O表示法的目的都是给出一个严格的上界。当然,对于所有多项式算法和排序,人们可以忽略以上所有内容,说
O(2^n)
,但没有人这样做,因为这会使表示变得无用。大O表示法并不“不准确”。也许人们有时会对它的含义和使用方法感到困惑,但它本身并不是不准确的。@NiklasB:是的,你是对的,我改变了它。感谢you@Overholt,对于第一个示例,尽管您所说的在数学上是正确的,但在实践中,大O仍然表示为
O(2^n/n^10)
。任何big-O表示法的目的都是给出一个严格的上界。当然,我们可以忽略以上所有内容,对所有多项式算法和排序都说
O(2^n)
,但没有人这样做,因为这会使表示无效。您还应该计算常数因子。一种算法的常数因子可能比另一种算法大得多,从而影响阈值。OP没有提到常数因子,只有两种具有给定复杂性的算法常数因子隐含在复杂性符号中。对于足够大的
n
alpha*n^5
将超过
beta*2^n
,但您不能仅通过求解方程
2^n>n^5
来计算
n
,必须首先确定alpha和beta。看看BJMyers的答案。你也应该计算常数因子。一种算法的常数因子可能比另一种算法大得多,从而影响阈值。OP没有提到常数因子,只有两种具有给定复杂性的算法常数因子隐含在复杂性符号中。对于足够大的
n
alpha*n^5
将超过
beta*2^n
,但您不能仅通过求解方程
2^n>n^5
来计算
n
,必须首先确定alpha和beta。看看比迈尔斯的答案。