Home  |  Linux  | Mysql  | PHP  | XML
From:John W. Krahn Date:Sat Jun 27 17:46:28 2009
Subject:Re: help on example from "mastering algorithm with perl" on binary
search
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
Navigate in group perl.beginners at sever nntp.perl.org
Previous Next


Your recent visits
Re: Rendering data structures using CGI::Application
AW: AW: friend class in perl
Re: Traversing Hash printing two times
Re: Need help with Mail::Sender
Re: More compact way to write this



  
© No Copyright
You are free to use Anything, but please consult your advocate before doing so as this website
also list content from other sources which may be copyrighted.
Site Maintained by Zareef Ahmed
Powered By PHP Consultants