Algorithm-BIT-XS

 view release on metacpan or  search on metacpan

lib/Algorithm/BIT/XS.pm  view on Meta::CPAN

=head1 NAME

Algorithm::BIT::XS - Binary indexed trees / Fenwick trees

=head1 SYNOPSIS

  use Algorithm::BIT::XS;
  my $bit = Algorithm::BIT::XS->new(100);
  $bit->update(1, 5);  # bit[1] += 5
  $bit->update(3, 6);  # bit[3] += 6
  say 'bit[1..2]  == ', $bit->query(2);  # 5
  say 'bit[1..3]  == ', $bit->query(3);  # 11
  say 'bit[1..20] == ', $bit->query(20); # 11

  $bit->update(3, 10); # bit[3] += 10
  say 'bit[1..3]  == ', $bit->query(3);  # 21
  say 'bit[3] == ', $bit->get(3); # 16

  $bit->set(3, 10); # bit[3] = 10
  say 'bit[3] == ', $bit->get(3); # 10

  $bit->clear;
  say 'bit[1..100] == ', $bit->query(100); # 0
  $bit->set(100, 5);
  say 'bit[1..100] == ', $bit->query(100); # 5

=head1 DESCRIPTION

A binary indexed tree is a data structure similar to an array of integers.
The two main operations are updating an element and calculating a
prefix sum, both of which run in time logarithmic in the size of the tree.

=over

=item Algorithm::BIT::XS->B<new>(I<$len>)

lib/Algorithm/BIT2D/XS.pm  view on Meta::CPAN

=head1 NAME

Algorithm::BIT2D::XS - 2D Binary indexed trees / Fenwick trees

=head1 SYNOPSIS

  use Algorithm::BIT2D::XS;
  my $bit = Algorithm::BIT2D::XS->new(100, 100);
  $bit->update(1, 2, 5);  # bit[1][2] += 5
  $bit->update(3, 3, 6);  # bit[3][3] += 6
  say 'bit[1..2][1..10]  == ', $bit->query(2, 10);  # 5
  say 'bit[1..3][1..2]   == ', $bit->query(3, 2);  # 5
  say 'bit[1..20][1..10] == ', $bit->query(20, 10); # 11

  $bit->update(3, 1, 10); # bit[3][1] += 10
  say 'bit[1..3][1..3]  == ', $bit->query(3, 3);  # 21
  say 'bit[3][3] == ', $bit->get(3, 3); # 6

  $bit->set(3, 3, 10); # bit[3][3] = 10
  say 'bit[3][3] == ', $bit->get(3, 3); # 10

  $bit->clear;
  say 'bit[1..100][1..10] == ', $bit->query(100, 10); # 0
  $bit->set(100, 10, 5);
  say 'bit[1..100][1..10] == ', $bit->query(100, 10); # 5

=head1 DESCRIPTION

A binary indexed tree is a data structure similar to an array of integers.
The two main operations are updating an element and calculating a
prefix sum, both of which run in time logarithmic in the size of the tree.

=over

=item Algorithm::BIT2D::XS->B<new>(I<$n>, I<$m>)



( run in 0.352 second using v1.01-cache-2.11-cpan-d7a12ab2c7f )