Struct Hypergraph

Source
pub struct Hypergraph<N: Node, E: EdgeWeight, Ix: IndexType = u32> { /* private fields */ }
Expand description

A hypergraph structure where hyperedges can connect any number of vertices

A hypergraph is a generalization of a graph where edges (called hyperedges) can connect any number of vertices, not just two. This is useful for modeling complex relationships where multiple entities interact simultaneously.

Implementations§

Source§

impl<N: Node, E: EdgeWeight, Ix: IndexType> Hypergraph<N, E, Ix>

Source

pub fn new() -> Self

Create a new empty hypergraph

Source

pub fn add_node(&mut self, node: N)

Add a node to the hypergraph

Source

pub fn add_hyperedge(&mut self, nodes: HashSet<N>, weight: E) -> Result<usize>

Add a hyperedge connecting a set of nodes with a given weight

§Arguments
  • nodes - Set of nodes to connect
  • weight - Weight of the hyperedge
§Returns
  • The ID of the created hyperedge
Source

pub fn add_hyperedge_from_vec( &mut self, nodes: Vec<N>, weight: E, ) -> Result<usize>

Add a hyperedge from a vector of nodes (convenience method)

Source

pub fn remove_hyperedge( &mut self, hyperedge_id: usize, ) -> Result<Hyperedge<N, E>>
where N: Clone, E: Clone,

Remove a hyperedge by its ID

Source

pub fn nodes(&self) -> Iter<'_, N>

Get all nodes in the hypergraph

Source

pub fn hyperedges(&self) -> Vec<Hyperedge<N, E>>
where N: Clone, E: Clone,

Get all hyperedges in the hypergraph

Source

pub fn get_hyperedge(&self, hyperedge_id: usize) -> Option<Hyperedge<N, E>>
where N: Clone, E: Clone,

Get a specific hyperedge by its ID

Source

pub fn hyperedges_containing_node(&self, node: &N) -> Vec<Hyperedge<N, E>>
where N: Clone, E: Clone,

Get all hyperedges that contain a specific node

Source

pub fn neighbors(&self, node: &N) -> HashSet<N>
where N: Clone,

Get all nodes that are connected to a given node through some hyperedge

Returns all nodes that share at least one hyperedge with the given node

Source

pub fn node_count(&self) -> usize

Number of nodes in the hypergraph

Source

pub fn hyperedge_count(&self) -> usize

Number of hyperedges in the hypergraph

Source

pub fn has_node(&self, node: &N) -> bool

Check if the hypergraph contains a specific node

Source

pub fn has_hyperedge(&self, hyperedge_id: usize) -> bool

Check if the hypergraph contains a specific hyperedge

Source

pub fn degree(&self, node: &N) -> usize

Get the degree of a node (number of hyperedges it participates in)

Source

pub fn hyperedge_size(&self, hyperedge_id: usize) -> Option<usize>

Get the size of a hyperedge (number of nodes it connects)

Source

pub fn are_connected(&self, node1: &N, node2: &N) -> bool

Check if two nodes are connected (share at least one hyperedge)

Source

pub fn connecting_hyperedges(&self, node1: &N, node2: &N) -> Vec<usize>

Get the hyperedges that connect two specific nodes

Source

pub fn to_graph(&self) -> Graph<N, E, Ix>
where N: Clone, E: Clone + Zero + Add<Output = E>,

Convert to a regular graph by creating edges between all pairs of nodes that are connected by the same hyperedge

This creates the 2-section (or clique expansion) of the hypergraph

Source

pub fn incidence_matrix(&self) -> Array2<u8>
where N: Clone + Ord,

Get the incidence matrix of the hypergraph

Returns a matrix where rows represent nodes and columns represent hyperedges. Entry (i,j) is 1 if node i is in hyperedge j, 0 otherwise.

Source

pub fn is_uniform(&self) -> bool

Check if the hypergraph is uniform (all hyperedges have the same size)

Source

pub fn uniformity(&self) -> Option<usize>

Get the uniformity of the hypergraph (the common size if uniform, None otherwise)

Source

pub fn hyperedge_size_stats(&self) -> (usize, usize, f64)

Get statistics about hyperedge sizes

Source

pub fn maximal_cliques(&self) -> Vec<HashSet<N>>
where N: Clone,

Find all maximal cliques in the hypergraph

A maximal clique is a set of nodes that are all connected to each other and cannot be extended by adding another node while maintaining this property. In hypergraphs, this corresponds to finding maximal sets of nodes that all participate in some common hyperedge.

Source

pub fn from_graph(graph: &Graph<N, E, Ix>) -> Self
where N: Clone, E: Clone,

Create a hypergraph from a regular graph where each edge becomes a 2-uniform hyperedge

Trait Implementations§

Source§

impl<N: Node, E: EdgeWeight, Ix: IndexType> Default for Hypergraph<N, E, Ix>

Source§

fn default() -> Self

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

Auto Trait Implementations§

§

impl<N, E, Ix> Freeze for Hypergraph<N, E, Ix>

§

impl<N, E, Ix> RefUnwindSafe for Hypergraph<N, E, Ix>

§

impl<N, E, Ix> Send for Hypergraph<N, E, Ix>
where Ix: Send,

§

impl<N, E, Ix> Sync for Hypergraph<N, E, Ix>
where Ix: Sync,

§

impl<N, E, Ix> Unpin for Hypergraph<N, E, Ix>
where Ix: Unpin, N: Unpin, E: Unpin,

§

impl<N, E, Ix> UnwindSafe for Hypergraph<N, E, Ix>
where N: UnwindSafe, Ix: UnwindSafe, E: UnwindSafe,

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> 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> IntoEither for T

Source§

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 more
Source§

fn into_either_with<F>(self, into_left: F) -> Either<Self, Self>
where F: FnOnce(&Self) -> bool,

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 more
Source§

impl<T> Pointable for T

Source§

const ALIGN: usize

The alignment of pointer.
Source§

type Init = T

The type for initializers.
Source§

unsafe fn init(init: <T as Pointable>::Init) -> usize

Initializes a with the given initializer. Read more
Source§

unsafe fn deref<'a>(ptr: usize) -> &'a T

Dereferences the given pointer. Read more
Source§

unsafe fn deref_mut<'a>(ptr: usize) -> &'a mut T

Mutably dereferences the given pointer. Read more
Source§

unsafe fn drop(ptr: usize)

Drops the object pointed to by the given pointer. 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.
Source§

impl<V, T> VZip<V> for T
where V: MultiLane<T>,

Source§

fn vzip(self) -> V