每当A的大小达到了2*K之后,我们调用一次std::nth_element 取出它的topk,这样A的长度又变成K了。这样我们平均每K次插入会触发一次快速选择,插入的时间是O(1)*K=O(K),快速选择的时间是O(2K)=O(K),均摊到每个元素是O(1),于是算法的总时间复杂度是O(N),空间复杂度是O(2K)=O(K) 当然这里还有一些简单...
因为计算机执行起来需要时间因此,对于算法的质量,我们需要估计完成计算所需的时间。 然而,计算机消耗的时间是执行指令,因此我们估计的时间复杂度实际上是估计一个程序相对于其输入可以执行多少指令才能给出答案。 如果我们有n个输入,那么t(n)表示它执行的指令数,然后用t(n)乘以每条指令的执行时间就是实际消耗的时间。