informatique commune
Travaux pratiques
Détection de cycles
À partir d’un ensemble fini E, d’une fonction f: E E et d’un élément x0E on appelle suite des itérés de x0la suite des
valeurs (xn)nNdéfinie par la relation de récurrence : xn+1 =f(xn).
Puisque
E
est supposé fini, cette suite va atteindre deux fois la même valeur : il existe
i < j
tel que
xi
=
xj
. Une fois que
cette collision est obtenue, la suite des valeurs va répéter le cycle des valeurs de
xi
à
xj1
. Nous allons nous intéresser au
problème de la recherche de ce cycle, autrement dit déterminer les valeurs
µ
=
i
de la pré-période et
λ
=
ji
de la période
du cycle minimal.
x0
x1
x2
xµ
xµ+λ
xµ1
xµ+1
xµ+λ1
Par exemple, pour
f
:
x7→
(
x2
+ 92)
mod
32069 et
x0
= 33 on trouve
λ
= 8 et
µ
= 313. Ces valeurs pourront être utilisées
pour tester les fonctions que vous écrirez si vous travaillez sur machine.
Question 1. Lalgorithme naïf
a.
Rédiger une fonction
itere
d’arguments la fonction
f
et la valeur
x0
, qui calcule la liste [
x0,x1,...,xµ,...,xλ+µ1
] des
valeurs de la suite des itérés jusqu’à la première des collisions et qui retourne le couple (λ,µ).
b. Évaluer en fonction de λet de µle coût temporel et spatial de cet algorithme.
Question 2. Lalgorithme de Floyd
On considère la suite (yn)nNdéfinie par y0=x0et yn+1 =ff(yn), ainsi que le plus petit entier i > 0 vérifiant xi=yi.
a. Rédiger une fonction floyd1 qui prend en arguments la fonction fet la valeur x0et qui retourne la valeur de xi.
Modifier cette fonction pour obtenir une fonction floyd2 qui retourne cette fois la valeur de l’entier i.
Expliquer pourquoi ces algorithmes se terminent et caractériser la valeur de ien fonction de λet de µ.
b.
Quel entier obtient-on si on applique la fonction
floyd2
à
f
et à
xi
? En déduire une fonction
periode
qui retourne la
période λde la suite des itérés de x0.
c.
Observer enfin que
xi+µ
=
xµ
et en déduire une fonction
pre_periode
qui calcule la pré-periode de la suite des itérés
de x0.
d. Exprimer en fonction de λet de µle coût temporel et spatial du calcul de la période et de la pré-période.
Question 3. Algorithme de Brent
Lalgorithme de Floyd permet de trouver une valeur de
xi
dans le cycle et ensuite les valeurs de la période et de la
pré-période en considérant la suite d’indices (
i,
2
i
) et en testant l’égalité
xi
=
x2i
. Lalgorithme de Brent utilise la suite (
i,j
)
et teste l’égalité xi=xjen partant de (i,j) = (0,1) et en poursuivant avec :
(i,j + 1) si j62i
(j,j + 1) si j= 2i+ 1
a.
Rédiger une fonction
brent
qui prend en arguments la fonction
f
et la valeur de
x0
et qui retourne le couple (
i,j
)
trouvé par cet algorithme.
b.
Démontrer la terminaison de cet algorithme et prouver que si (
i,j
) est la valeur retournée par cet algorithme alors
λ=ji. Quel est le coût de cette fonction ?
c. Quel(s) avantage(s) voyez-vous à utiliser l’algorithme de Brent plutôt que celui de Floyd ?
page 1
Question 4. Heuristique rho de Pollard
La méthode
ρ
de Pollard est un algorithme de décomposition en produit de facteurs premiers d’un entier naturel.
S’agissant d’une heuristique, son succès nest pas assuré mais dans la pratique, cette méthode se révèle très ecace pour
des entiers possédant des facteurs premiers « pas trop grands ».
Pour trouver un diviseur non trivial d’un entier
n
on génère à l’aide de l’algorithme de Brent la suite des itérés définie par
une fonction f:x7→ (x2+c) mod navec c<{0,2}et la valeur x0= 2.
Pour chaque couple (
xi,xj
) obtenu on calcule
d
=
pgcd
(
n,|xjxi|
). Si
d >
1 on a obtenu un facteur non trivial de
n
; si
d
= 1
on poursuit la recherche avec le couple suivant.
Si la collision se produit sans qu’un diviseur non trivial de nait été trouvé, on recommence avec une autre valeur de c.
a.
Rédiger une fonction
pgcd
calculant le plus grand diviseur commun de deux entiers, puis une fonction
pollard
qui
prend en arguments les entiers
n
et
c
et retourne un diviseur non trivial de
n
si l’heuristique
ρ
de Pollard se trouve
vérifiée, et la valeur None dans le cas contraire.
Remarque
. En guise d’illustration vous pouvez utiliser cette fonction pour prouver que le sixième nombre de Fermat
F6= 226+ 1 nest pas premier (en posant par exemple c= 1).
Pour estimer le coût de cette méthode, nous allons supposer que la fonction
f
se comporte comme une fonction « aléatoire »
et que chaque xiest choisi indépendamment du précédent dans Z/nZ1.
b.
Dans un premier temps, nous nous intéressons au temps d’attente moyen avant la première collision. En s’inspirant
du paradoxe des anniversaires, montrer que le nombre moyen d’étapes avant celle-ci est un Θ(n).
Considérons maintenant un diviseur non trivial pde net posons x0
i=ximod p.
c. Justifier que le temps d’attente avant la première collision entre x0
iet x0
jest en moyenne un Θ(p).
d.
Expliquer pourquoi cette collision donne en général lieu à l’obtention d’un diviseur non trivial de
n
. Dans quel cas
la méthode échoue-t-elle ?
Remarque
. C’est cette capacité à trouver un petit facteur
p
de
n
avec un nombre d’opérations attendu en
Θ
(
p
) qui est le
principal attrait de cette méthode de factorisation.
1. Ce nest bien entendu pas le cas, mais cette hypothèse aboutit à des résultats qui sont cohérents avec le comportement observé dans la pratique.
page 2
1 / 2 100%