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