The core of SeqPacker, written in Rust. This crate provides 11 bin-packing algorithms for packing variable-length sequences into fixed-size bins, reducing padding waste from 20-40% down to 1-5%.
Python bindings are available via the seqpacker PyPI package.
Quick Start
use ;
let packer = new
.with_strategy;
let sequences = vec!;
let result = packer.pack.unwrap;
println!;
println!;
Pack from lengths
use ;
let packer = new
.with_strategy;
let result = packer.pack_lengths.unwrap;
for pack in &result.packs
Streaming
For online / bounded-space packing, use StreamPacker with NextFit or Harmonic:
use ;
let mut stream = new;
let sequences = vec!;
for seq in sequences
// Flush remaining
for pack in stream.finish
Algorithms
11 bin-packing algorithms from O(n) online to near-optimal offline:
| Algorithm | Enum Variant | Time | Approx. Ratio | Best For |
|---|---|---|---|---|
| NextFit | NextFit |
O(n) | 2.0 | Memory-constrained streaming |
| FirstFit | FirstFit |
O(n log B) | 1.7 | Online baseline |
| BestFit | BestFit |
O(n log B) | 1.7 | Tighter online packing |
| WorstFit | WorstFit |
O(n log B) | 2.0 | Even distribution |
| FirstFitDecreasing | FirstFitDecreasing |
O(n log n) | 1.22 | Good offline default |
| BestFitDecreasing | BestFitDecreasing |
O(n log n) | 1.22 | Tighter offline packing |
| FirstFitShuffle | FirstFitShuffle |
O(n log n) | ~1.3 | Training randomness |
| ModifiedFFD | ModifiedFirstFitDecreasing |
O(n log n) | 1.18 | Mixed-size distributions |
| OptimizedBFD | OptimizedBestFitDecreasing |
O(n log n) | 1.22 | Default (recommended) |
| ParallelOBFD | OptimizedBestFitDecreasingParallel |
O(n log n) | 1.22 | Large datasets (multi-threaded) |
| Harmonic-K | Harmonic |
O(n) | ~1.69 | Bounded-space online |
Select an algorithm via PackStrategy:
use ;
let packer = new
.with_strategy;
Performance
SeqPacker achieves equal packing efficiency to competitors while being significantly faster:
| Comparison | Speedup | Efficiency |
|---|---|---|
| vs LightBinPack (C++) | ~1.2-1.5x faster | Equal (98.76%) |
| vs greedy_ffd (Python) | ~400x faster | Equal |
| vs binpacking (Python) | ~1,700x faster | Equal |
See the interactive benchmark dashboard for detailed results.
License
MIT