Skip to content
This repository has been archived by the owner on Jan 30, 2023. It is now read-only.

Commit

Permalink
Random binomial uniform hypergraph
Browse files Browse the repository at this point in the history
  • Loading branch information
pelegm committed Nov 26, 2016
1 parent aa2bcc1 commit 42fde5b
Showing 1 changed file with 37 additions and 0 deletions.
37 changes: 37 additions & 0 deletions src/sage/graphs/hypergraph_generators.py
Original file line number Diff line number Diff line change
Expand Up @@ -176,4 +176,41 @@ def CompleteUniform(self, n, k):
from itertools import combinations
return IncidenceStructure(list(combinations(range(n),k)))

def RandomBinomialUniform(self, n, k, p, seed=None):
r"""
Return a random `k`-uniform hypergraph on `n` points, in which each
edge is inserted independently with probability `p`.
- ``n`` -- number of nodes of the graph
- ``k`` -- uniformity
- ``p`` -- probability of an edge
- ``seed`` -- integer seed for random number generator (default=None).
TESTS::
sage: set_random_seed(0)
sage: hypergraphs.RandomBinomialUniform(50, 3, 1).num_blocks()
19600
sage: hypergraphs.RandomBinomialUniform(50, 3, 0).num_blocks()
0
sage: hypergraphs.RandomBinomialUniform(50, 3, 0.2).num_blocks()
3926
"""
from sage.combinat.designs.incidence_structures import IncidenceStructure
from sage.misc.randstate import current_randstate
if seed is None:
seed = current_randstate().long_seed()
if p <= 0:
return IncidenceStructure(n, [])
if p >= 1:
return self.CompleteUniform(n, k)
from itertools import combinations
from sage.misc.prandom import random
edges = [e for e in combinations(range(n), k) if random() < p]
return IncidenceStructure(edges)


hypergraphs = HypergraphGenerators()

0 comments on commit 42fde5b

Please sign in to comment.