NAME
Algorithm::BinPack - efficiently pack items into bins
SYNOPSIS
Algorithm::BinPack
efficiently packs items into bins. The bins are given a maximum size, and the items are packed in with as little empty space as possible.
my $bp = Algorithm::BinPack->new(binsize => 4);
$bp->add_item(label => "one", size => 1);
$bp->add_item(label => "two", size => 2);
$bp->add_item(label => "three", size => 3);
$bp->add_item(label => "four", size => 4);
for ($bp->pack_bins) {
print "Bin size: ", $_->{size}, "\n";
print " Item: ", $_->{label}, "\n" for @{ $_->{items} };
}
METHODS
- new
-
Creates a new
Algorithm::BinPack
object. The maximum bin size is specified as a named argument, and is required.my $bp = Algorithm::BinPack->new(binsize => 4);
- add_item
-
Adds an item to be packed into a bin. Required named arguments are 'label' and 'size', but any others can be specified, and will be saved.
$bp->add_item(label => 'one', size => 1); $bp->add_item(label => 'two', size => 2, desc => 'The second numeral'); $bp->add_item(qw(label three size 3)); $bp->add_item(qw(label four size 4 random key));
- pack_bins
-
Packs the items into bins. This method tries to leave as little empty space in each bin as possible. It returns a list of hashrefs with the key 'size' containing the total bin size, and 'items' containing an arrayref holding the items in the bin. Each item is in turn a hashref containing the keys 'label', 'size', and any others added to the item.
for my $bin ($bp->pack_bins) { print "Bin size: ", $bin->{size}, "\n"; for my $item (@{ $bin->{items} }) { printf " %-6s %-20s\n", $_, $item->{$_} for keys %{ $item }; print " ---\n"; } }
SEE ALSO
This module implements the bin packing algorithm described in 'The Algorithm Design Manual' by Steven S. Skiena.
This module is similar to Algorithm::Bucketizer, but using a different algorithm. I couldn't see a clean way to add this algorithm to Algorithm::Bucketizer, and figured it could use a name that's more well-known (searching for variations on "bin packing" finds more relevant results than variations on "bucketizer").
AUTHOR
Carey Tilden <revdiablo@wd39.com>
COPYRIGHT AND LICENSE
Copyright (C) 2004 by Carey Tilden
This code is dual licensed. You may choose from one of the following: - http://creativecommons.org/licenses/by/1.0/ - http://d.revinc.org/pages/license
1 POD Error
The following errors were encountered while parsing the POD:
- Around line 129:
You forgot a '=back' before '=head1'