Time complexity 计算复杂度取决于两个变量

Time complexity 计算复杂度取决于两个变量,time-complexity,big-o,complexity-theory,Time Complexity,Big O,Complexity Theory,我有一个算法,它主要由k-NN组成,然后是一个涉及寻找置换的计算,然后是一些for循环。逐行计算,我的计算复杂度是: O(n) - for k-NN O(2^k) - for a part that computes singlets, pairs, triplets, etc. O(k!) - for a part that deals with combinatorics. O(k*k!) - for the final part. K这是一个用户可以选择的参数,一般来说,它有点小(10

我有一个算法,它主要由k-NN组成,然后是一个涉及寻找置换的计算,然后是一些for循环。逐行计算,我的计算复杂度是:

O(n) - for k-NN
O(2^k) - for a part that computes singlets, pairs, triplets, etc.
O(k!) - for a part that deals with combinatorics.
O(k*k!) - for the final part. 
K
这是一个用户可以选择的参数,一般来说,它有点小(10-100)
n
是我的数据集中的示例数,这可能会非常大


我的算法的总体复杂度是多少?它仅仅是
O(n)

As
kAs
k
O(k*k!)
O(k)
大得多,但是既然你说
k
是固定的且相对较小,那么
O(n)
项是唯一一个随着样本大小变得任意大而不断增长的项。从学术意义上讲,该算法是
O(n)
。但是如果你有一个O(k*k!)的术语,这里一个大的
k
将支配
n
。因此,在实际意义上,无论哪一步是'O(k*k!),都将是优化应该发生的地方,当然,如果它是可能的,
O(k*k!)
O(k)
大得多,但是既然你说
k
是固定的,而且相对较小,那么
O(n)
term是唯一一个随着样本量变得任意大而不断增长的项。该算法在学术意义上是
O(N)
。但是如果你有一个O(k*k!)的术语,这里一个大的
k
将支配
n
。因此,在实际意义上,无论哪一步是'O(k*k!),都将是优化应该发生的地方,如果这是可能的话。如果k与我相关,那么说k可以像n一样增长到它想要的大小,那么我可以说我的复杂性是O(n+k!)?几乎是
O(n+(k+1)!
。都是
k*k
2^k
k
O((k+1)!)
,总的时间是以
O(n+(k+1)!)
如果k与我相关,就说k可以像n一样任意增长,我可以说我的复杂性是O(n+k!)?几乎是
O(n+(k+1)!
。都是
k*k
2^k
k位于
O((k+1)!)
,总时间以
O(n+(k+1)!)