Algorithm-BitVector
view release on metacpan or search on metacpan
lib/Algorithm/BitVector.pm view on Meta::CPAN
$bv->close_file_handle();
The constructor call in the first statement opens a file handle for reading the bits.
It is this file handle that is closed by calling C<close_file_handle()>,
=back
=head3 count_bits()
=over 4
$bv = Algorithm::BitVector->new( intVal => 45, size => 16 );
print $bv->count_bits(); # 4
This method returns an integer value which is the number of bits set to 1 in the
bitvector on which the method is invoked.
=back
=head3 count_bits_sparse()
=over 4
Say you have a bitvector with two million bits:
$bv = Algorithm::BitVector->new( size => 2000000 );
and you happen to set its individual bits by
$bv->set_bit(345234, 1);
$bv->set_bit(233, 1);
$bv->set_bit(243, 1);
$bv->set_bit(18, 1);
$bv->set_bit(785, 1);
The following call returns the number of bits set in the bitvector:
print $bv->count_bits_sparse(); # 5
For very long bitvectors, as in the example here, this method will work much faster
than the C<count_bits()> method. However, for dense bitvectors, I expect
C<count_bits()> to work faster.
=back
=head3 deep_copy()
=over 4
$bv_copy = $bv->deep_copy();
Subsequently, any alterations to the bitvectors pointed to by either C<$bv> or
C<$bv_copy> will not affect the other.
=back
=head3 divide_into_two()
=over 4
($bv1, $bv2) = $bv->divide_into_two(); # say $bv = 0000000000101101
print "$bv1\n"; # 00000000
print "$bv2\n"; # 00101101
Divides an even sized bitvector into two bitvectors, each of size half of the
bitvector on which this method is invoked. Throws an exception when invoked on a
bitvector that is not even sized.
=back
=head3 gcd()
=over 4
This method uses the Euclid's algorithm to return the Greatest Common Divisor of the
integer values represented by the two bitvectors. The following example shows a call
to C<gcd()> returning the GCD of the integer values of the bitvectors C<$bv1> and
C<$bv2>.
$bv1 = Algorithm::BitVector->new( bitstring => '01100110' ); # 102
$bv2 = Algorithm::BitVector->new( bitstring => '011010' ); # 26
$gcd = $bv1->gcd( $bv2 ); # 10
print int($gcd); # 2
The result returned by C<gcd()> is a bitvector.
=back
=head3 gen_random_bits()
=over 4
$bv = Algorithm::BitVector->new( intVal => 0 );
$bv = $bv->gen_random_bits(16); # 1100111001010101
The call to C<gen_random_bits()> returns a bitvector whose bits are randomly
generated. The number of bits in the returned bitvector equals the argument integer.
=back
=head3 get_bit()
=over 4
This method gives you array-like access to the individual bits of a bitvector.
$bv = Algorithm::BitVector->new( bitstring => '10111' );
print $bv->get_bit(0); # 1 (the first bit)
print $bv->get_bit(1); # 0
print $bv->get_bit(4); # 1 (the last bit)
Negative values for the index scan a bitvector from right to left, with the C<-1>
index standing for the last (meaning the right-most) bit in the vector:
print $bv->get_bit(-1); # 1 (the last bit)
print $bv->get_bit(-2); # 1
print $bv->get_bit(-5); # 1 (the first bit)
The C<get_bit()> can also return a slice of a bitvector if the argument to the
method is an anonymous array of the index range you desire, as in the second
statement below:
( run in 0.632 second using v1.01-cache-2.11-cpan-483215c6ad5 )