码迷,mamicode.com
首页 > 其他好文 > 详细

TOP N问题的若干实现

时间:2014-07-16 18:18:57      阅读:211      评论:0      收藏:0      [点我收藏+]

标签:style   blog   color   使用   for   问题   

问题描述:在长度为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)

 

 

TOP N问题的若干实现,布布扣,bubuko.com

TOP N问题的若干实现

标签:style   blog   color   使用   for   问题   

原文地址:http://www.cnblogs.com/stormli/p/topn.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!