Improve performance by replacing bit_vec with fixedbitset.
Before: test bench_solve_100 ... bench: 53,365 ns/iter (+/- 651) test bench_solve_1000 ... bench: 5,864,809 ns/iter (+/- 102,059) test bench_solve_2000 ... bench: 34,347,333 ns/iter (+/- 200,639) After: test bench_solve_100 ... bench: 41,574 ns/iter (+/- 765) test bench_solve_1000 ... bench: 4,693,452 ns/iter (+/- 189,201) test bench_solve_2000 ... bench: 29,954,973 ns/iter (+/- 438,573)
This commit is contained in:
parent
c61d7152a3
commit
856ea59d70
@ -8,4 +8,4 @@ description = "Kuhn-Munkres (aka Hungarian) algorithm for solving the Assignment
|
||||
keywords = ["algorithm"]
|
||||
|
||||
[dependencies]
|
||||
bit-vec = "*"
|
||||
fixedbitset = "0.1"
|
||||
|
@ -1,10 +1,10 @@
|
||||
use bit_vec::BitVec;
|
||||
use fixedbitset::FixedBitSet;
|
||||
|
||||
#[derive(Debug)]
|
||||
pub struct Coverage {
|
||||
n: usize,
|
||||
rows: BitVec,
|
||||
cols: BitVec,
|
||||
rows: FixedBitSet,
|
||||
cols: FixedBitSet,
|
||||
}
|
||||
|
||||
impl Coverage {
|
||||
@ -13,19 +13,19 @@ impl Coverage {
|
||||
pub fn new(n: usize) -> Coverage {
|
||||
Coverage {
|
||||
n: n,
|
||||
rows: BitVec::from_elem(n, false),
|
||||
cols: BitVec::from_elem(n, false),
|
||||
rows: FixedBitSet::with_capacity(n),
|
||||
cols: FixedBitSet::with_capacity(n),
|
||||
}
|
||||
}
|
||||
|
||||
#[inline]
|
||||
pub fn is_row_covered(&self, row: usize) -> bool {
|
||||
self.rows[row]
|
||||
self.rows.contains(row)
|
||||
}
|
||||
|
||||
#[inline]
|
||||
pub fn is_col_covered(&self, col: usize) -> bool {
|
||||
self.cols[col]
|
||||
self.cols.contains(col)
|
||||
}
|
||||
|
||||
#[inline]
|
||||
|
@ -17,7 +17,7 @@
|
||||
// * More test cases
|
||||
// * Non-square matrices
|
||||
|
||||
extern crate bit_vec;
|
||||
extern crate fixedbitset;
|
||||
|
||||
#[cfg(test)]
|
||||
extern crate test;
|
||||
|
Loading…
Reference in New Issue
Block a user