Hello everyone,

This has been a long-time software engineering issue that I've never
solved happily. It concerns implementing marking algorithms without
making a kludge of your software structure.

eg. Say I have a binary graph:
Where each node in the graph is like this:
class Node{
  Node[] children;
}

And now I'm going to implement another static function somewhere to
print out all the nodes in a graph, but without repeating elements.

This is the header:
void print(Node graph);

The print function must print out each node, and then recurse down
it's children. It also must have some way of remembering which Nodes
it has already printed so as not to print it again.

The simplest, and most performant way of doing this is to have a
special field in Node that indicates whether it has been visited or
not:

class Node{
  Node[] children;
  boolean visited;
}

The print function can then use this field to mark which nodes have
been visited.

However, the visited field has nothing to do with the actual Node
class. It's simply for other functions to use as a marker.

This solution is kludgy, but I cannot see any other *performant* way
of doing this. Hashmaps are out of the question because of the
unnecessary space waste.

If someone knows of a better way of implementing these "marking"
algorithms, or a nice way of organizing these "marker" fields, I would
love to hear your workarounds.

Thanks
 -Patrick

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