in reply to Re^3: Completeness of Devel::Size answers
in thread Completeness of Devel::Size answers
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."
|
|---|
| Replies are listed 'Best First'. | |
|---|---|
|
Re^5: Completeness of Devel::Size answers
by BrowserUk (Patriarch) on Sep 23, 2008 at 12:17 UTC | |
|
Re^5: Completeness of Devel::Size answers
by moritz (Cardinal) on Sep 23, 2008 at 11:26 UTC | |
|
Re^5: Completeness of Devel::Size answers
by Perlbotics (Archbishop) on Sep 23, 2008 at 19:10 UTC |