首页 > 代码库 > TOP N问题的若干实现
TOP N问题的若干实现
问题描述:在长度为n的序列中,找出其最大的N个数
1.冒泡排序
每冒泡一次,可将最大的数放到序列尾部,冒泡N次即可。
时间复杂度:O(N*n)
空间复杂度:O(1)
2.扫描数组,将最大的N个数存在缓存中,当有更大的数到来时替换缓存中的数
TOP_N(A,N) n = length of A create array T[N] = {-∞} t = 0 for i = 0, n-1 do if T[N-1] < A[i] then INSERT A[i] TO SORTED ARRAY T[]
时间复杂度:O(n*N)
空间复杂度:O(N)
可以考虑用最小堆代替缓存数组存储最大的N个数,这样当A[i] 大于堆顶元素时,使用A[i]代替堆顶元素,然后调整堆,复杂度为 O(n*lgN)
3.堆排序,优先级队列
构造一个堆,从堆顶取出N个元素
时间复杂度: O(n+N*lgn)
空间复杂度: O(1)
声明:以上内容来自用户投稿及互联网公开渠道收集整理发布,本网站不拥有所有权,未作人工编辑处理,也不承担相关法律责任,若内容有误或涉及侵权可进行投诉: 投诉/举报 工作人员会在5个工作日内联系你,一经查实,本站将立刻删除涉嫌侵权内容。