La complexité de la communication ou complexité de communication est une notion étudiée en informatique théorique. Le dispositif abstrait classique est le suivant : Alice et Bob ont chacun un message, et ils veulent calculer un nouveau message à partir de leurs messages, en se transmettant un minimum d'information. Par exemple, Alice et Bob reçoivent un mot chacun, et ils doivent décider s'ils ont reçu le même mot ; ils peuvent bien sûr s'envoyer leur mot l'un à l'autre et comparer, mais la question est de minimiser le nombre de messages.
Utiliser une ressources en communication est le fait d'envoyer une information à l'autre. Alice peut ainsi envoyer la première lettre de son mot à bob, ceci a un coût de 1.
La théorie de la complexité de communication a donc pour but de calculer quelles sont les ressources en communication nécessaires pour effectuer certaines tâches dans un contexte de calcul distribué. Contrairement à la théorie de la complexité classique, on ne compte pas les ressources nécessaires aux calculs (temps et espace par exemple).
Cette notion a été définie en 1979 par Andrew Yao et est utilisée notamment pour l'étude des algorithmes en ligne et le design des circuits VLSI.
Soit trois ensembles , et , et une fonction , typiquement et . Alice reçoit un élément de et Bob un élément de , et ils veulent calculer (Alice et Bob sont appelés les « joueurs »).
Un protocole qui calcule est une décomposition d'étapes. Dans chaque étape, Alice (resp. Bob) calcule en fonction de son entrée et des bits déjà échangés et décide soit de terminer car elle a fini de calculer soit d'envoyer un bit à Bob (resp. Alice). Un protocole se représente généralement sous la forme d'un arbre. Un exemple est donné ci-dessous. Les nœuds de l'arbre sont étiquetés si c'est Alice qui calcule ou si c'est Bob. Les arêtes sont étiquetées 1 si le bit envoyé vaut 1 et zéro s'il vaut zéro.
Selon les modèles, on peut accepter un protocole qui est correct seulement avec une bonne probabilité ou utilisant même des bits quantiques. Il existe aussi des généralisations avec plus de deux joueurs[1].
La complexité d'un protocole est le nombre de bit échangés dans le pire cas. Sur l'arbre représentant le protocole, la complexité du protocole est la profondeur de l’arbre.
Sur l'exemple précédent, le protocole a un coût de trois.
Dans le cas déterministe la complexité de communication d'une fonction , notée , est le nombre de bits échangés en utilisant un protocole déterministe. C'est la notion la plus classique, et la plus restrictive des trois notions définies ici.
Dans le cas probabiliste, on note la complexité (pour randomized). Dans ce cas Alice et Bob peuvent utiliser des sources de bits aléatoires pour faire leur calculs (comme pour les algorithmes probabilistes), et le protocole est considéré satisfaisant si la probabilité d'une bonne réponse est supérieure à une certaine constante. Selon le modèle, les joueurs peuvent partager leurs sources de bits aléatoires (on parle alors de public coin protocol) ou pas (private coin protocol).
Il existe plusieurs modèles de complexité de la communication utilisant les notions d'informatique quantique, notamment par l'échange de qubits à la place des bits, ou encore le partage de qubit intriqués.
Dans la théorie de la complexité plus classique, prouver des bornes inférieures sur la difficulté des problèmes peut se révéler très difficile, comme l'illustre le problème P=NP. Il est parfois facile d'obtenir des bornes inférieures pour la complexité de la communication. Pour cela, il existe deux méthodes classiques.
Un rectangle combinatoire est le produit d'un sous ensemble de et d'un sous ensemble de tel que:
Un protocole crée une partition en rectangle combinatoire grâce au fait que l'ensemble des éléments est un rectangle combinatoire. En appelant (rep. ) l'ensemble des éléments de (resp. ) tel qu'un élément de (rep. ), tous les éléments (,) ont la même réponse. L'idée est que le (resp. ) conduit à la feuille pour les nœuds d'Alice (resp. Bob).
Ainsi si on prouve qu'il n'existe pas de partition en moins de n rectangles combinatoires, alors le coût minimal d'un protocole est au moins .
Le rang de la matrice ci-dessus est aussi une source de bornes inférieur.
La propriété de Logrank est la suivante:
La réciproque est une conjecture et n'a pas été démontré à l'heure actuelle.
On veut calculer , qui vaut 1 si et 0 sinon.
Un protocole simple est qu’Alice envoie à Bob, et que Bob calcule le résultat et le renvoie. Ce protocole a un coût de (Alice envoie bits, et Bob doit en envoyer un). L'arbre de ce protocole est l'exemple donné précédemment.
On peut montrer que ce protocole est optimal dans le cas déterministe (ce que l’on peut montrer grâce à la propriété utilisant les rectangles combinatoires ci-dessus), mais il existe un protocole plus efficace dans le cas probabiliste[réf. nécessaire] (qui fait appel à une fonction de hashage).
On veut calculer , qui vaut 1 si (où et sont interprétés comme un tableau de booléens définissant des ensembles) et 0 sinon.
Un protocole simple est, comme précédemment, qu’Alice envoie à Bob, et que Bob renvoie le résultat. La complexité est à nouveau de .
Ce protocole est optimal dans le cas déterministe, mais il existe un meilleur algorithme dans le cas probabiliste (mais lui aussi linéaire)[2].
La complexité de la communication a été inventée en 1979 par Andrew Yao dans l'article Some Complexity Questions Related to Distributed Computing[3]. Yao a reçu le prix Turing en 2000 pour ses travaux, notamment dans ce domaine[4].
Les résultats de complexité de communication sont utilisés sur dans le domaine théorique pour faire le lien entre les bornes inférieures issues de différents modèles de calculs comme les machines de Turing, les arbres de décision, les branching programs etc. ; on en a vu un exemple ci-dessus.
On peut aussi obtenir des bornes pour les algorithmes de fouille de données et les algorithmes en ligne[5].
Un exemple d’application de la complexité de la communication est une preuve de borne inférieure sur le nombre d’états d’un automate fini.
On suppose que l’on a un automate qui reconnait le langage . On peut alors construire un protocole pour avec bits de communication :
Or, on a vu que pour résoudre , il faut au moins bits de communication, d’où , donc , donc