# Quantum walk search

In the context of quantum computing, the quantum walk search is a quantum algorithm for finding a marked node in a graph.
The concept of a quantum walk is inspired by classical random walks, in which a walker moves randomly through a graph or lattice. In a classical random walk, the position of the walker can be described using a probability distribution over the different nodes of the graph. In a quantum walk, on the other hand, the walker is represented by a quantum state, which can be in a superposition of several locations simultaneously.
Search algorithms based on quantum walks have the potential to find applications in various fields, including optimization, machine learning, cryptography, and network analysis. The efficiency and probability of success of a quantum walk search depend heavily on the structure of the search space. In general, quantum walk search algorithms offer an asymptotic quadratic speedup similar to that of Grover's algorithm.
One of the first works on the application of quantum walk to search problems was proposed by Neil Shenvi, Julia Kempe, and K. Birgitta Whaley.

## Classical problem description

Given a search space $X$ and a subset $M\subseteq X$ which contains the marked elements, a probabilistic search algorithm samples an element $x\in X$ uniformly at random at each step, until it finds a marked element from $M$. If we define $\epsilon =|M|/|N|$ as the fraction of marked elements, a procedure of that kind must be repeated $O(1/\epsilon )$ times to find a marked element.
If we have information about the structure of $X$ we can model it as a graph $G(V,E)$, where every vertex $V=\{v_{1},\dots ,v_{n}\}$ represents a sample from the search space with $|X|=n$, while the edges represent the conditional probability to sample the next element starting from the current sample.
We perform a search by starting from a random vertex $v_{1}$and, if it does not belong to $M$, we sample the next vertex $v_{2}$ among the ones connected to $v_{1}$. This procedure is known as random walk search. To have a probability close to $1$ to find the marked node, we need to take asymptotically $O(1/\epsilon \delta )$ steps on the graph, where the parameter $\delta$ is the spectral gap associated to the stochastic matrix $P$ of the graph.
To assess the computational cost of a random walk algorithm, one usually divides the procedure into three sub-phases such as Setup, Check, and Update, and analyses their cost.

### Setup

The setup cost $S$ refers to the initialization of the stationary distribution over the vertices of the graph.

### Update

The update cost $U$ is the cost to simulate a transition on the graph according to the transition probability defined in $P$.

### Check

The check cost $C$ is the cost to verify if the current element belongs to the set $M$.
The total cost of a random walk search algorithm is $S+{\frac {1}{\epsilon }}{\biggl{\frac {1}{\delta }}U+C{\biggr )}$. The greedy version of the algorithm, where the check is performed after every step on the graph has a complexity of $S+{\frac {1}{\epsilon \delta }}{\bigglU+C{\biggr )}$. The presence of the spectral gap term $\delta$ in the cost formulation can be thought of as the minimum number of steps that the walker must perform to reach the stationary distribution. This quantity is also known as mixing time.

## Algorithm description

The quantum walk search algorithm was first proposed by Magniez et al., also known as MNRS algorithm, and is based on the quantum walk formulation proposed by Mario Szegedy. The walk is performed on the directed edges of the graph so to represent the quantum state associated with the search space we need two quantum registers $|i\rangle |j\rangle$, which correspond to the edge from $v_{i}$ to $v_{j}$. To easily understand how it works, the algorithm can be explained through its geometric interpretation. We first define $|p_{i}\rangle =\sum _{j}{\sqrt {P_{ij}}}|j\rangle$ as the uniform superposition over the neighbours of $|i\rangle$. We additionally define the superposition over the marked and non-marked states, often referred to as the good and bad states, as
$|G\rangle ={\frac {1}{\sqrt {|M|}}}\sum _{i\in M}|i\rangle |p_{i}\rangle$ and $|B\rangle ={\frac {1}{\sqrt {X-|M|}}}\sum _{i\not \in M}|i\rangle |p_{i}\rangle$
where $M$ is the set of marked elements. The uniform superposition over all the edges $U$ can be viewed a combination of good and bad states.
$|U\rangle ={\frac {1}{\sqrt {X}}}\sum _{i\in X}|i\rangle |p_{i}\rangle =\sin(\theta )|G\rangle +\cos(\theta )|B\rangle$ with $\theta =\arcsin({\sqrt {\epsilon }})$.
The algorithm is composed of the following steps:
* Initialize the quantum state with $|U\rangle$, usually it is done by some state preparation routine.
* Repeat for $O(1/{\sqrt {\epsilon }})$:
** Perform a reflection through $|B\rangle$
** Perform a reflection through $|U\rangle$
* Measure the first quantum register and check if it is marked
Since the way the algorithm finds a marked element is based on the amplitude amplification technique, the proof of correctness is similar to the one of Grover's algorithm (which can also be viewed as a special case of a quantum walk on a fully connected graph ). The two reflections through $|U\rangle$ and $|B\rangle$ exhibit the effect of moving the quantum state toward the good state. After $k$ applications of the reflections the state can be written as $\sin((2k+1)\theta )|G\rangle +\cos((2k+1)\theta )|B\rangle$, and by setting $k\thickapprox {\frac {\pi }{4\theta }}=O(1/{\sqrt {\epsilon }})$ we have that $\sin((2k+1)\theta )\thickapprox 1$ which yields the good state with a high probability.

