--- "Shishir K. Singh" <[EMAIL PROTECTED]> wrote:
> Is there something wrong with this algo ??

Yes, it isn't valid perl.  You didn't debug yours either,
did you?  :P  Anyway, yes there is a problem... I think.
What happens if your timeslices overlap?  E.g.

my @start = (25, 10,  5);
my @stop  = (40, 35, 30);

I don't think your algorithm produces the correct
results, and there is no provision to fix this... I'm
more in a algorithm writing mood rather than a algorithm
validating mood.  Can you comment please?

Jonathan Paton

> ####################################################
>  my @start = (3,4, 15, 23, 29, 34, 37);
>  my @stop  = (5,10,20, 29, 33, 36, 37);
> 
>  # Assuming that the start and the stop array have the
>  # same number of elements and each start corresponds with
>  # each stop
> 
>  my $i = 0;
>  my $hash{$start[0]} = $stop[0];
>  my $refStart = $start[0];
>  my $refStop  = $stop[0];
> 
>  for ($i = 1; $i <= $#start; $i++) {
>      if ($refStop >= $start[$i]) {
>         $refStop = $stop[$i];
>         $hash{$refStart} = $stop[$i];
>      } else {
>         $refStart = $start[$i];
>         $refStop  = $stop[$i];
>         $hash{$refStart} = $stop[$i];
>      }
>  }
> 
> foreach (sort { $a <=> $b } keys %hash) {
>    print $_, "   ", $hash{$_}, "\n";
> }
> ######################################################
> -----Original Message-----
> From: Jonathan E. Paton [mailto:[EMAIL PROTECTED]]
> Sent: Friday, May 31, 2002 1:58 PM
> To: [EMAIL PROTECTED]
> Subject: RE: union of times algorithm
> 
> 
>  --- [EMAIL PROTECTED] wrote:
> >     What we have is as stated a union of times. So all I do is take the
> > timeslices and generate a hash element for each time. I don't check to see
> > if it is already there, but just set to one. Then I sort the hash down
> > numerically and total where current minus previous equal 1.  Here is a shot:
> > 
> > use Data::Dumper;
> > 
> > my @timeslices = (
> >     [4, 9],
> >     [3, 6],
> >     [2, 4],
> >     [11,12],
> >     [14,14],
> >     [17,19]
> > );
> > 
> > my %MyHashCounts = ();
> > 
> > for(my $MyId=0;$MyId<=$#timeslices;$MyId++){
> >    for($MyId1=$timeslices[$MyId][0];$MyId1<=$timeslices[$MyId][1];$MyId1++)
> > {
> >       $MyHashCounts{$MyId1}=1;
> >     }
> >  }
> > print Dumper(\@timeslices);
> > print Dumper(\%MyHashCounts);
> > 
> > my $MyPrev = -10;
> > my $MyTotal = 0;
> > foreach my $MyKeys (sort {$a <=> $b} keys %MyHashCounts) {
> >    printf "%3d ", $MyKeys;
> >    $MyTotal++ if ( ($MyKeys - $MyPrev) == 1 );
> >    $MyPrev = $MyKeys; 
> >  }
> > printf "\n";
> > printf "Total: %4d\n", $MyTotal;
> > 
> > Output:
> >   2   3   4   5   6   7   8   9  11  12  14  17  18  19
> > Total:   10
> 
> Which is wrong, since the 14 sneaked in even though the
> contribution of [14,14] should be zero.  Notice:
> 
>       0                 1                   2
>       1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0
> >     |    [4,      | 9], | |
> >     |  [3,    6], | | | | |
> >     |[2,| 4], | | | | | | |
> >     | | | | | | | | | |[11,
> >     | | | | | | | | | | | 12],
> >     | | | | | | | | | | | | |[14,
> >     | | | | | | | | | | | | | 14],
> >     | | | | | | | | | | | | | | | |[17, 
>       | | | | | | | | | | | | | | | | | |19]
>          X X X X X X X     X X         X X = 11
> 
> Looking at my algorithm, I can remove the use of the
> hash.
> 
> The algorithm you are using is inferiour to the approach
> I tried (even though BOTH our algorithms are wrong).  If
> I start using numbers in the region of Unix timestamps,
> (i.e. large) it is an impossible to satisfy memory/CPU hog.
> 
> The algorithm I use is pictorally:
> 
>      XXXXXXXXXXXXXXXXXXX
>                                 YYYYYYYYYYYYYYYYYYYYYYY
>                      ZZZZZZZZZZZZZZZZZZZZZZ
>      ^                          ^         ^
>      start X         ^          start Y   end Z       ^
>                      start Z                        end Y
>                        ^
>                        end X
> 
> Sorting results in the following events:
> 
>      ^start X
>                      ^start Z
>                        ^end X
>                                 ^start Y
>                                           ^end Z
>                                                        ^ end Y
> 
> And we can find the number of overlapping sections now:
> ACTIVE
> V
> 1    ^start X
> 12                   ^start Z
> 12                     ^end X
>  23                             ^start Y
>  2                                        ^end Z
>   3                                                    ^ end Y
> 
> So, by sorting we can loop through, starting and stopping "active"
> timeslots.  We need to do this in order, otherwise we will get
> incorrect results.  I sort the second column to always get a start
> event before a stop event.
> 
> Jonathan Paton
> 
> =====
> $_=q|.,&@$$. ,.@$&@$. .&$$@. ,,$ ....!$_=$p.'&$@.',y'&$@' ..,';for(/\S+/g){
> !|.q| .$ .,@, ,$, .,.. @, ,$ ,,@ ..,,.!++$.<22?${'y'.$_}=chr$.+64:[$$=${'y'
> !|.q| ,@$@&.,. $$$&, ..@&&$,,, $., ...!.$_},$y.=($.=~/22\|26\|3(3\|7)/x?' '
> !|.q|. @  ., ,.&,,, , .$..&. .,$  .,,!.$$:"\l$$")]};$y=~/ (.*)/;warn"$1\n"
> !|.q|. $ .,. .,$$&&$...&., @.,.&@$@ ..|,map{-$|--?$r:$p.=$_}split'!';eval$r
> 
> __________________________________________________
> Do You Yahoo!?
> Everything you'll ever need on one web page
> from News and Sport to Email and Music Charts
> http://uk.my.yahoo.com
> 
> -- 
> To unsubscribe, e-mail: [EMAIL PROTECTED]
> For additional commands, e-mail: [EMAIL PROTECTED]
> 
> 
> --
> To unsubscribe, e-mail: [EMAIL PROTECTED]
> For additional commands, e-mail: [EMAIL PROTECTED]
>  

=====
$_=q|.,&@$$. ,.@$&@$. .&$$@. ,,$ ....!$_=$p.'&$@.',y'&$@' .,';for(/\S+/g){
!|.q| .$ .,@, ,$, .,.. @, ,$ ,,@ .,,.!++$.<22?${'y'.$_}=chr$.+64:[$$=${'y'
!|.q| ,@$@&.,. $$$&, ..@&&$,,, $., ..!.$_},$y.=($.=~/22\|26\|3(3\|7)/x?' '
!|.q|. @  ., ,.&,,, , .$..&. .,$  .,,!.$$:"\l$$")]};$y=~/ (.*)/;warn"$1\n"
!|.q|. $ .,. .,$$&&$...&., @.,.&@$@ .|,map{-$|--?$r:$p.=$_}split'!';eval$r

__________________________________________________
Do You Yahoo!?
Everything you'll ever need on one web page
from News and Sport to Email and Music Charts
http://uk.my.yahoo.com

-- 
To unsubscribe, e-mail: [EMAIL PROTECTED]
For additional commands, e-mail: [EMAIL PROTECTED]

Reply via email to