Sven Riedel wrote:
> letters "0" and "1". My tree-traversal algorithm looks like this:
>
> $bit_array = str_split( $bitstring );
> $tree_climber = $tree;                  // assign tree-climber to the
> tree root
>
> // main loop
> while( !is_null( $bit = array_shift( $bit_array ) ) ) {
>       $tree_climber = $tree_climber[$bit]; // going down...
>       if( !is_array( $tree_climber ) ) {   // we reached a node
>               process( $tree_climber );
>               $tree_climber = $tree;            // and back up to the root we go
>       }
> }
>
> I'm seeing execution times in excess of 30 seconds for a few hundred
> (~ 200 - 300 ) tree-runs (with the tree in question being of average
> depth 5, translating to 1000 - 1500 assignments, which is way to slow
> to be practical. And the main holdup _is_ the tree-traversal, the sum
> of the process() functions is in the range of 0.3 seconds (measured
> with microtime(true) ).

Have you tried using a profiler on the code?  APD might prove useful:

http://pecl.php.net/package/apd

This can show you exactly how much execution time is being spent in each function of
your code, whether user-defined or built in, and can list average execution times
per function, etc.

Personally it's been several years since I've toyed with binary trees (my second
semester of Pascal <grin>) and I can't tell for sure what's going on in what little
code you posted.  For example, I can't tell by what you posted if the array_shift()
above is necessary.  If you merely need to traverse $bit_array without actually
modifying it then I suspect a simple foreach would be much faster, but I'm probably
missing something...

If you have the time and the inclination you may want to post a link to your actual
working code...

-- 
PHP General Mailing List (http://www.php.net/)
To unsubscribe, visit: http://www.php.net/unsub.php

Reply via email to