pub struct BitwiseorConvolve<M> {
_marker: PhantomData<fn() -> M>,
}Fields§
§_marker: PhantomData<fn() -> M>Implementations§
Source§impl<M> BitwiseorConvolve<M>where
M: Monoid,
impl<M> BitwiseorConvolve<M>where
M: Monoid,
Sourcepub fn zeta_transform(f: &mut [M::T])
pub fn zeta_transform(f: &mut [M::T])
$$g(m) = \sum_{n \mid m}f(n)$$
Examples found in repository?
More examples
crates/competitive/src/math/subset_convolve.rs (line 27)
19 fn transform(t: Self::T, len: usize) -> Self::F {
20 let k = len.trailing_zeros() as usize;
21 let mut f = vec![vec![R::zero(); len]; k + 1];
22 for (i, t) in t.iter().enumerate() {
23 let f = &mut f[i.count_ones() as usize][i];
24 *f = R::add(f, t);
25 }
26 for f in f.iter_mut() {
27 BitwiseorConvolve::<R::Additive>::zeta_transform(f);
28 }
29 f
30 }Source§impl<G> BitwiseorConvolve<G>where
G: Group,
impl<G> BitwiseorConvolve<G>where
G: Group,
Sourcepub fn mobius_transform(f: &mut [G::T])
pub fn mobius_transform(f: &mut [G::T])
$$f(m) = \sum_{n \mid m}h(n)$$
Examples found in repository?
More examples
Trait Implementations§
Source§impl<R> ConvolveSteps for BitwiseorConvolve<R>
impl<R> ConvolveSteps for BitwiseorConvolve<R>
type T = Vec<<R as SemiRing>::T>
type F = Vec<<R as SemiRing>::T>
fn length(t: &Self::T) -> usize
fn transform(t: Self::T, _len: usize) -> Self::F
fn inverse_transform(f: Self::F, _len: usize) -> Self::T
fn multiply(f: &mut Self::F, g: &Self::F)
fn convolve(a: Self::T, b: Self::T) -> Self::T
Auto Trait Implementations§
impl<M> Freeze for BitwiseorConvolve<M>
impl<M> RefUnwindSafe for BitwiseorConvolve<M>
impl<M> Send for BitwiseorConvolve<M>
impl<M> Sync for BitwiseorConvolve<M>
impl<M> Unpin for BitwiseorConvolve<M>
impl<M> UnwindSafe for BitwiseorConvolve<M>
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