Algorithm 运行时间:使用选择排序查找k个最小元素
我想答案是Algorithm 运行时间:使用选择排序查找k个最小元素,algorithm,code-analysis,Algorithm,Code Analysis,我想答案是kn?但是当我试着画这棵树时,它看起来像 所以我一定是在更详细的分析中做错了什么?首先,你的工作列表有长度k+2,而它应该有长度k。我猜你的意思是从n到n-(k-1)=n-k+1 现在,如果你想对连续的数字求和,最简单的方法就是记住(或推导)公式 1 + 2 + ... + a = a(a+1)/2 用这个算出你想要的总数是 n(n+1)/2 - (n-k)(n-k+1)/2 = nk + (k-k^2)/2 正如你正确发现的。现在,想想大O。由于n>k,我们知道nk>k^2,所
kn
?但是当我试着画这棵树时,它看起来像
所以我一定是在更详细的分析中做错了什么?首先,你的工作列表有长度
k+2
,而它应该有长度k
。我猜你的意思是从n
到n-(k-1)=n-k+1
现在,如果你想对连续的数字求和,最简单的方法就是记住(或推导)公式
1 + 2 + ... + a = a(a+1)/2
用这个算出你想要的总数是
n(n+1)/2 - (n-k)(n-k+1)/2 = nk + (k-k^2)/2
正如你正确发现的。现在,想想大O。由于
n>k
,我们知道nk>k^2
,所以后一个术语实际上是一个较低的术语,整个事情是O(nk)
首先,你的工作列表有长度k+2
,而它应该有长度k
。我猜你的意思是从n
到n-(k-1)=n-k+1
现在,如果你想对连续的数字求和,最简单的方法就是记住(或推导)公式
1 + 2 + ... + a = a(a+1)/2
用这个算出你想要的总数是
n(n+1)/2 - (n-k)(n-k+1)/2 = nk + (k-k^2)/2
正如你正确发现的。现在,想想大O。因为n>k
,我们知道nk>k^2
,所以后一个术语实际上是一个较低的术语,整个事情就是O(nk)