rich lee wrote:
Hello everyone,

Hello,

I am trying to read "mastering algorithm with perl" and below example has me
bit stuck.
I understand everything except these 2 lines


            $low = $try + 1, next if $array->[$try] lt $word;
            $high = $try -1, next if $array->[$try] gt $word;

Those two lines are short for:

if ( $array->[ $try ] lt $word ) {
    $low = $try + 1;
    next;
    }
if ( $array->[ $try ] gt $word ) {
    $high = $try - 1;
    next;
    }


I understand what it's doing but I am not sure how they are being ran.
For example,  Let's say in one particular turn, $array->[$try] is greater
than $word...
I am trying to understand how it skips this line ---> $low = $try + 1, next
if $array->[$try] lt $word;

If $array->[$try] is greater than $word then it cannot be less than $word, or equal to $word at the same time.


when I look at above 2 lines, it looks like they should be processed
sequentially.  Meaning $low = $try + 1 should be processed everytime...and
$high=$try-1 should be
processed everytime....

No, only "if $array->[$try] lt $word" is processed every time.


In reality(after looking at the explanation), it should only lower or raise
when $array->[$try] is either less than(then it should raise the bottom) and
greater( should lower the top)
I think I am just not understanding the syntax on above 2 lines.. can
someone please describe it for me(or am i missing the precedence of the
relationship of the line??


$index = binary_search( \...@array, $word )

sub binary_search {
    my ($array, $word) = @_;
    my ($low, $high)    = ( 0, @$array - 1 );

    while ( $low <= $high ) {
            my $try = int( ($low+$high)/2 );
            $low = $try + 1, next if $array->[$try] lt $word;
            $high = $try -1, next if $array->[$try] gt $word;

            return $try; #we've found the word!
     }
     return;             #the word isn't there
}


John
--
Those people who think they know everything are a great
annoyance to those of us who do.        -- Isaac Asimov

--
To unsubscribe, e-mail: beginners-unsubscr...@perl.org
For additional commands, e-mail: beginners-h...@perl.org
http://learn.perl.org/


Reply via email to