algorithm - 时间复杂度n^k,k是数值变量,这个是伪多项式吗?
问题描述
如果算法的时间复杂度为 n^k
n 为元素个数,k 为数值变量,上限为 720,下限为 1,k 与 n 无关
O(n^k) 可以称为伪多项式吗?
如果不是,你认为这比 O(2^n) 更好吗?
编辑:
如果 k 没有上界,O(n^k) 可以称为伪多项式吗?
如果不是,你认为这比 O(2^n) 更好吗?
解决方案
由于k的上限为720,这意味着最坏的情况,算法按O(n 720 )缩放,因此这意味着它是多项式的。
渐近地说,这比O(2 n )好,因此这意味着最终,对于足够大的n,O(n 720 )算法将优于O(2 n )算法。但是,这取决于很多因素,如果对于实际输入来说这更好。
例如,如果第一个算法恰好需要n 720步,而第二个算法需要2 n(大 oh 并不意味着这一点),那么它将持有的第一个n是n=9'516。这意味着第一个算法将执行3.070×10 2865步,而第二个算法将执行 3.994 ×10 2865步。如果这些是简单的 CPU 指令,那么对于今天的技术,这将是几个数量级太大而无法实现。
例如,如果n通常很小,并且指数算法的“常数因子”较低,那么在实践中,有时使用O(2 n )算法会更好。但如前所述,这实际上取决于算法和输入的细节。
推荐阅读
- javascript - 使用 apollo-express 限制或过滤 graphql 查询
- pandas - Pandas 在 Dataframe 中检查 False 值
- javascript - 使用 Babel 插件将 JSX 属性转换为函数调用
- python - 如何在新类中实例化对象?
- haskell - Haskell:将参数组合成元组而不是使用不同的参数有什么含义?
- r - R:dplyr 有条件地汇总并重新编码列中的值
- python - 如何将文本文件放在 tkinter 条目上
- r - 过滤R列表
- java - 如何使用旧的休眠标准进行批处理?
- c# - 当 CopyTo 非静态方法的目标和源是同一个数组时,如何可能发生重叠?