The OEIS mourns the passing of Jim Simons and is grateful to the Simons Foundation for its support of research in many branches of science, including the OEIS.
login
The OEIS is supported by the many generous donors to the OEIS Foundation.

 

Logo
Hints
(Greetings from The On-Line Encyclopedia of Integer Sequences!)
A306522 Number of simple directed cycles in the binary de Bruijn graphs of order n. 3
3, 6, 19, 179, 30176, 1202267287 (list; graph; refs; listen; history; text; internal format)
OFFSET
1,1
COMMENTS
The numbers are computed empirically by the C++ program below. For n=7, the value is > 144*10^15 (the number of Hamiltonian cycles, A016031).
LINKS
EXAMPLE
For n=1, the cycles are (0), (1) and (0, 1).
For n=2, they are (00), (00, 01, 10), (00, 01, 11, 10), (01, 10), (01, 11, 10), (11).
PROG
(C++)
#include <iostream>
#include <vector>
// DFS for binary de Bruijn graph. Count cycles starting at start, and
// don't visit cycles with nodes v < start, to avoid double counting
// any cycle.
uint64_t cycles_visit(uint64_t mask, uint64_t start, uint64_t v, std::vector<char>& visited) {
visited[v] = true;
const uint64_t neighbors[2] = { (v << 1) & mask, ((v << 1) & mask) | 1 };
uint64_t count = 0;
for(uint64_t n : neighbors) {
if(n < start) continue;
if(visited[n]) {
if(n == start)
++count;
} else {
count += cycles_visit(mask, start, n, visited);
}
}
visited[v] = false;
return count;
}
int main(int argc, char *argv[]) {
if(argc != 2) {
std::cerr << "Usage: " << argv[0] << " k\n";
return 1;
}
const unsigned k = std::atoi(argv[1]);
const uint64_t mask = ((uint64_t)1 << k) - 1;
if(k == 1) { // Optimization below does not work for k==1
std::cout << 3 << '\n';
return 0;
}
std::vector<char> visited(mask+1, false);
// Cycles starting with 0...01
uint64_t total = cycles_visit(mask, 1, 1, visited);
// Cycles containing 0...0 also contain 0...01, except for the self loop 0...0
total += total + 1;
// Start from all other nodes
for(uint64_t v = 2; v < mask; ++v) {
total += cycles_visit(mask, v, v, visited);
}
total += 1; // self loop 1...1
std::cout << total << '\n';
return 0;
}
(Python)
import networkx as nx
def deBruijn(n): return nx.MultiDiGraph(((0, 0), (0, 0))) if n==0 else nx.line_graph(deBruijn(n-1))
def A306522(n): return sum(1 for c in nx.simple_cycles(deBruijn(n))) # Pontus von Brömssen, Jun 28 2021
CROSSREFS
Cf. A016031.
Sequence in context: A365119 A269306 A326317 * A290784 A355605 A356912
KEYWORD
nonn,hard,more
AUTHOR
Guillaume Marçais, Feb 21 2019
STATUS
approved

Lookup | Welcome | Wiki | Register | Music | Plot 2 | Demos | Index | Browse | More | WebCam
Contribute new seq. or comment | Format | Style Sheet | Transforms | Superseeker | Recents
The OEIS Community | Maintained by The OEIS Foundation Inc.

License Agreements, Terms of Use, Privacy Policy. .

Last modified May 16 20:35 EDT 2024. Contains 372555 sequences. (Running on oeis4.)