一旦我读了一篇科学论文:
算法的计算复杂度为
O(N^d)
,其中N
是数据的数量,d
是维度。因此固定 维度,算法复杂度是多项式。
现在,这让我想到了(如果我没有记错的话),二元输入的数量定义了大O符号。因此,如果我固定数据的维度,很自然地得到多项式解。此外,如果我还要修改N
,输入的数量,我会到达O(1)
解决方案,请参阅相关帖子:
Algorithm complexity with input is fix-sized
我的问题是,如果你认为这是多项式复杂性的有效参数?可以真正修复一个维度和输入数据并声明多项式复杂度吗?
答案 0 :(得分:1)
从大学时代回忆起来。 Big-O表示法只是算法执行方式的 UPPER 界限。 在数学上,f(x)是O(g(x))意味着存在常数k> 0且x0使得
对于所有x> x0 ,f(x)< = kg(x)
要回答您的问题,您无法修复N,即自变量。 如果你修复N,说&lt; 100,我们肯定会到达O(1), 因为根据定义。我们可以设置一个大的K来确保所有x(<100)的f(N)<= kG(N)
答案 1 :(得分:1)
是的,这是合理的事情。
这实际上取决于最初的问题,但在大多数情况下,我会说固定维数是合理的。我希望该论文可以为实际目的提出类似于多项式复杂性的东西&#34;或类似的东西或有一些论据表明为什么限制d是合理的。
您可以与复杂度为O(d ^ N)的解决方案进行比较,其中固定维数并不意味着解是多项式。所以当d很小时,呈现的那个明显更好。
答案 2 :(得分:0)
这仅适用于某些算法。我不清楚在某些情况下“维度”应该是什么。
E.g。 SubSetSum是NP完全的,因此没有已知具有多项式复杂度的算法。但输入只是N个数字。您还可以将其视为N个位长d。但算法仍具有多项式复杂度。
同样适用于格子的最短向量问题(SVP)。输入是N x N Basis(假设有整数条目),您可以查找最短的非零向量。这也是一个难题,并且还没有多项式复杂度的算法。
答案 3 :(得分:0)
对于许多问题,不仅是导致问题困难的输入数据的大小,还有该数据的某些属性或参数。例如。许多图形问题在节点和边数分别给出了复杂性。
有时,这些参数之间的差异可能是戏剧性的,例如,如果你有像O(n ^ d)这样的东西,当n增长时复杂性只是多项式,而d增长时则是指数。
如果您现在碰巧有一个应用程序,您知道像维度这样的参数的值总是相同或者有一个(小)最大值,那么将此参数视为固定可以为您提供有用的内容。所以这些陈述在科学论文中非常普遍。
但是,您不能只修复任何参数,例如你的记忆是有限的,因此数据的排序是恒定的时间,因为该参数的界限太大,以至于将其视为固定不会给你任何有用的见解。
因此,修复所有参数通常不是一种选择,因为必须有一个方面,其中数据的大小会有所不同。如果你的复杂性增长很慢,它可以是一个选择。
E.g。如果常量也非常小,则有时认为具有O(log n)运算的数据结构具有有效恒定的复杂度。或者数据结构作为联合查找结构,其中操作的分摊复杂性是O(α(n)),其中α是阿克曼函数的反函数,函数增长得如此之慢以至于不可能超过10或任何大小n任何可以想象的硬件都可以处理。