> (dorun (take 20000000 (add-layer)))
>>
> take holds on to the head, because that is what it returns. Try changing
> take to drop.
>

Take is lazy though, and dorun should drop the head, so that shouldn't be a
problem.


The problem here is not an holding onto the head issue.  Lots of memory is
being used, because the algorithm requires lots of memory.
A breadth first search takes each level in the tree and makes a new level
by adding 3 nodes for each existing node.  So the original level has to
exist in memory at some point in order to do that.

When you get to the 2millionth element (not even the 20millionth element),
the strings are already 13 characters long.  To add an extra character to
each of those, then it will use 3^13 strings * 13 characters * (2 bytes per
character + some overhead) - this is at least 41mb.
By the 14th character, you are going to need at least 133mb.
By the 15th character, you are going to need at least 430mb.

This is just the cost of using a breadth-first search.

Either use a different type of search; get more memory and up the heap
size; or make a compact numeric of the strings, and map them back to
readable string form as a post-processing step.

-- 
Dave

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