我被要求提供一个应该是O(n(log(k)))
的算法
k是数组的数量,n是所有这些元素的总数。我不得不对数组进行排序。
减去细节我提出了一个算法,该算法在klog(k)
倍的元素总数中完成工作。即O(nk(log(k)))
同样在这种情况下,k比n小得多,所以它不会是n ^ 2(logn)(在k和n几乎相同的情况下)对吗?
答案 0 :(得分:2)
嗯,不,这不一样。如果k
是复杂性表达式中的变量(而不是常量),那么O(nk(log(k))) > O(n(log(k)))
。
这是因为没有常数C
,Cn(log(k)) > kn(log(k))
每 n, k
。
答案 1 :(得分:1)
您描述问题的方式k
和n
都是输入参数。如果是这种情况,则问题的答案是
'不,O(n*k *log(k))
与O(n*log(k))
'不同。
不难看出第一个比第二个增长得快,但如果你修复n.
的值,则更加明显。考虑n开始一个常数说1
。比较明显的是O(k*log(k))
与O(log(k))
不同。