Communicatiecomplexiteit


Stel Xandra studeert in Eindhoven en IJsbrand in Canberra. Ze zitten dus ver van elkaar. Ze willen weten of hun studiemateriaal identiek is. Ze beschikken beiden locaal over fenomenale apparatuur. Maar communicatie is het probleem. Hun materiaal is op gelijke wijze verwerkt tot een bitstring ter lengte 1013. Hun modem verwerkt 28800 bytes per seconde, dus

28800 x 8 x 365 x 24 x 3600 1013 bits per jaar.

Eenvoudige test voor gelijkheid van het studiemateriaal

Xandra stuurt haar materiaal bit voor bit naar IJsbrand en IJsbrand gaat bit voor bit na of hij hetzelfde heeft. Gegeven de snelheid van de communicatie, zal dat precies een jaar duren. Er is geen snellere methode om exact vast te stellen of hun materiaal identiek is. Maar als ze genoegen nemen met een kleine foutenmarge gaat het veel sneller...
...dankzij priemgetallen!


  1. Xandra maakt een random priemgetal p van 500 bits aan. (Dit is in de praktijk inderdaad, zonder al te veel moeite, te verwezenlijken).
  2. Dit getal geeft ze door aan IJsbrand, zodat zowel Xandra als IJsbrand kunnen uitrekenen wat hun materiaal, gezien als binair getal voorstelt modulo p. In formule als Xandra het getal x en IJsbrand het getal y heeft, dan berekenen ze dus respectievelijk
    x mod p en y mod p
    Dit zijn getallen tussen 0 en p-1.
  3. Vervolgens verstuurt Xandra haar resultaat naar IJsbrand, die het met y mod p vergelijkt. Daar zijn dus maar 500 bits voor nodig: minder dan een seconde in tijd.
  4. Als x mod p y mod p, concludeert IJsbrand dat x en y ongelijk zijn. Als x mod p = y mod p, concludeert hij dat (zo goed als zeker) dat x = y.

Hoe zit dat? Vanzelfsprekend geldt:

x=y impliceert x mod p = y mod p.

Dit betekent dat de conclusie

x y

gerechtvaardigd is als

x mod p y mod p.

Stel dus x mod p = y mod p. Hoe groot is de kans op een fout? Dat wil zeggen: hoe groot is de kans dat x y geldt?

In dat geval moet x-y een veelvoud van p ongelijk 0 zijn. Dus de kans op een foute conclusie is gelijk aan


P:= aantal priemdelers van x-y
--------------------
aantal priemen < 2500

Eerst analyseren we de teller:

Als k het aantal priemen is dat een getal z deelt, dan is

z 2 · 3 · 5 · · ·pk,

waar pk het k-de priemgetal is (dus p1 = 2, p2 = 3, enzovoorts). Een grove afschatting geeft z > 2k, ofwel

k < log2(z).


Toepassing met z = x-y geeft

k < log2(|x-y|) = log2 21013= 1013.


Dan nu de noemer:

De priemgetalstelling zegt dat het aantal priemgetallen kleiner dan z ongeveer z/log(z) bedraagt. Aldus is de noemer ongeveer

2500log2(e)/500 > 10147.


Conclusie uit de analyse van teller en noemer:



P < 1013/10147=10-134.


Met andere woorden, met aan zekerheid grenzende waarschijnlijkheid geldt

x = y.