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