FWIW, I was stunned when I came across the following:
To detect cycles you can use two pointers -- say, p and q. You step p through the data in the usual way. You step q through the data twice for each step of p, until the end is met. If p equals q before the end, you have a loop.
The tricky bit in a recursive descent tree walk is to walk two pointers at once ! You need to build an iterator for q which contains at least a stack for recursion, and, for Perl, some way of iterating through a hash which isn't going to trip up p. (Of course, you have to guarantee that p and q will visit the nodes in the same order, especially where there is a loop !)
Apart from that minor difficulty, this trick only tells you there is a cycle. It doesn't tell you where it is.
"It's a good sort of brake. But it hasn't worked yet."
In reply to Re^4: Completeness of Devel::Size answers
by gone2015
in thread Completeness of Devel::Size answers
by gone2015
| For: | Use: | ||
| & | & | ||
| < | < | ||
| > | > | ||
| [ | [ | ||
| ] | ] |