我的代码运行O(C(n,r)^2)
复杂度。
我意识到C(n,r) = n! / ( r! (n - r)! )
但这真的是n!
时间复杂度? r
值会使其成为因子复杂性,但n
值会更复杂,因为O(n^x)
给定常量r
。
具有静态r
值和动态n
值是否使此解决方案成为O(n^x)
或O(n!)
解决方案?
答案 0 :(得分:4)
让我们先来看O( C(n,r) ) = O( n! / (r! (n-r)!) )
。
对于常量 r
,我们有:
O( C(n,r) ) = O( n! / (r! (n-r)!) ) = O( n! / (n-r)! )
= O( n*(n-1)*...*(n-r+1) ) = O( n^r )
因此:
O( C(n,r)^2 ) = O( n^(2r) )
答案 1 :(得分:3)
对于固定的r
,复杂性类别为O(n^r)
。
答案 2 :(得分:2)
O(_)表示单个变量的函数的族(集合,等价类)。如果你想将n ^ r的渐近增长视为n的函数,那么该变量就是n。如果你想把它看作是r的函数,那就是r。在这两种情况下,另一个变量当然会影响第一个变量的这组函数的形状。例如。对于r = 2,该集合将是O(n ^ 2),对于r = 3,它将是O(n ^ 3),通常为O(n ^ r)。