### First reflection

The first reflection has the effect of checking if the current vertex is marked and applying a phase shift equal to $-1$ if it is so. This is a common procedure in many quantum algorithms based on amplitude amplification and can be realized through a quantum oracle function that verifies the condition $|i\rangle \in M$.

### Second reflection

The second reflection is implemented with a quantum phase estimation over the walk operator $W$ which must reflect the structure of the graph we are exploring. The walk operator can be defined as $W=ref({\mathcal {B}})ref({\mathcal {A}})$ where $ref({\mathcal {B}})$ and $ref({\mathcal {A}})$ are two reflections through the subspaces ${\mathcal {A}}=span\{|i\rangle ,|p_{i}\rangle \}$ and ${\mathcal {B}}=span\{|p_{j}\rangle ,|j\rangle \}$. Since the eigenvalues of $W$ are on the form $e^{\pm 2i\theta }$and the operator has a unique eigenvalue equal to $1$ corresponding to $|U\rangle$ given by $\theta =0$, we can perform a phase estimation with precision $O(1/{\sqrt {\delta }})$ to find the unique eigenvalue. The precision of the reflection depends on the number of qubits used to estimate the phase.

### Complexity

With the same formalism used to estimate the cost of the classical random walk algorithm, the quantum costs can be summarised with:
* S: is the cost to initialize the superposition $|U\rangle$
* U: is the cost perform a step on the graph in superposition i.e. reflection through $|U\rangle$
* C: is the cost to implement the quantum oracle i.e. reflection through $|B\rangle$
The total cost of the quantum walk search is $S+{\frac {1}{\sqrt {\epsilon }}}{\biggl{\frac {1}{\sqrt {\delta }}}U+C{\biggr )}$, which results in a quadratic speedup compared to the classical version. Compared to Grover's algorithm quantum walks become advantageous in the presence of large data structures associated with each quantum state, since in the first case they are entirely rebuilt at each iteration while in walks they are only partially updated in each step.

## Hypercube example

This is an example of how to apply the quantum walk search on a hypercube graph.
Although in the original description Szegedy quantum walks are used, for this example we show the use of coined quantum walk as it is more intuitive to understand. In any case, the two formalizations turn out to be equivalent under specific assumptions.
The search space is a $n$-hypercube with $n=4$, it has $|V|=2^{4}$ vertices and it has a degree equal to $4$. Each node $v_{i}$ can be labeled with a binary string of $4$ bits and two nodes are connected by an edge if their Hamming distance is $1$. To set up the quantum walk search we need a coin register of dimension ${\mathcal {H}}^{n}$ to encode all the possible directions which a walker can choose and a vertex register of dimension ${\mathcal {H}}^{2^{n}}$to represent the vertices.
The computational basis is $|d\rangle |v\rangle$ with$\{d\in D=\{00,01,10,11\},v\in V=\{0000,0001,\dots ,1111\}\}$.
The walk is performed by two operators:
* Coin operator $C$ is used to create the superposition over the possible directions
* Shift operator $S$ is used to take a step in the graph according to one direction
Thus, the walk operator is $W=SC$.
In the case of the hypercube graph, we can leverage the fact that the binary encoding of the vertices differ by only one bit for any couple of adjacent nodes to construct an efficient shift operator. The shift operator can be written as:
$S=\sum _{d=1}^{n}\sum _{v=1}^{n}|d\rangle |v\oplus e_{d}\rangle \langle d|\langle v|$
where $e_{d}$ is the $d$-basis for the hypercube ( if $n=4$ the basis are $\{0001,0010,0100,1000\}$). For the coin there are multiple choices such as the Grover coin or the Fourier coin, one can choose the Grover coin to have an equal superposition over all the directions.
The algorithm works as follows:
* Repeat for $O(1/{\sqrt {\epsilon }})$
** Initialise the counting register for the phase in superposition
** Perform a phase estimation on $W$ with $O(1/{\sqrt {\delta }})$ precision
** Mark an auxiliary qubit if the estimated phase is ${\tilde {\theta }}=0$
** Un-compute auxiliary data structure
* Measure the vertex register
The shift operator is a key factor to the implementation on an efficient quantum walk, while for certain families of graph such as toroids and lattices, the shift is known, for non-regular graph the design of an effective shift operator is still an open challenge.

## Applications

The following applications are based on quantum walk on Johnson graph $J(n,k)$.

### Element distinctness

Given a function $f$ defined on $\{n\}$, it asks to find two distinct elements $i,j\in \{n\}$ such that $f(i)=f(j)$ if there exist such a pair.

### Matrix product verification

Given three $n\times n$ matrices $A,B$ and $C$, the problem asks to verify if $AB=C$ or otherwise find the indices $i,j$ such that $(AB)_{i,j}\neq C_{i,j}$.

### Triangle

A triangle is a complete subgraph on three vertices part of an undirected graph $G$. Given the adjacent matrix of a graph the problem asks to find a triangle if there is any.