如何对与组合操作有关的算法的复杂性进行分类。
假设输入为m,n,复杂度由C(m,n)确定。 (C是从n中选择m的组合函数)。问题是如何对复杂性进行分类而不是仅给出C(m,n)。
我的意思是,为了了解算法的运行时间,可以说算法是多项式,指数时间复杂度。但是如何处理C(m,n)?
我知道可以使用Stirling's approximation来近似阶乘,但结果仍然太复杂,无法将其置于复杂性类中。
答案 0 :(得分:1)
如果你坚持同时保留m和n,那么要比Stirling的近似做得更好。单独m的上界是C(m,m / 2),它是2 m /√m的渐近,因而是指数。
答案 1 :(得分:1)
你不能“把它放入复杂性类”,因为它不是一个单变量的运行时间。
它的“渐近行为”是未定义的,因为我们应该考虑哪个变量接近无限?即使我们说两个方法无限lim {n->inf, m->inf} nCm
未定义,因为它们的相对值是未定义的。即行为不仅取决于n
和m
大于某个值,还取决于它们的相对值。
复杂性取决于两个变量,而nCm
是一个完全有效的复杂函数。
如果m
相对于n
有合理的近似值,那么您可以更轻松地对其进行分类。也许值得制定案例,m = O(n)
,m = O(1)
或者m = [kn]
和0 <= k <= 1
是常量+ Stilring的公式,在一个变量中给出一个很好的关系,同时仍然可以考虑m
相对于k
的值。