pub struct DoubleHasher { /* private fields */ }Expand description
Double hashing strategy for generating multiple hash values
Uses the formula: h_i(x) = (h1(x) + i * h2(x)) mod m where h1 and h2 are two independent hash functions.
Implementations§
Source§impl DoubleHasher
impl DoubleHasher
Sourcepub fn new() -> Self
pub fn new() -> Self
Create a new double hasher
§Examples
use yimi_rutool::algorithms::hash_functions::DoubleHasher;
let double_hasher = DoubleHasher::new();
let hashes = double_hasher.hash_multiple("hello", 5, 1000);
assert_eq!(hashes.len(), 5);Sourcepub fn with_algorithms(algo1: HashAlgorithm, algo2: HashAlgorithm) -> Self
pub fn with_algorithms(algo1: HashAlgorithm, algo2: HashAlgorithm) -> Self
Create a double hasher with specific algorithms
§Arguments
algo1- First hash algorithmalgo2- Second hash algorithm
Sourcepub fn hash_multiple<T: Hash + ?Sized>(
&self,
item: &T,
count: usize,
max_value: usize,
) -> Vec<usize>
pub fn hash_multiple<T: Hash + ?Sized>( &self, item: &T, count: usize, max_value: usize, ) -> Vec<usize>
Generate multiple hash values using double hashing
§Arguments
item- Item to hashcount- Number of hash values to generatemax_value- Maximum value for hash results (modulo operation)
§Examples
use yimi_rutool::algorithms::hash_functions::DoubleHasher;
let double_hasher = DoubleHasher::new();
let hashes = double_hasher.hash_multiple("test", 3, 100);
assert_eq!(hashes.len(), 3);
for &hash in &hashes {
assert!(hash < 100);
}Trait Implementations§
Auto Trait Implementations§
impl Freeze for DoubleHasher
impl RefUnwindSafe for DoubleHasher
impl Send for DoubleHasher
impl Sync for DoubleHasher
impl Unpin for DoubleHasher
impl UnwindSafe for DoubleHasher
Blanket Implementations§
Source§impl<T> BorrowMut<T> for Twhere
T: ?Sized,
impl<T> BorrowMut<T> for Twhere
T: ?Sized,
Source§fn borrow_mut(&mut self) -> &mut T
fn borrow_mut(&mut self) -> &mut T
Mutably borrows from an owned value. Read more
Source§impl<T> Instrument for T
impl<T> Instrument for T
Source§fn instrument(self, span: Span) -> Instrumented<Self>
fn instrument(self, span: Span) -> Instrumented<Self>
Source§fn in_current_span(self) -> Instrumented<Self>
fn in_current_span(self) -> Instrumented<Self>
Source§impl<T> IntoEither for T
impl<T> IntoEither for T
Source§fn into_either(self, into_left: bool) -> Either<Self, Self>
fn into_either(self, into_left: bool) -> Either<Self, Self>
Converts
self into a Left variant of Either<Self, Self>
if into_left is true.
Converts self into a Right variant of Either<Self, Self>
otherwise. Read moreSource§fn into_either_with<F>(self, into_left: F) -> Either<Self, Self>
fn into_either_with<F>(self, into_left: F) -> Either<Self, Self>
Converts
self into a Left variant of Either<Self, Self>
if into_left(&self) returns true.
Converts self into a Right variant of Either<Self, Self>
otherwise. Read moreSource§impl<T> Pointable for T
impl<T> Pointable for T
Source§impl<T> PolicyExt for Twhere
T: ?Sized,
impl<T> PolicyExt for Twhere
T: ?Sized,
Source§impl<R, P> ReadPrimitive<R> for P
impl<R, P> ReadPrimitive<R> for P
Source§fn read_from_little_endian(read: &mut R) -> Result<Self, Error>
fn read_from_little_endian(read: &mut R) -> Result<Self, Error>
Read this value from the supplied reader. Same as
ReadEndian::read_from_little_endian().