It might not be if the sorted set is internally represented as a tree. Then
the smallest element with the leaf of the tree (if tree is balanced) and
that is not accessible in O(1) time.

---------- Forwarded message ----------
From: ataggart <alex.tagg...@gmail.com>
Date: Tue, Dec 8, 2009 at 6:22 PM
Subject: Re: Trouble implementing Dijkstra algorithm in Clojure
To: Clojure <clojure@googlegroups.com>




On Dec 8, 11:38 am, Mark Tomko <mjt0...@gmail.com> wrote:
> A priority queue implemented over a heap would be more efficient than
> a sorted set, in general.  With a heap, you have constant time access
> to the smallest (WLOG) element in the heap at all times.  Removing it
> costs a fixed O(lg n).  A sorted set (especially one that's being
> modified) isn't necessarily going to allow you to find the smallest in
> constant time, and it's still going to require you O(lg n) to do the
> removals.
>
> To the best of my knowledge, clojure nor clojure-contrib contain a
> heap implementation.  I wrote one myself as part of an exercise (I
> implemented a simple Huffman-coder), but I'm not sure it's release
> quality.  Otherwise, I'd be happy to donate it to contrib.  Maybe I'll
> try to clean it up and send it off for a review.
>
> Mark
>
> On Dec 7, 11:29 pm, ataggart <alex.tagg...@gmail.com> wrote:
>
>
>
> > On Dec 7, 4:19 pm, ajay <ajgop...@gmail.com> wrote:
>
> > > Hi all,
>
> > > I am new to FP in general and I am trying to pick up Clojure. I am
> > > having trouble thinking in FP terms.
>
> > > I am trying to implement the Dijkstra algorithm for shortest paths in
> > > Graph in Clojure. If this succeeds, I will implement all the advanced
> > > graph algos I am learning in this course in Clojure and post in
> > > online.
>
> > > My concerns regarding implementing Dijkstra in Clojure are following:
>
> > > 1. The way I've learnt Dijkstra, there is a distance array and we keep
> > > on updating it if we find a shorter path. Since, things are immutable,
> > > how do I do it?
>
> > You call functions that give you a new, modified version of the input
> > collection.
> > (conj [1 2 3] 4) ;=> [1 2 3 4]
>
> > And you can use atoms to hold a reference to a collection.  Just
> > depends on how you want to use them.
>
> > > 2. Does Clojure have a Priority Queue data structure inbuilt. I would
> > > need that for Dijkstra algorithm.
>
> > I think sorted-set or sorted-set-by should suffice.  If not, you could
> > make one or see if there's on in contrib somewhere.
>
> > > Thanks,
> > > Ajay G.

I would be very surprised if getting the first element from a sorted-
set wasn't ~O(1).

--
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<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