Data Structures and Algorithms

*De Bruijn Sequences*

*executive summary*

We present a card trick that is driven by the structure of De Bruijn sequences, which are circular bit sequences of length \(2^k\) where every bit string of length \(k\) appears as a subsequence.

We also show how we can use Euler Tours to create De Bruijn sequences.

__link to companion notes__

Any number of cut shuffles are done.

Five people pull out the top five cards in order.

A deck is given to someone in the audience.

The Reds Speak Up

The ones with red cards stand up.

All cards are identified.

The Card Identifier

X Y A B C

00 - ♣️ | 01 - ♠️ | 10 - ♦️ | 11 - ♥️

*Five bits correspond to a card*

A B C - value of the card (000 interpreted as 8)

The Sequence

Want: 32 bits so that each location gives us a unique read.

00000100101100111110001101110101

The Sequence

Want: 32 bits so that each location gives us a unique read.

00000100101100111110001101110101

The Sequence

Want: 32 bits so that each location gives us a unique read.

00000100101100111110001101110101

The Sequence

Want: 32 bits so that each location gives us a unique read.

00000100101100111110001101110101

The Sequence

Want: 32 bits so that each location gives us a unique read.

00000100101100111110001101110101

The Sequence

Want: 32 bits so that each location gives us a unique read.

00000100101100111110001101110101

The Sequence

Want: 32 bits so that each location gives us a unique read.

00000100101100111110001101110101

The Sequence

Want: 32 bits so that each location gives us a unique read.

00000100101100111110001101110101

The Sequence

Want: 32 bits so that each location gives us a unique read.

00000100101100111110001101110101

The Sequence

Want: 32 bits so that each location gives us a unique read.

00000100101100111110001101110101

The Sequence

Want: 32 bits so that each location gives us a unique read.

00000100101100111110001101110101

The Sequence

Want: 32 bits so that each location gives us a unique read.

00000100101100111110001101110101

The Sequence

Want: 32 bits so that each location gives us a unique read.

00000100101100111110001101110101

The Sequence

Want: 32 bits so that each location gives us a unique read.

00000100101100111110001101110101

The Sequence

Want: 32 bits so that each location gives us a unique read.

00000100101100111110001101110101

The Sequence

Want: 32 bits so that each location gives us a unique read.

00000100101100111110001101110101

The Sequence

Want: 32 bits so that each location gives us a unique read.

00000100101100111110001101110101

The Sequence

Want: 32 bits so that each location gives us a unique read.

00000100101100111110001101110101

The Sequence

Want: 32 bits so that each location gives us a unique read.

00000100101100111110001101110101

The Sequence

Want: 32 bits so that each location gives us a unique read.

00000100101100111110001101110101

The Sequence

Want: 32 bits so that each location gives us a unique read.

00000100101100111110001101110101

The Sequence

Want: 32 bits so that each location gives us a unique read.

00000100101100111110001101110101

The Sequence

Want: 32 bits so that each location gives us a unique read.

00000100101100111110001101110101

The Sequence

Want: 32 bits so that each location gives us a unique read.

00000100101100111110001101110101

The Sequence

Want: 32 bits so that each location gives us a unique read.

00000100101100111110001101110101

The Sequence

Want: 32 bits so that each location gives us a unique read.

00000100101100111110001101110101

The Sequence

Want: 32 bits so that each location gives us a unique read.

00000100101100111110001101110101

The Sequence

Want: 32 bits so that each location gives us a unique read.

00000100101100111110001101110101

The Sequence

Want: 32 bits so that each location gives us a unique read.

00000100101100111110001101110101

The Sequence

Want: 32 bits so that each location gives us a unique read.

00000100101100111110001101110101

The Sequence

Want: 32 bits so that each location gives us a unique read.

00000100101100111110001101110101

The Sequence

Want: 32 bits so that each location gives us a unique read.

00000100101100111110001101110101

The Sequence

Want: 32 bits so that each location gives us a unique read.

00000100101100111110001101110101

The Sequence

Want: 32 bits so that each location gives us a unique read.

00000100101100111110001101110101

The Sequence

Want: \(2^k\) bits so that each location gives us a unique read.

De Bruijn Sequences

Goal: build these sequences by taking an Euler Tour in a graph.

Vertices: one for each bit string of length \(k-1\).

Total # of vertices = \(2^{(k-1)}\).

00

11

01

10

\(a_1...a_{k-1}\)

\(b_1...b_{k-1}\)

When should you add this edge?

\(a_2...a_{k-1} = b_1...b_{k-2}\)

[Suffix-Prefix match.]

0

1

1

1

1

1

1

0

0

0

0

0

0

1

1

1

1

1

1

0

0

0

0

0

0

1

1

1

0

1

1

0

0

0

0

0

0

1

1

1

0

1

1

0

0

0

0

0

\(a_2\)

\(b_1\)

\(b_2\)

\(b_3\)

\(\cdots\)

\(b_{k-1}\)

\(a_1\)

\(a_3\)

\(\cdots\)

\(a_{k-2}\)

\(a_{k-1}\)

\(b_{k-1}\)

Any vertex has two out-neighbors.

\(a_2\)

\(b_1\)

\(b_2\)

\(b_3\)

\(\cdots\)

\(b_{k-1}\)

\(a_1\)

\(a_3\)

\(\cdots\)

\(a_{k-2}\)

\(a_{k-1}\)

\(b_{k-1}\)

Any vertex has two out-neighbors.

\(a_2\)

\(b_1\)

\(b_2\)

\(b_3\)

\(\cdots\)

\(b_{k-1}\)

\(a_1\)

\(a_3\)

\(\cdots\)

\(a_{k-2}\)

\(a_{k-1}\)

\(b_{k-1}\)

Any vertex has two in-neighbors.

\(a_2\)

\(b_1\)

\(b_2\)

\(b_3\)

\(\cdots\)

\(b_{k-1}\)

\(a_1\)

\(a_3\)

\(\cdots\)

\(a_{k-2}\)

\(a_{k-1}\)

\(b_{k-1}\)

Any vertex has two in-neighbors.

Vertices: one for each bit string of length \(k-1\).

Each vertex will have

two in-neighbors and two out-neighbors.

Total # of edges = \(2^{(k)}\).

Total # of vertices = \(2^{(k-1)}\).

00

11

01

10

00

11

01

10

00

11

01

10

0

0

00

11

01

10

0

0

1

00

11

01

10

0

0

1

0

00

11

01

10

0

0

1

0

1

00

11

01

10

0

0

1

0

1

1

00

11

01

10

0

0

1

0

1

1

1

00

11

01

10

0

0

1

0

1

1

1

0

00

11

01

10

0

0

1

0

1

1

1

0

00

11

01

10

0

0

1

0

1

1

1

0

00

11

01

10

0

0

1

0

1

1

1

0

#### DSA · De Bruijn Sequences and Euler Tours

By Neeldhara Misra

# DSA · De Bruijn Sequences and Euler Tours

- 283