# Deterministic rendezvous problem

The deterministic rendezvous problem is a variant of the rendezvous problem where the players, or robots, must find each other by following a deterministic sequence of instructions. Although each robot follows the same instruction sequence, a unique label assigned to each robot is used for symmetry breaking. Typically, the robots act synchronously, though non-synchronous versions of the deterministic rendezvous problem exist.

## Overview

In the synchronous version of the deterministic rendezvous problem, both robots are initially placed at arbitrary nodes in a finite, connected, undirected graph. The size and structure of the graph is unknown to the robots.
The information known by a robot is as follows:
* T, the number of time steps since it has been activated
* d, the degree of the node currently occupied by the robot
* L, the label of the robot (typically taking the form of a bit string)
To solve the deterministic rendezvous problem, both robots must be given a sequence of deterministic instructions which allow the robots to use their known information to find each other. The robots are considered to have found each other if they are both occupying the same node in the graph during the same time step.

## Solutions

A number of algorithms exist to solve the deterministic rendezvous problem. Some of the solutions are listed below:

### Dessmark et al.

In 2006, Dessmark et al. presented a solution which solves the deterministic rendezvous problem in time proportional to O(n$^5$√(τl)+n$^{10}$l){\textstyle O\left(n^{5}{\sqrt {\tau l}}+n^{10}l\right)}, where:
* n is the number of nodes in the graph
* τ is the difference in activation time between the two robots
* l is the length of the shorter of the labels of the robots
This solution is not ideal, since τ is an input parameter of the deterministic rendezvous problem and can therefore be arbitrarily large.

### Kowalski and Malinowski

In 2008, Kowalski and Malinowski presented a solution which solves the problem in O(n$^{15}$+l$^3$){\textstyle O\left(n^{15}+l^{3}\right)} time. This is a significant improvement, since this time complexity is not dependent on τ. This solution has one major drawback, though. It makes use of backtracking, where the robots must keep track of each edge that they have traversed. This is a drawback because it places assumptions on the structure of the graph (namely, how it is labeled), and the robots' sensory and memory capabilities.

### Ta-Shma and Zwick

The solution presented by Ta-Shma and Zwick in 2014 solves the problem in O(n$^5$+l){\textstyle O\left(n^{5}+l\right)} time. In addition to the reduced time complexity (which doesn't rely on τ), this solution also doesn't use backtracking. Instead, it uses the notion of universal traversal sequences to help solve the problem.
A universal traversal sequence is a sequence of instructions comprising a graph traversal for any regular graph with a set number of vertices and for any starting vertex. Since the robots may not be in a regular graph, a universal traversal sequence for n nodes and degree d is used, where d is the maximum degree of the graph. Any instructions in the chosen universal traversal sequence which specify that the robot travels to a neighbor of the current node which doesn't exist (i.e., the current node has degree < d) are ignored. By doing this, all nodes in the graph with degree less than d are treated as having enough self-loops to bring their total degree up to d, effectively allowing the graph to be treated as regular for the purpose of universal traversals.
The basic idea of Ta-Shma and Zwick's solution is that if one of the robots completes a complete traversal of the graph while the other robot remains idle, or rests, then the two robots are guaranteed to meet. Since the size of the graph is unknown, the robots run universal traversal sequences for increasing values of n, while periodically resting. Whether a robot rests before or after a traversal depends upon the value of its label.
For example, one of the robots could run the sequence: $U_{1}0^{u_{1}}U_{2}0^{u_{2}}U_{4}0^{u_{4}}U_{8}0^{u_{8}}...U_{2^{i}}0^{u_{2^{i}}}...$ while the other robot runs the sequence: $0^{u_{1}}U_{1}0^{u_{2}}U_{2}0^{u_{4}}U_{4}0^{u_{8}}U_{8}...0^{u_{2^{i}}}U_{2^{i}}...$ where U$_i$ is a universal traversal sequence for a graph with i nodes, u$_i$ is the number of steps in that universal traversal sequence, and 0$^k$ represents k steps where the robot rests. The universal traversal sequence for the size of the actual graph will be run by one robot while the other rests for the number of steps in that traversal. However, this only works if the two robots are activated at the same time.
To cover the case where the robots are activated at different times, the sequence to run will include rest periods of length u$_i$ after each step (in the traversal and the rest period). For example, one of the robots would run the sequence: $\sigma _{1}0^{u_{1}-1}\sigma _{2}0^{u_{1}-1}\sigma _{3}0^{u_{1}-1}...\sigma _{u_{1}}0^{u_{1}-1}0^{2u_{1}}\pi _{1}0^{u_{2}-1}\pi _{2}0^{u_{2}-1}\pi _{3}0^{u_{2}-1}...\pi _{u_{2}}0^{u_{2}-1}0^{2u_{2}}$ where σ$_i$ is the ith step of U$_1$ and π$_i$ is the ith step of U$_2$.
In order to formally present the sequence that each robot will run, some additional notation is needed. Let:
* σ$^b$ = 0 if b = 0
* σ$^b$ = σ if b = 1
* ${\bar {L}}=1-L$
* $\sigma ^{m_{1}..m_{k}}=\sigma _{1}^{m}...\sigma _{k}^{m}$
* $D_{k}(\sigma _{1}...\sigma _{m})=\sigma _{1}0^{k}...\sigma _{m}0^{k}$
Assuming that one robot's label is 0 and that the other robot's label is 1, the sequence that each robot would run is: $D_{u_{1}-1}((U_{1}U_{1})^{L{\bar {L}}})D_{u_{2}-1}((U_{2}U_{2})^{L{\bar {L}}})...D_{u_{2^{k}}-1}((U_{2^{k}}U_{2^{k}})^{L{\bar {L}}})...$
The sub-sequence D$_{ui−1}$((U$_i$U$_i$)$^{LL¯}$){\textstyle D_{u_{i}-1}((U_{i}U_{i})^{L{\bar {L}}})} is known as a block and can be rewritten as D$_{ui−1}$((U$_i$U$_i$)$^L$(U$_i$U$_i$)$^{L¯}$){\textstyle D_{u_{i}-1}((U_{i}U_{i})^{L}(U_{i}U_{i})^{\bar {L}})}.
If σ = U$_i$ and m = u$_i$, the block can be further simplified to: $(\sigma _{1}0^{m-1}...\sigma _{m}0^{m-1}\sigma _{1}0^{m-1}...\sigma _{m}0^{m-1})^{L}$ $(\sigma _{1}0^{m-1}...\sigma _{m}0^{m-1}\sigma _{1}0^{m-1}...\sigma _{m}0^{m-1})^{\bar {L}}$ Both of the above lines are known as chunks. One chunk consists of a universal traversal sequence with interleaved rest periods, while the other chunk is a rest period of length 2m$^2$.
If the robot's label is 0, then each block it runs is equal to: $0^{2m^{2}}\sigma _{1}0^{m-1}...\sigma _{m}0^{m-1}\sigma _{1}0^{m-1}...\sigma _{m}0^{m-1}$ If the label is 1, then each block it runs is equal to: $\sigma _{1}0^{m-1}...\sigma _{m}0^{m-1}\sigma _{1}0^{m-1}...\sigma _{m}0^{m-1}0^{2m^{2}}$

#### Analysis

The sequence of instructions listed above will allow two robots with labels 0 and 1 to meet after O(n$^{2c}$) time steps.
Ta-Shma and Zwick show how to extend this solution to allow the robots to meet after only O(n$^c$) time steps and how to deal with arbitrary labels (which increases the time until the robots meet to O(n$^5$+l) time steps).