Two Tricks
for the Art of Computing workshop @CSA, IISc · 17 Feb 2024
Neeldhara Misra
(b) The Reds Speak Up
(a) The Rigged Bits
Two Tricks
I have a function \(f\) that takes a 16-bit string as input & produces a number between 0 and 15 as output.
You give me a string \(s \in \{0,1\}^{16}\) and a number \(n \in \{0,...,15\}\).
It will turn out that \(f(s) = n\).
I have a function \(f\) that takes a 16-bit string as input & produces a number between 0 and 15 as output.
You give me a string \(s \in \{0,1\}^{16}\) and a number \(n \in \{0,...,15\}\).
It will turn out that \(f(t) = n\).
I will flip one bit in \(s\) to get \(t\).
Think of the bit string of length 16 as being written out in a \(4 \times 4\) grid.
What does the function \(f\) do?
Think of the bit string of length 16 as being written out in a \(4 \times 4\) grid.
\(f\) can be thought of as writing out four bits.
Think of the bit string of length 16 as being written out in a \(4 \times 4\) grid.
\(f\) can be thought of as writing out four bits.
Think of the bit string of length 16 as being written out in a \(4 \times 4\) grid.
\(f\) can be thought of as writing out four bits.
Think of the bit string of length 16 as being written out in a \(4 \times 4\) grid.
\(f\) can be thought of as writing out four bits.
Think of the bit string of length 16 as being written out in a \(4 \times 4\) grid.
\(f\) can be thought of as writing out four bits.
Think of the bit string of length 16 as being written out in a \(4 \times 4\) grid.
\(f\) can be thought of as writing out four bits.
Think of the bit string of length 16 as being written out in a \(4 \times 4\) grid.
\(f\) can be thought of as writing out four bits.
Think of the bit string of length 16 as being written out in a \(4 \times 4\) grid.
\(f\) can be thought of as writing out four bits.
Think of the bit string of length 16 as being written out in a \(4 \times 4\) grid.
\(f\) can be thought of as writing out four bits.
Think of the bit string of length 16 as being written out in a \(4 \times 4\) grid.
\(f\) can be thought of as writing out four bits.
Think of the bit string of length 16 as being written out in a \(4 \times 4\) grid.
\(f\) can be thought of as writing out four bits.
\(f(\)
\() = 12.\)
Think of the bit string of length 16 as being written out in a \(4 \times 4\) grid.
\(f\) can be thought of as writing out four bits.
\(f(\)
\() = 7.\)
WANT:
Think of the bit string of length 16 as being written out in a \(4 \times 4\) grid.
\(f(\)
\() = 7.\)
WANT:
\(f\) current:
\(f\) desired:
Think of the bit string of length 16 as being written out in a \(4 \times 4\) grid.
\(f(\)
\() = 7.\)
WANT:
\(f\) current:
\(f\) desired:
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