1..10 - interval and 2..5 - subinterval 4..7 - subinterval #### 1->0 2->1 3->1 4->2 5->2 6->1 7->1 8->0 9->0 10->0 #### #!/usr/bin/perl use Bit::Vector; use Data::Dumper; use strict; my @vecArray; my $x=0; while($x<4){ $vecArray[$x] = Bit::Vector->new(21); my $int = int(rand(21)); my $min = $int; my $max = $int<=20-5 ? $int+5 : $int; $vecArray[$x]->Interval_Fill($min,$max); $x++; } my $set1= Bit::Vector->new(21); $set1->Intersection($vecArray[0],$vecArray[2]); my $start = 0; while ($start < $set1->Size() and my ($min, $max) = $set1->Interval_Scan_inc($start)){ print $min . "-" . $max . "\n"; $start = $max+1 ; } #### |interval| = X |subinterval| = X/n (n- number of intervals) Y=X (Y - nubmber of subinterval sets) O(X^2) - not good if implemented naively