# L (complexité)

En informatique théorique, et notamment dans la théorie de la complexité, la classe L est la classe des problèmes de décision décidés par une machine de Turing déterministe qui utilise un espace de taille logarithmique en fonction de la taille de l'entrée$^,$. Pour être plus précis, l'exigence sur l'espace de taille logarithmique se réfère à l'espace supplémentaire utilisable. Elle est aussi parfois notée LOGSPACE.
Intuitivement, cette classe contient les problèmes que l'on peut décider avec un nombre constant de pointeurs sur des cases mémoires de l'entrée du problème et un nombre constant de données supplémentaires (des compteurs dont les valeurs sont entre 0 et une grandeur polynomiale en la taille de l'entrée, des booléens, etc.).

## Définition formelle

Si l'on appelle ${\mbox{SPACE}}(t(n))$ l'ensemble de tous les problèmes qui sont décidés par des machines de Turing déterministes utilisant un espace $O(t(n))$ (en plus de l'entrée) pour une fonction $t$ en la taille de l'entrée $n$, alors on peut définir L formellement par :
${\mbox{L}}={\mbox{SPACE}}(\log(n))\ .$

## Exemples de problèmes
### Exemples de langages

Le langage $\{0^{k}1^{k}\mid k\in \mathbb {N} \}$ est dans L. Voici un algorithme qui décide $\{0^{k}1^{k}\mid k\in \mathbb {N} \}$ en espace logarithmique :
Le mot w n'est pas modifié : c'est l'entrée et elle n'est pas comptabilisée dans le calcul de la mémoire utilisée. On ne compte que la mémoire supplémentaire, à savoir, les variables i et compteurzero qui sont des entiers positifs bornées par |w| et que l'on peut coder en espace logarithmique en |w|.
Le langage des mots généré par la grammaire algébrique suivante est dans L : S --> (S) | SS | ε.

### Multiplication

La représentation binaire de l'entier $n$ est notée $\langle n\rangle$ dans cette section. Le langage $\mathrm {MULT} =\left\{(\langle n\rangle ,\langle m\rangle ,\langle n\times m\rangle )\mid n,m\in \mathbb {N} \right\}$ est dans L. L'algorithme suivant reconnait $\mathrm {MULT}$ en utilisant un espace en ${\mathcal {O}}(\log T)$, où $T$ est la taille de son entrée. L'algorithme prend en entrée trois entiers n, m et p vérifie que la multiplication de n par m vaut bien p. Il calcule à chaque itération le ie bit du résultat de la multiplication et le compare au ie bit de p.
Les procédures suivantes sont utilisées dans la description de l'algorithme :
* incrémenter(x), incrémente la variable x ;
* est_un(x, i), indique si le ie bit de x est non nul, si i est plus grand que la taille de x le bit est considéré comme nul ;
* diviser_par_deux(x), remplace x par le quotient de sa division euclidienne par 2 ; cette opération peut être implémentée comme un décalage des bits de x de un vers les bits de poids faibles.
La valeur des compteurs i, j et k utilisés ne dépasse pas la taille de l'entrée et peuvent donc être codés en espace logarithmique en la taille de l'entrée. Les procédures introduites et les comparaisons utilisent au plus un espace logarithmique en la taille de l'entrée. Enfin, la valeur de la variable retenue ne peut pas dépasser $\max \left(|n|+|m|-1,|p|\right)^{3}<T^{3}$, elle peut donc être codée sur un espace en ${\mathcal {O}}\left(3\log T\right)$.

## Relations avec les autres classes de complexité

On connait les inclusions suivantes :
    NC$^1$ ⊆ L ⊆ NL ⊆ AC$^1$ ⊆ NC ⊆ P ⊆ NP ⊆ PSPACE
On sait aussi que l'inclusion de L dans PSPACE est stricte, donc l'une des inclusions ci-dessus est stricte. Il n'est pas impossible qu'elles le soient toutes.

## Classe SL et problème d'accessibilité dans un graphe non orienté

Lewis et Christos Papadimitriou ont défini en 1982 la variante "symétrique" de L : la classe SL (pour symmetric log-space en anglais). La définition originale utilise la notion de machine de Turing symétrique au lieu des machines de Turing déterministes classiques. De manière équivalente, SL est la classe des problèmes décidés par une machine de Turing non-déterministe en espace logarithmique, avec la contrainte de symétrie suivante :
* Si la machine peut effectuer une transition d'une configuration A vers une configuration B, alors la machine peut aussi effectuer une transition de la configuration B vers la configuration A.
Ainsi, la classe SL est entre L et NL. Lewis et Papadimitriou montrèrent que le problème d'accessibilité dans un graphe non orienté est SL-complet (pour les réductions logarithmiques). Ce problème d'accessibilité prend en entrée un graphe non orienté, un sommet s et un sommet t et détermine s'il existe un chemin d'un sommet donné s à un sommet donné t (à noter que la version du problème d’accessibilité pour les graphes orientés est NL-complète).
En 2004, Omer Reingold montre que le problème d'accessibilité dans un graphe non orienté est décidé en espace logarithmique sur une machine déterministe, et donc que L=SL$^,$. La démonstration de Reingold utilise la notion de graphes expanseurs. Ce résultat lui a valu le prix Gödel en 2009.