Struct XorBasis

Source
pub struct XorBasis { /* private fields */ }
Expand description

Basis of xor operation.

Implementations§

Source§

impl XorBasis

Source

pub fn new() -> Self

Create a empty space.

Source

pub fn reduce(&self, x: u64) -> (u64, u64)

Return (reduced basis, coordinate). Coordinate means if i-th bit is 1, x was reduced by i-th inserted basis.

Examples found in repository?
crates/competitive/src/algorithm/xorbasis.rs (line 27)
26    pub fn insert(&mut self, x: u64) -> bool {
27        let (y, coord) = self.reduce(x);
28        if y != 0 {
29            self.bases.push((y, coord, x));
30        }
31        y != 0
32    }
33    /// Return coordinate if element can be consisted by current basis.
34    pub fn find(&self, x: u64) -> Option<u64> {
35        let (y, coord) = self.reduce(x);
36        if y == 0 { Some(coord) } else { None }
37    }
38    /// Return coordinate if element can be consisted by current basis.
39    pub fn basis(&self, x: u64) -> Option<Vec<u64>> {
40        let (y, coord) = self.reduce(x);
41        if y == 0 {
42            Some(
43                self.bases
44                    .iter()
45                    .enumerate()
46                    .filter_map(|(i, (_, _, b))| {
47                        if coord & (1 << i) != 0 {
48                            Some(*b)
49                        } else {
50                            None
51                        }
52                    })
53                    .collect(),
54            )
55        } else {
56            None
57        }
58    }
Source

pub fn insert(&mut self, x: u64) -> bool

Return true if inserted element cannot be consisted by current basis and be added as a new basis. Return false if inserted element can be consisted by current basis.

Examples found in repository?
crates/competitive/src/algorithm/xorbasis.rs (line 64)
61    fn from_iter<T: IntoIterator<Item = u64>>(iter: T) -> Self {
62        let mut basis = XorBasis::default();
63        for x in iter {
64            basis.insert(x);
65        }
66        basis
67    }
Source

pub fn find(&self, x: u64) -> Option<u64>

Return coordinate if element can be consisted by current basis.

Source

pub fn basis(&self, x: u64) -> Option<Vec<u64>>

Return coordinate if element can be consisted by current basis.

Trait Implementations§

Source§

impl Clone for XorBasis

Source§

fn clone(&self) -> XorBasis

Returns a duplicate of the value. Read more
1.0.0 · Source§

fn clone_from(&mut self, source: &Self)

Performs copy-assignment from source. Read more
Source§

impl Debug for XorBasis

Source§

fn fmt(&self, f: &mut Formatter<'_>) -> Result

Formats the value using the given formatter. Read more
Source§

impl Default for XorBasis

Source§

fn default() -> XorBasis

Returns the “default value” for a type. Read more
Source§

impl FromIterator<u64> for XorBasis

Source§

fn from_iter<T: IntoIterator<Item = u64>>(iter: T) -> Self

Creates a value from an iterator. Read more

Auto Trait Implementations§

Blanket Implementations§

Source§

impl<T> Any for T
where T: 'static + ?Sized,

Source§

fn type_id(&self) -> TypeId

Gets the TypeId of self. Read more
Source§

impl<T> Borrow<T> for T
where T: ?Sized,

Source§

fn borrow(&self) -> &T

Immutably borrows from an owned value. Read more
Source§

impl<T> BorrowMut<T> for T
where T: ?Sized,

Source§

fn borrow_mut(&mut self) -> &mut T

Mutably borrows from an owned value. Read more
Source§

impl<T> CloneToUninit for T
where T: Clone,

Source§

unsafe fn clone_to_uninit(&self, dest: *mut u8)

🔬This is a nightly-only experimental API. (clone_to_uninit)
Performs copy-assignment from self to dest. Read more
Source§

impl<T> From<T> for T

Source§

fn from(t: T) -> T

Returns the argument unchanged.

Source§

impl<T, U> Into<U> for T
where U: From<T>,

Source§

fn into(self) -> U

Calls U::from(self).

That is, this conversion is whatever the implementation of From<T> for U chooses to do.

Source§

impl<T> ToOwned for T
where T: Clone,

Source§

type Owned = T

The resulting type after obtaining ownership.
Source§

fn to_owned(&self) -> T

Creates owned data from borrowed data, usually by cloning. Read more
Source§

fn clone_into(&self, target: &mut T)

Uses borrowed data to replace owned data, usually by cloning. Read more
Source§

impl<T, U> TryFrom<U> for T
where U: Into<T>,

Source§

type Error = Infallible

The type returned in the event of a conversion error.
Source§

fn try_from(value: U) -> Result<T, <T as TryFrom<U>>::Error>

Performs the conversion.
Source§

impl<T, U> TryInto<U> for T
where U: TryFrom<T>,

Source§

type Error = <U as TryFrom<T>>::Error

The type returned in the event of a conversion error.
Source§

fn try_into(self) -> Result<U, <U as TryFrom<T>>::Error>

Performs the conversion.