有一种算法要求我们打印数字质数因子的所有子序列。 例如,如果数字为6,我们将打印:
{},{2},{3},{2 3}
现在,给定的约束是数字的素数不超过13。
复杂度显然是 O(pow(2,数字的素数))
现在,我的疑问是: 由于我们知道小于或等于13的素数个数仅为6。这使得最差的时间复杂度 O(pow(2,6))显然是O(1)。那么,既然我们已经知道所有可以作为时间复杂度候选的常数值,那么我们可以将该算法称为恒定时间算法吗?
答案 0 :(得分:1)
不是那么快。
如果k = 2n2 * 3n3 * 5n5 * 7n7 * 11n11 * 13n13
,则子序列数为(n2+1) * (n3+1) * (n5+1) * (n7+1) * (n11+1) * (n13+1)
,而这些序列的平均长度为(n2 + n3 + n5 + n7 + n11 + n13)/2
很容易将每个术语为{{1} }。然后,您可以在输出大小上设置O(log(k))
的上限。 (如果每个O(log(k)7)
的{{1}},则所有6个术语同时处于该比例尺。)
如果未将数字分解为因数,则必须增加先分解数字的难度。