Crates.io | median-accumulator |
lib.rs | median-accumulator |
version | 0.4.0 |
source | src |
created_at | 2022-09-20 17:07:07.025091 |
updated_at | 2024-03-15 19:17:15.965558 |
description | Simple, fast, space-efficient, generic accumulator for computing median |
homepage | |
repository | https://git.txmn.tk/tuxmain/median-accumulator |
max_upload_size | |
id | 670041 |
size | 47,563 |
Simple, space-efficient algorithm to compute the median of an accumulation of elements.
O(1)
)O(D)
space, D being the number of different samples, not the total number of samplesO(log(N))
T: Clone + Ord
Faster than other implementations if lots of samples have the same value. If this is not your case, you should use another implementation.
use median_accumulator::*;
let mut acc = vec::MedianAcc::new();
assert_eq!(acc.get_median(), None);
acc.push(7);
assert_eq!(acc.get_median(), Some(MedianResult::One(7)));
acc.push(5);
assert_eq!(acc.get_median(), Some(MedianResult::Two(5, 7)));
acc.push(7);
assert_eq!(acc.get_median(), Some(MedianResult::One(7)));
If you ever encounter an unreachable
panic, please file an issue or send me an e-mail.
Example with smallvec: (smallvec
feature required)
use median_accumulator::*;
let mut acc = MedianAcc::<i32, smallvec::SmallVec<[(i32, u32); 64]>>::new();
For other collections than Vec
or SmallVec
, you must implement cc-traits and InsertIndex
.
CopyLeft 2022-2024 Pascal Engélibert (why copyleft?)
This program is free software: you can redistribute it and/or modify it under the terms of the GNU Affero General Public License as published by the Free Software Foundation, version 3 of the License.
This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU Affero General Public License for more details.
You should have received a copy of the GNU Affero General Public License along with this program. If not, see https://www.gnu.org/licenses/.