Pepijn de Vos had a blogpost about lazy sorts. One of them seems to be a
particularly good fit for this problem:
http://pepijndevos.nl/lazy-sorting/index.html (the heap-sort example seems
the fastest of those for this use-case...).

Em sexta-feira, 16 de setembro de 2011, Mark Engelberg escreveu:

> That's really no different from just sorting the list and taking the first
> 5.  O(n log(n)).
> And for really large data sets, this is going to consume a lot of memory.
>
> The method I outlined would be O(n) and doesn't force the sequence to all
> be resident in memory at the same time.
>
> On Fri, Sep 16, 2011 at 6:22 AM, Jim Oly 
> <james...@gmail.com<javascript:_e({}, 'cvml', 'james...@gmail.com');>
> > wrote:
>
>> Using PriorityQueue should give a good, fast result. Here's my
>> implementation:
>>
>> (defn smallest-n [n xs]
>>  (let [q (java.util.PriorityQueue. xs)]
>>    (for [i (range n)] (.poll q))))
>>
>> (smallest-n 5 (shuffle (range 100)))
>> ;; (0 1 2 3 4)
>>
>> Jim
>>
>> --
>> You received this message because you are subscribed to the Google
>> Groups "Clojure" group.
>> To post to this group, send email to 
>> clojure@googlegroups.com<javascript:_e({}, 'cvml', 
>> 'clojure@googlegroups.com');>
>> Note that posts from new members are moderated - please be patient with
>> your first post.
>> To unsubscribe from this group, send email to
>> clojure+unsubscr...@googlegroups.com <javascript:_e({}, 'cvml',
>> 'clojure%2bunsubscr...@googlegroups.com');>
>> For more options, visit this group at
>> http://groups.google.com/group/clojure?hl=en
>>
>
>  --
> You received this message because you are subscribed to the Google
> Groups "Clojure" group.
> To post to this group, send email to 
> clojure@googlegroups.com<javascript:_e({}, 'cvml', 
> 'clojure@googlegroups.com');>
> Note that posts from new members are moderated - please be patient with
> your first post.
> To unsubscribe from this group, send email to
> clojure+unsubscr...@googlegroups.com <javascript:_e({}, 'cvml',
> 'clojure%2bunsubscr...@googlegroups.com');>
> For more options, visit this group at
> http://groups.google.com/group/clojure?hl=en

-- 
You received this message because you are subscribed to the Google
Groups "Clojure" group.
To post to this group, send email to clojure@googlegroups.com
Note that posts from new members are moderated - please be patient with your 
first post.
To unsubscribe from this group, send email to
clojure+unsubscr...@googlegroups.com
For more options, visit this group at
http://groups.google.com/group/clojure?hl=en

Reply via email to