]> AND Private Git Repository - hdrcouchot.git/blob - 14Secrypt.tex
Logo AND Algorithmique Numérique Distribuée

Private GIT Repository
fin relecture sylvaine
[hdrcouchot.git] / 14Secrypt.tex
1 On  a vu  dans  le chapitre précédent  que  pour avoir
2 un  générateur à  sortie
3 uniforme, il est nécessaire que  la matrice d'adjacence du graphe d'itération du
4 système  soit doublement stochastique.   Nous présentons  dans cette  partie
5 des méthodes effectives permettant de générer de telles matrices.
6 La première est basée sur la programmation logique par contraintes
7 (Section~\ref{sec:plc}).
8 Cependant celle-ci souffre de ne pas passer à l'échelle et ne fournit pas 
9 une solution en un temps raisonnable dès que la fonction à engendrer 
10 porte sur un grand nombre de bits.
11 Une approche plus pragmatique consiste  à supprimer un cycle hamiltonien dans le
12 graphe d'itérations $\textsc{giu}(\neg)$ (section~\ref{sec:hamiltonian}). 
13 Pour obtenir plus rapidement une distribution uniforme, l'idéal serait
14 de supprimer un cycle hamiltonien qui nierait autant de fois chaque bit. 
15 Cette forme de cycle est dite équilibré. La section~\ref{sub:gray} établit le
16 lien avec les codes de Gray équilibrés, étudiés dans la littérature. 
17 La section suivante présente une démarche de génération automatique de code de Gray équilibré (section~\ref{sec:induction}).
18 La vitesse avec laquelle l'algorithme de PRNG converge en interne vers 
19 une distribution uniforme est étudiée théoriquement et pratiquement à la 
20 section~\ref{sec:mixing}.
21 L'extension du travail aux itérations généralisées est présentée à la 
22 section~\ref{sec:prng:gray:general}.
23 Finalement, des instances de PRNGS engendrés selon les méthodes détaillées dans 
24 ce chapitre sont présentés en section~\ref{sec:prng;gray:tests}.
25 Les sections~\ref{sec:plc} à~\ref{sub:gray} ont été publiées 
26 à~\cite{chgw+14:oip}.
27
28
29 % This aim of this section is to show 
30 % that finding DSSC matrices from a hypercube
31 % is a typical finite domain satisfaction 
32 % problem, classically denoted as 
33 % Constraint Logic Programming on Finite Domains (CLPFD). 
34 % This part is addressed in the first section. Next, we analyse the first
35 % results to provide a generation of DSSC matrices with small mixing times. 
36
37 \section{Programmation logique par contraintes sur des domaines finis}\label{sec:plc}
38 Tout d'abord, soit ${\mathsf{N}}$ le nombre d'éléments. 
39 Pour éviter d'avoir à gérer des fractions, on peut considérer que 
40 les matrices (d'incidence) à générer ont des lignes et des colonnes dont les 
41 sommes valent ${\mathsf{N}}$ à chaque fois.  
42 On cherche ainsi toutes les matrices $M$ de taille  $2^{\mathsf{N}}\times 2^{\mathsf{N}}$ telles que 
43   
44 \begin{enumerate}
45 \item $M_{ij}$ vaut 0 si $j$ n'est pas un voisin de $i$, \textit{i.e.},
46   il n'y a pas d'arc de $i$ à $j$ dans le graphe $\textsc{giu}(f)$;
47
48 \item $0 \le M_{ii} \le {\mathsf{N}}$: le nombre de boucles autour de chaque 
49 configuration $i$ est inférieur à ${\mathsf{N}}$;
50
51 \item pour $j \neq i$,  $0 \le M_{ij} \le 1$: on construit l'arc de $i$ à $j$ 
52 si et seulement si $M_{ij}$ vaut 1 (et 0 sinon)
53 \item pour chaque indice de ligne  $i$, $1 \le i\le 2^{\mathsf{N}}$, ${\mathsf{N}} = \sum_{1 \le j\le 2^{\mathsf{N}}} M_{ij}$: 
54 la matrice est stochastique à droite; 
55 \item pour chaque indice de colonne $j$, 
56   $1 \le j\le 2^{\mathsf{N}}$, ${\mathsf{N}} = \sum_{1 \le i\le 2^{\mathsf{N}}} M_{ij}$: 
57   la matrice est stochastique à gauche;
58 \item Tous les éléments de la somme $\sum_{1\le k\le 2^{\mathsf{N}}}M^k$ sont strictement positifs, \textit{i.e.}, le graphe $\textsc{giu}(f)$ est fortement connexe;
59 \end{enumerate}
60 Ce problème s'exprime sur des domaines finis entiers avec des opérateurs  
61 arithmétiques simples (sommes et produits). Il pourrait théoriquement être 
62 traité par des démarches de programmation logique par contrainte
63 sur des domaines finis (comme en PROLOG).
64 L'algorithme donné en Figure~\ref{fig:prolog}
65 est en effet le c{\oe}ur du programme PROLOG 
66 qui pourrait être utilisé pour instancier toutes les solutions,
67 ici pour  $\mathsf{N} = 2$. Dans ce code, 
68 \verb+mmult(+$X,Y,R$\verb+)+ et 
69 \verb+summ(+$X,Y,R$\verb+)+ 
70 valent True si et seulement si $R$ 
71 est le produit matriciel  (ou la somme matricielle) 
72 entre  $X$ et $Y$ respectivement. 
73 Il n'est pas difficile d'adapter ce code à n'importe quelle valeur 
74 entière naturelle  $\mathsf{N}$.  
75
76 \begin{figure}[ht]
77 \begin{scriptsize}
78 \lstset{language=prolog}
79 \begin{lstlisting}
80 bistoc(X):-
81   M=[[M0_0, M0_1, 0, M0_3], [M1_0, M1_1, 0, M1_3], 
82      [M2_0, 0, M2_2, M2_3], [0, M3_1, M3_2, M3_3]],
83   [M0_0, M1_1, M2_2, M3_3] ins 0..2,
84   [M0_1, M0_3, M1_0, M1_3, M2_0, M2_3, M3_1, M3_2] 
85      ins 0..1,
86   M0_0+ M0_1+ M0_2 #=2, M1_0+ M1_1+ M1_3 #=2,
87   M2_0+ M2_2+ M2_3 #=2, M3_1+ M3_2+ M3_3 #=2,
88   M0_0+ M1_0+ M2_0 #=2, M0_1+ M1_1+ M3_1 #=2, 
89   M0_2+ M2_2+ M3_2 #=2, M1_3+ M2_3+ M3_3 #=2,
90   mmult(M,M,M2),
91   mmult(M,M2,M3),
92   mmult(M,M3,M4),
93   summ(M,M2,S2),
94   summ(S2,M3,S3),
95   summ(S3,M4,S4),
96   allpositive(S4).
97 \end{lstlisting}
98 \end{scriptsize}
99 \caption{Code PROLOG permettant de trouver toutes les matrices DSSC pour $n=2$}\label{fig:prolog}
100 \end{figure}
101
102 Enfin, on définit la relation $\mathcal{R}$, qui est établie pour les deux 
103 fonctions  $f$ et $g$ si leurs graphes 
104 respectifs  $\textsc{giu}(f)$ et $\textsc{giu}(g)$ 
105 sont isomorphes.
106 C'est évidemment une relation d'équivalence.
107
108
109
110 %\subsection{Analyse de l'approche}\label{sub:prng:ana}
111 Exécutée sur un ordinateur personnel, PROLOG trouve 
112 en moins d'une seconde les
113 49 solutions pour  $n=2$, 
114 dont 2 seulement ne sont pas équivalentes, 
115 en moins d'une minute les 27642 solutions dont seulement 111 ne 
116 sont pas équivalentes pour $n=3$.
117 Cependant, l'approche ne permet pas d'engendrer toutes les solutions 
118 pour $n=4$.
119 Cette approche, basée sur une démarche de type \emph{générer, tester} ne peut 
120 pas être retenue pour $n$ de grande taille, même 
121 en s'appuyant sur l'efficience de l'algorithme de backtrack natif de PROLOG.
122
123 Cependant, pour des petites valeurs de $n$, nous avons 
124 comparé les fonctions non équivalentes selon leur proportion
125 à engendrer des temps de mélange petits (cf. équation~(\ref{eq:mt:ex})).
126
127
128
129
130 \begin{xpl}\label{xpl:mixing:3}
131 Le tableau~\ref{table:mixing:3} fournit les 5 fonctions booléennes 
132 qui ont les temps de mélange les plus petits pour $\varepsilon=10^{-5}$. 
133 \begin{table}[ht]
134 \begin{small}
135 $$
136 \begin{array}{|l|l|l|}
137 \hline
138 \textrm{Name} & \textrm{Image} & \textrm{MT}\\
139 \hline
140 f^a &  (x_2 \oplus x_3, x_1 \oplus \overline{x_3},\overline{x_3})  &  16   \\
141 \hline
142 f^*  &  (x_2 \oplus x_3, \overline{x_1}.\overline{x_3} + x_1\overline{x_2},
143 \overline{x_1}.\overline{x_3} + x_1x_2)  &  17   \\
144 \hline
145 f^b  &  (\overline{x_1}(x_2+x_3) + x_2x_3,\overline{x_1}(\overline{x_2}+\overline{x_3}) + \overline{x_2}.\overline{x_3}, &  \\
146 & \qquad \overline{x_3}(\overline{x_1}+x_2) + \overline{x_1}x_2)  &  26   \\
147 \hline
148 f^c  &  (\overline{x_1}(x_2+x_3) + x_2x_3,\overline{x_1}(\overline{x_2}+\overline{x_3}) + \overline{x_2}.\overline{x_3}, & \\
149 & \overline{x_3}(\overline{x_1}+x_2) + \overline{x_1}x_2)  &  29   \\
150 \hline
151 f^d  &  (x_1\oplus x_2,x_3(\overline{x_1}+\overline{x_2}),\overline{x_3})  &  30   \\
152 \hline
153 % [3, 4, 7, 0, 1, 6, 5, 2], #16
154 % [3, 4, 7, 0, 2, 6, 5, 1], #17
155 % [3, 6, 7, 5, 2, 0, 1, 4], #26 
156 % [3, 4, 7, 5, 2, 6, 1, 0], #29
157 % [3, 2, 5, 6, 7, 0, 1, 4]] #30
158 \end{array}
159 $$
160 \end{small}
161 \caption{Les 5 fonctions booléennes $n=3$ aux temps de mélange les plus faibles.}\label{table:mixing:3}
162 \end{table}
163 \end{xpl}
164
165 Une analyse syntaxique de ces fonctions ne permet pas, a priori, 
166 de déduire des règles permettant de construire de nouvelles
167 fonctions dont le temps de mélange serait faible.
168 Cependant, le graphe $\textsc{giu}(f^*)$ 
169 (donné à la Figure~\ref{fig:iteration:f*})
170 est le $3$-cube dans lequel le cycle 
171 $000,100,101,001,011,111,110,010,000$ 
172 a été enlevé. Dans cette figure, le  graphe $\textsc{giu}(f)$ est
173 en continu tandis que le cycle est en pointillés.
174 Ce cycle qui visite chaque n{\oe}ud exactement une fois est un  
175 \emph{cycle hamiltonien}.
176 La matrice de Markov correspondante est donnée à 
177 la figure~\ref{fig:markov:f*}.
178 On s'intéresse  par la suite à la génération de ce genre de cycles.
179
180
181
182
183
184 \begin{figure}[ht]
185   \begin{center}
186     \subfigure[Graphe $\textsc{giu}(f^*)$.
187     \label{fig:iteration:f*}]{
188       \begin{minipage}{0.55\linewidth}
189         \centering
190         \includegraphics[width=\columnwidth]{images/iter_f0d}%
191       \end{minipage}
192     }%
193     \subfigure[Matrice de Markov associée à $\textsc{giu}(f^*)$
194     \label{fig:markov:f*}]{%
195       \begin{minipage}{0.35\linewidth}
196         \begin{scriptsize}
197           \begin{center}
198
199 \[
200 M=\dfrac{1}{3} \left(
201 \begin{array}{llllllll}
202 1&1&1&0&0&0&0&0 \\
203 1&1&0&0&0&1&0&0 \\
204 0&0&1&1&0&0&1&0 \\
205 0&1&1&1&0&0&0&0 \\
206 1&0&0&0&1&0&1&0 \\
207 0&0&0&0&1&1&0&1 \\
208 0&0&0&0&1&0&1&1 \\
209 0&0&0&1&0&1&0&1 
210 \end{array}
211 \right)
212 \]
213
214
215
216             % $ \dfrac{1}{4} \left(
217             %   \begin{array}{cccccccc}
218             %     1 & 1 & 1 & 1 & 0 & 0 & 0 & 0 \\
219               
220             %     1 & 1 & 0 & 0 & 1 & 1 & 0 & 0 \\
221               
222             %     0 & 0 & 1 & 1 & 0 & 0 & 1 & 1 \\
223               
224             %     1 & 1 & 1 & 1 & 0 & 0 & 0 & 0 \\
225               
226             %     1 & 0 & 1 & 0 & 1 & 0 & 1 & 0 \\
227               
228             %     0 & 0 & 0 & 0 & 1 & 1 & 1 & 1 \\
229               
230             %     0 & 0 & 0 & 0 & 1 & 1 & 1 & 1 \\
231               
232             %     0 & 1 & 0 & 1 & 0 & 1 & 0 & 1 \\
233               
234             %   \end{array}            \right) $
235
236
237
238           \end{center}
239         \end{scriptsize}
240       \end{minipage}
241     }%
242     \caption{Représentations de $f^*(x_1,x_2,x_3)=
243       (x_2 \oplus x_3, \overline{x_1}.\overline{x_3} + x_1\overline{x_2},
244       \overline{x_1}.\overline{x_3} + x_1x_2)$.}\label{fig1}
245   \end{center}
246 \end{figure}
247
248
249
250
251 % section{Graphes 
252 %   $\textsc{giu}(f)$ 
253 %   $\textsc{gig}(f)$ 
254 %   fortement connexes et doublement stochastiques}\label{sec:gen:dblstc}
255 % %
256 %Secrypt 14
257
258
259
260
261 \section{Suppression des cycles hamiltoniens}
262 \label{sec:hamiltonian}
263
264 Dans un premier temps, nous montrons %en section~\ref{sub:removing:theory} 
265 que la
266 suppression  d'un  cycle  hamiltonien   produit  bien  des  matrices  doublement
267 stochastiques.   Nous  établissons  ensuite  le  lien avec  les  codes  de  Gray
268 équilibrés.
269
270 %\subsubsection{Aspects théoriques}
271 %\label{sub:removing:theory}
272
273 Nous donnons  deux résultats complémentaires, reliant la  suppression d'un cycle
274 hamiltonien  du $n$-cube,  les matrices  doublement stochastiques  et  la forte
275 connexité du graphe d'itérations.
276
277 \begin{theorem}\label{th:supprCH}
278   La suppression d'un cycle hamiltonien dans une matrice de Markov $M$, issue du
279   $n$-cube, produit une matrice doublement stochastique.
280 \end{theorem}
281 \begin{proof}
282
283 Un cycle hamiltonien passe par chaque n{\oe}ud une et une seule fois.
284 Pour chaque n{\oe}ud $v$ dans le $n$-cube $C_1$,
285 une arête entrante $(o,v)$ et une arête sortante $(v,e)$ 
286 sont ainsi enlevées.
287 Considérons un autre  $n$-cube $C_2$ auquel on ajoute les arêtes 
288 pour le rendre complet. La matrice de Markov $M$ correspondante est
289 remplie de $\frac{1}{2^n}$ et est doublement stochastique.
290 Comme on enlève exactement une arête sortante $(v,e)$ 
291 à chaque n{\oe}ud $v$ dans $C_1$, on enlève ainsi dans 
292 $C_2$ les $2^{n-1}$ arêtes issues de $v$ et 
293 relatives aux parties de $\{1,\ldots,n\}$ qui
294 contiennent $e$. Cela revient à annuler 
295 dans la matrice $M$ les $2^{n-1}$ coefficients correspondants et ajouter 
296 $1/2$ à l'élément $M_{vv}$.
297 La matrice $M$ reste stochastique.
298 On effectue un raisonnement similaire pour les arêtes entrantes:
299 comme on enlève exactement une arête entrante $(o,v)$ pour chaque 
300 n{\oe}ud $v$ dans $C_1$, dans $C_2$, ce sont exactement 
301 $2^{n-1}$ arêtes menant à $v$ qui sont enlevées. 
302 Dans $M$ les $2^{n-1}$ coefficients correspondants sont mis à 0 et 
303 $M_{vv}$ vaut alors $\frac{2^{n-1} +1}{2}$.
304 $M$ est donc doublement stochastique.
305 \end{proof}
306
307
308
309 \begin{theorem}\label{th:grapheFC}
310   Le  graphe d'itérations  issu du  $n$-cube,  auquel un  cycle hamiltonien  est
311   enlevé, est fortement connexe.
312 \end{theorem}
313
314
315 \begin{proof}
316 On considère les deux $n$-cubes $C_1$ et $C_2$ définis 
317 dans la preuve du théorème~\ref{th:supprCH}.
318 Dans $C_1$ on considère le cycle inverse $r$ du cycle
319 hamiltonien $c$.
320 Aucun arc n'appartient à la fois  à $r$ et à $c$: 
321 en effet, sinon $c$ contiendrait un n{\oe}ud deux fois.
322 Ainsi aucune arête de $r$ n'est enlevée dans $C_1$.
323 Le cycle $r$ est évidemment un cycle hamiltonien et contient tous les n{\oe}uds.
324 Tous les n{\oe}uds de $C_1$ dans lesquels $c$ a été enlevé sont accessibles 
325 depuis n'importe quel n{\oe}ud. Le graphe des itérations $\textsc{giu}$ qui
326 étend le précédent graphe est ainsi fortement connexe. 
327
328 \end{proof}
329
330
331
332 %Les preuves, relativement directes, sont  laissées en exercices au lecteur.  
333 Générer un  cycle hamiltonien dans le
334 $n$-cube revient à  trouver un  \emph{code de  Gray  cyclique}.  On
335 rappelle qu'un code de  Gray est une  séquence de mots binaires  de taille
336 fixe ($\mathsf{N}$),  dont les éléments successifs ne  différent que par un  seul bit. Un
337 code  de  Gray est  \emph{cyclique}  si  le premier  élément  et  le dernier  ne
338 différent que par un seul bit.
339
340 \section{Lien avec les codes de Gray cycliques (totalement) équilibrés}
341 \label{sub:gray}
342
343 Un minorant du  nombre de codes  de Gray  ($\left(\frac{n*\log2}{e \log
344     \log   n}\times(1  -  o(1))\right)^{2^n}$),   donnée  dans~\cite{Feder2009NTB},
345 indique  une explosion combinatoire  pour notre  recherche.  Afin  de contourner
346 cette  difficulté,  nous  nous   restreignons  aux  codes  induisant  un  graphe
347 d'itérations $\textsc{giu}(f)$  \emph{uniforme}.  Cette uniformité se  traduit par des
348 nombres d'arcs  équilibrés entre les  \emph{dimensions} du graphe,  la dimension
349 $i$  correspondant aux  seules variations  du  bit $i$  (parmi les  $n$ bits  au
350 total).   Cette  approche  revient  à  chercher  des  codes  de  Gray  cycliques
351 \emph{équilibrés}.
352
353 On formalise un code de Gray équilibré comme suit.
354 Soit $L = w_1,  w_2, \dots, w_{2^n}$ la séquence d'un code  de Gray cyclique à
355 $n$ bits.  Soit $S = s_1,  s_2, \dots, s_{2^n}$ la séquence des transitions où
356 $s_i$, $1  \le i \le 2^n$  est l'indice du seul  bit qui varie  entre les mots
357 $w_i$ et  $w_{i+1}$. Enfin, soit  $\textit{TC}_n : \{1,\dots,  n\} \rightarrow
358 \{0, \ldots, 2^n\}$  la fonction qui au paramètre  $i$ associe le \emph{nombre
359   de transitions} présentes dans la séquence $L$ pour le bit $i$, c'est-à-dire
360 le nombre d'occurrences de $i$ dans $S$.
361   
362 Le      code       $L$      est      \textbf{équilibré}       si      $\forall
363 i,j\in\{1,...,n\},~|\textit{TC}_n(i)  -  \textit{TC}_n(j)|  \le  2$.   Il  est
364 \textbf{totalement             équilibré}             si             $\forall
365 i\in\{1,...,n\},~\textit{TC}_n(i)=\frac{2^n}{n}$.
366
367
368 On peut  donc déjà déduire  qu'il ne peut  exister des codes de  Gray totalement
369 équilibrés que  pour les  systèmes ayant un  nombre d'éléments $n=2^k,  k>0$. De
370 plus,  comme  dans tout  code  de  Gray  cyclique, $\textit{TC}_n(i)$  est  pair
371 $\forall  i\in\{1,...,n\}$,  alors  les  systèmes  ayant  un  nombre  d'éléments
372 différent  de $2^k$,  ne peuvent  avoir  que des  codes de  Gray équilibrés  avec
373 $\textit{TC}_n(i)=\lfloor\frac{2^n}{n}\rfloor$                                 ou
374 $\textit{TC}_n(i)=\lceil\frac{2^n}{n}\rceil,    \forall    i\in\{1,...,n\}$   et
375 vérifiant $\sum_{i=1}^n\textit{TC}_n(i) = 2^n$.
376
377 \begin{xpl}
378   Soit  $L^*=000,100,101,001,011,111,110,010$ le code  de Gray  correspondant au
379   cycle hamiltonien enlevé de $f^*$.  Sa séquence des transitions est \linebreak
380   $S=3,1,3,2,3,1,3,2$  et  les nombres  de  transitions sont  $\textit{TC}_3(1)=
381   \textit{TC}_3(2)=2$ et $\textit{TC}_3(3)=4$. Un tel code est équilibré.
382
383   Si l'on  considère maintenant $L^4=$ 0000,  0010, 0110, 1110, 1111,  0111, 0011,
384   0001,  0101, 0100,  1100, 1101,  1001,  1011, 1010,  1000,  un  code de  Gray
385   cyclique. En construisant la séquence $S=$ 2,3,4,1,4,3,2,3,1,4,1,3,2,1,2,4, 
386   on constate que  $\forall
387   i\in\{1,..,4\},~\textit{TC}_4(i)=4$ et donc que 
388   ce code est totalement équilibré.
389 \end{xpl}
390
391 \section{Génération de codes de Gray équilibrés par induction}
392 \label{sec:induction}
393
394 De nombreuses approches ont été développées pour résoudre le problème de construire
395 un code de Gray dans un $\mathsf{N}$-cube~\cite{Robinson:1981:CS,DBLP:journals/combinatorics/BhatS96,ZanSup04}, 
396 selon les propriétés que doit vérifier ce code.
397
398 Dans les travaux~\cite{Robinson:1981:CS}, les auteurs 
399 proposent une approche inductive de construction de code de Gray équilibrés 
400 (on passe du $\mathsf{N}-2$ à $\mathsf{N}$)
401 pour peu que l'utilisateur fournisse une sous-séquence possédant certaines 
402 propriétés à chaque pas inductif.
403 Ce travail a été renforcé dans ~\cite{DBLP:journals/combinatorics/BhatS96}
404 où les auteurs donnent une manière explicite de construire une telle sous-séquence.
405 Enfin, les auteurs de~\cite{ZanSup04} présentent une extension de l'algorithme de
406 \emph{Robinson-Cohn}. La présentation rigoureuse de cette extension leur permet 
407 principalement de prouver que si $\mathsf{N}$ est une puissance de 2, 
408 le code de Gray équilibré engendré par l'extension est toujours totalement équilibré et 
409 que $S_{\mathsf{N}}$ est la séquence de transition d'un code de Gray de $\mathsf{N}$ bits 
410 si  $S_{\mathsf{N}-2}$ l'est aussi.. 
411 Cependant les auteurs ne prouvent pas que leur approche fournit systématiquement  
412 un code de Gray (totalement) équilibré. 
413 Cette section montre que ceci est vrai en rappelant tout d'abord
414 l'extension de l'algorithme de \emph{Robinson-Cohn} pour un 
415 code de Gray avec $\mathsf{N}-2$ bits
416 défini à partir de la séquence $S_{\mathsf{N}-2}$.
417
418 \begin{enumerate}
419 \item \label{item:nondet}Soit $l$ un entier positif pair. Trouver des sous-séquences 
420 $u_1, u_2, \dots , u_{l-2}, v$ (possiblement vides) de $S_{\mathsf{N}-2}$ 
421 telles que $S_{\mathsf{N}-2}$ est la concaténation de  
422 $$
423 s_{i_1}, u_0, s_{i_2}, u_1, s_{i_3}, u_2, \dots , s_{i_l-1}, u_{l-2}, s_{i_l}, v
424 $$
425 où $i_1 = 1$, $i_2 = 2$, et $u_0 = \emptyset$ (la séquence vide).
426 \item\label{item:u'} Remplacer dans $S_{\mathsf{N}-2}$ les séquences $u_0, u_1, u_2, \ldots, u_{l-2}$ 
427   par 
428   $\mathsf{N} - 1,  u'(u_1,\mathsf{N} - 1, \mathsf{N}) , u'(u_2,\mathsf{N}, \mathsf{N} - 1), u'(u_3,\mathsf{N} - 1,\mathsf{N}), \dots, u'(u_{l-2},\mathsf{N}, \mathsf{N} - 1)$
429   respectivement, où $u'(u,x,y)$ est la séquence $u,x,u^R,y,u$ telle que 
430   $u^R$ est $u$, mais dans l'ordre inverse. La séquence obtenue est ensuite notée $U$.
431 \item\label{item:VW} Construire les séquences $V=v^R,\mathsf{N},v$, $W=\mathsf{N}-1,S_{\mathsf{N}-2},\mathsf{N}$. Soit  alors $W'$ définie comme étant égale à $W$ sauf pour les 
432 deux premiers éléments qui ont été intervertis.
433 \item La séquence de transition  $S_{\mathsf{N}}$ est la concaténation $U^R, V, W'$.
434 \end{enumerate} 
435
436 L'étape~(\ref{item:nondet}) n'est pas constructive: il n'est pas précisé
437 comment sélectionner des sous-séquences qui assurent que le code obtenu est équilibré.
438 Le théorème suivant montre que c'est possible et sa preuve,
439 donnée en annexe~\ref{anx:generateur}, explique comment le faire. 
440
441 \begin{restatable}[Existence d'un code de Gray équilibré]{theorem}{theograyequilibre}
442 \label{prop:balanced}
443 Soit $\mathsf{N}$ dans $\Nats^*$, et $a_{\mathsf{N}}$ défini par 
444 $a_{\mathsf{N}}= 2 \left\lfloor \dfrac{2^{\mathsf{N}}}{2\mathsf{N}} \right\rfloor$. 
445 Il existe une séquence $l$ dans l'étape~(\ref{item:nondet}) de l'extension
446 de l'algorithme de \emph{Robinson-Cohn}  telle que 
447 les nombres de transitions $\textit{TC}_{\mathsf{N}}(i)$ 
448 valent tous $a_{\mathsf{N}}$ ou $a_{\mathsf{N}}+2$ 
449 pour chaque  $i$, $1 \le i \le \mathsf{N}$.
450 \end{restatable}
451
452 Ces fonctions étant générées, on s'intéresse à étudier à quelle vitesse 
453 un générateur les embarquant converge vers la distribution uniforme.
454 C'est l'objectif de la section suivante. 
455
456 \section{Quantifier l'écart par rapport à la distribution uniforme}\label{sec:mixing} 
457 On considère ici une fonction construite comme à la section précédente.
458 On s'intéresse ici à étudier de manière théorique les 
459 itérations définies à l'équation~(\ref{eq:asyn}) pour une 
460 stratégie donnée.
461 Tout d'abord, celles-ci peuvent être interprétées comme une marche le long d'un 
462 graphe d'itérations $\textsc{giu}(f)$ tel que le choix de tel ou tel arc est donné par la 
463 stratégie.
464 On remarque que ce graphe d'itérations est toujours un sous graphe 
465 du   ${\mathsf{N}}$-cube augmenté des 
466 boucles sur chaque sommet, \textit{i.e.}, les arcs
467 $(v,v)$ pour chaque $v \in \Bool^{\mathsf{N}}$. 
468 Ainsi, le travail ci-dessous répond à la question de 
469 définir la longueur du chemin minimum dans ce graphe pour 
470 obtenir une distribution uniforme.
471 Ceci se base sur la théorie des chaînes de Markov.
472 Pour une référence 
473 générale à ce sujet on pourra se référer 
474 au livre~\cite{LevinPeresWilmer2006},
475 particulièrement au chapitre sur les temps d'arrêt.
476
477
478
479
480
481
482 \begin{xpl}
483 On considère par exemple le graphe $\textsc{giu}(f)$ donné à la 
484 \textsc{Figure~\ref{fig:iteration:f*}.} et la fonction de 
485 probabilités $p$ définie sur l'ensemble des arcs comme suit:
486 $$
487 p(e) \left\{
488 \begin{array}{ll}
489 = \frac{1}{2} + \frac{1}{6} \textrm{ si $e=(v,v)$ avec $v \in \Bool^3$,}\\
490 = \frac{1}{6} \textrm{ sinon.}
491 \end{array}
492 \right.  
493 $$
494 La matrice $P$ de la chaîne de Markov associée à  $f^*$ 
495 est  
496 \[
497 P=\dfrac{1}{6} \left(
498 \begin{array}{llllllll}
499 4&1&1&0&0&0&0&0 \\
500 1&4&0&0&0&1&0&0 \\
501 0&0&4&1&0&0&1&0 \\
502 0&1&1&4&0&0&0&0 \\
503 1&0&0&0&4&0&1&0 \\
504 0&0&0&0&1&4&0&1 \\
505 0&0&0&0&1&0&4&1 \\
506 0&0&0&1&0&1&0&4 
507 \end{array}
508 \right)
509 \]
510 \end{xpl}
511
512 On remarque que dans cette marche on reste sur place avec une probabilité égale 
513 à $\frac{1}{2}+\frac{1}{2\mathsf{N}}$ et l'on passe d'un sommet à son voisin
514 lorsque c'est possible avec une probabilité $\frac{1}{2\mathsf{N}}$.
515 Les probabilités usuelles que l'on appliquerait aux transitions de 
516 l'algorithme~\ref{CI Algorithm} seraient quant à elles uniformément égales 
517 à $\frac{1}{\mathsf{N}}$.
518 Cette manière paresseuse d'itérer (puisqu'on reste plus souvent sur place) n'est donc pas équivalente à celle issue de l'algorithme. 
519
520 Cependant, l'étude théorique de référence~\cite{LevinPeresWilmer2006}
521 considère cette marche comme cadre. S'inspirant de 
522 celle-ci, le travail suivant se replace donc dans ce cadre théorique.
523
524
525 Tout d'abord, soit $\pi$ et $\mu$ deux distributions sur 
526 $\Bool^{\mathsf{N}}$. 
527 La distance de \og totale variation\fg{} entre  $\pi$ et $\mu$ 
528 est notée  $\tv{\pi-\mu}$ et est définie par 
529 $$\tv{\pi-\mu}=\max_{A\subset \Bool^{\mathsf{N}}} |\pi(A)-\mu(A)|.$$ 
530 On sait que 
531 $$\tv{\pi-\mu}=\frac{1}{2}\sum_{X\in\Bool^{\mathsf{N}}}|\pi(X)-\mu(X)|.$$
532 De plus, si 
533 $\nu$ est une distribution sur $\Bool^{\mathsf{N}}$, on a 
534 $$\tv{\pi-\mu}\leq \tv{\pi-\nu}+\tv{\nu-\mu}.$$
535
536 Soit $P$ une matrice d'une chaîne de Markov sur $\Bool^{\mathsf{N}}$. 
537 $P(X,\cdot)$ est la distribution induite par la  $X^{\textrm{ème}}$ colonne
538 de  $P$. 
539 Si la chaîne de  Markov induite par 
540 $P$ a une  distribution stationnaire $\pi$, on définit alors 
541 $$d(t)=\max_{X\in\Bool^{\mathsf{N}}}\tv{P^t(X,\cdot)-\pi}$$
542
543 et
544
545 $$t_{\rm mix}(\varepsilon)=\min\{t \mid d(t)\leq \varepsilon\}.$$
546  
547 Intuitivement, $t_{\rm mix}(\varepsilon)$ est le nombre d'itérations nécessaire 
548 pour être proche de la distribution stationnaire à $\varepsilon$ près, 
549 peu importe la configuration de départ. On a le théorème suivant démontré en annexe~\ref{anx:generateur}.
550
551
552 \begin{restatable}[Temps de mixage sans chemin hamiltonien]{theorem}{theotpsmix}
553 \label{theo:tmps:mix}
554 On considère un $\mathsf{N}$-cube dans lequel un chemin hamiltonien a été supprimé et la fonction de 
555 probabilités $p$ définie sur l'ensemble des arcs comme suit:
556 \[
557 p(e) \left\{
558 \begin{array}{ll}
559 = \frac{1}{2} + \frac{1}{2\mathsf{N}} \textrm{ si $e=(v,v)$ avec $v \in \Bool^{\mathsf{N}}$,}\\
560 = \frac{1}{2\mathsf{N}} \textrm{ sinon.}
561 \end{array}
562 \right.  
563 \]
564
565 La chaîne de Markov associée converge vers la distribution uniforme et 
566
567 \[
568 \forall \varepsilon >0,\, t_{\rm mix}(\varepsilon) \le 32 {\mathsf{N}}^2+ 16{\mathsf{N}}\ln ({\mathsf{N}}+1) = O(N^2).
569 \] 
570 \end{restatable}
571
572
573
574 Sans entrer dans les détails de la preuve, on remarque aussi
575 que le calcul  de ce majorant impose uniquement que 
576 pour chaque n{\oe}ud du $\mathsf{N}$-cube 
577 un arc entrant et un arc sortant sont supprimés.
578 Le fait qu'on enlève un cycle  hamiltonien et que ce dernier 
579 soit équilibré n'est pas pris en compte.
580 En intégrant cette contrainte, ce majorant  pourrait être réduit.
581
582 En effet, le temps de mixage est en $\Theta(N\ln N)$ lors d'une
583 marche aléatoire classique paresseuse dans le $\mathsf{N}$-cube.
584 On peut ainsi conjecturer que cet ordre de grandeur reste le même 
585 dans le contexte du $\mathsf{N}$-cube privé d'un chemin hamiltonien.
586
587 On peut évaluer ceci pratiquement: pour une fonction
588 $f: \Bool^{\mathsf{N}} \rightarrow \Bool^{\mathsf{N}}$ et une graine initiale
589 $x^0$, le code donné à l'algorithme~\ref{algo:stop} retourne le 
590 nombre d'itérations suffisant tel que tous les éléments $\ell\in \llbracket 1,{\mathsf{N}} \rrbracket$ sont équitables. Il permet de déduire une approximation de $E[\ts]$
591 en l'instanciant un grand nombre de fois: pour chaque nombre $\mathsf{N}$, 
592 $ 3 \le \mathsf{N} \le 16$, 10 fonctions ont été générées comme dans 
593 ce chapitre. Pour chacune d'elle, le calcul d'une approximation de $E[\ts]$
594 est exécuté 10000 fois avec une graine aléatoire. La Figure~\ref{fig:stopping:moy}
595 résume ces résultats. Dans celle-ci, un cercle  représente une approximation de 
596 $E[\ts]$ pour un  $\mathsf{N}$ donné tandis que la courbe est une représentation de 
597 la fonction $x \mapsto 2x\ln(2x+8)$. 
598 On  constate que l'approximation de $E[\ts]$ est largement inférieure 
599 au majorant quadratique donné au théorème~\ref{prop:stop} et que la conjecture 
600 donnée au paragraphe précédent est sensée.
601
602
603 \begin{algorithm}[ht]
604 %\begin{scriptsize}
605 \KwIn{a function $f$, an initial configuration $x^0$ ($\mathsf{N}$ bits)}
606 \KwOut{a number of iterations $\textit{nbit}$}
607
608 $\textit{nbit} \leftarrow 0$\;
609 $x\leftarrow x^0$\;
610 $\textit{fair}\leftarrow\emptyset$\;
611 \While{$\left\vert{\textit{fair}}\right\vert < \mathsf{N} $}
612 {
613         $ s \leftarrow \textit{Random}(\mathsf{N})$ \;
614         $\textit{image} \leftarrow f(x) $\;
615         \If{$\textit{Random}(1) \neq 0$ and $x[s] \neq \textit{image}[s]$}{
616             $\textit{fair} \leftarrow \textit{fair} \cup \{s\}$\;
617             $x[s] \leftarrow \textit{image}[s]$\;
618           }
619         $\textit{nbit} \leftarrow \textit{nbit}+1$\;
620 }
621 \Return{$\textit{nbit}$}\;
622 %\end{scriptsize}
623 \caption{Pseudo Code pour évaluer le temps d'arrêt}
624 \label{algo:stop}
625 \end{algorithm}
626
627
628 \begin{figure}
629 \centering
630 \includegraphics[width=0.49\textwidth]{images/complexityET}
631 \caption{Interpolation du temps d'arrêt}\label{fig:stopping:moy}
632 \end{figure}
633
634
635
636
637 \section{Et les itérations généralisées?}\label{sec:prng:gray:general}
638 Le chapitre précédent a présenté un algorithme de 
639 PRNG construit à partir d'itérations unaires. 
640 On pourrait penser que cet algorithme est peu efficace puisqu'il 
641 dispose d'une fonction $f$ de $\Bool^n$ dans lui même mais il ne modifie à 
642 chaque itération qu'un seul élément de $[n]$.
643 On pourrait penser à un algorithme basé sur les itérations généralisées, 
644 c'est-à-dire qui modifierait une partie des éléments de $[n]$ à chaque 
645 itération.
646 C'est l'algorithme~\ref{CI Algorithm:prng:g} donné ci-après.
647
648 \begin{algorithm}[ht]
649 %\begin{scriptsize}
650 \KwIn{une fonction $f$, un nombre d'itérations $b$, 
651 une configuration initiale $x^0$ ($n$ bits)}
652 \KwOut{une configuration $x$ ($n$ bits)}
653 $x\leftarrow x^0$\;
654 $k\leftarrow b $\;
655 \For{$i=1,\dots,k$}
656 {
657 $s\leftarrow{\textit{Set}(\textit{Random}(2^n))}$\;
658 $x\leftarrow{F_{f_g}(s,x)}$\;
659 }
660 return $x$\;
661 %\end{scriptsize}
662 \caption{PRNG basé sur les itérations généralisées.}
663 \label{CI Algorithm:prng:g}
664 \end{algorithm}
665
666 Par rapport à l'algorithme~\ref{CI Algorithm} seule 
667 la ligne $s\leftarrow{\textit{Set}(\textit{Random}(2^n))}$ est différente.
668 Dans celle-ci la fonction  $\textit{Set}   :    \{1,\ldots,2^n\}   \rightarrow
669 \mathcal{P}(\{1,\ldots   n\})$   retourne  l'ensemble   dont   la   fonction
670 caractéristique  serait  représentée par  le  nombre  donné  en argument.
671 Par exemple, pour $n=3$, l'ensemble $\textit{Set}(6)$ vaudrait $\{3,2\}$.
672 On remarque aussi que l'argument de la fonction  $\textit{Random}$
673 passe de $n$ à $2^n$.
674
675 On a le théorème suivant qui étend le théorème~\ref{thm:prng:u} aux itérations
676 généralisées.
677
678 \begin{theorem}\label{thm:prng:g}
679   Soit $f: \Bool^{n} \rightarrow \Bool^{n}$, $\textsc{gig}(f)$ son 
680   graphe des itérations généralisées, $\check{M}$ la matrice d'adjacence
681   correspondante à ce graphe 
682   et $M$ une matrice  $2^n\times 2^n$  
683   définie par 
684   $M = \dfrac{1}{2^n} \check{M}$.
685   Si $\textsc{gig}(f)$ est fortement connexe, alors 
686   la sortie du générateur de nombres pseudo aléatoires détaillé par 
687   l'algorithme~\ref{CI Algorithm:prng:g} suit une loi qui 
688   tend vers la distribution uniforme si 
689   et seulement si  $M$ est une matrice doublement stochastique.
690 \end{theorem}
691
692 La preuve de ce théorème est la même que celle du théorème~\ref{thm:prng:u}.
693 Elle n'est donc pas rappelée.
694
695 \begin{xpl}
696
697   On reprend l'exemple donné à la section~\ref{sec:plc}.
698   On considère le cycle hamiltonien défini par la séquence
699   $000,100,101,001,011,111,110,010,000$. En supprimant celui-ci dans 
700   le $3$-cube, cela engendre 
701   la fonction $f^*$ définie par 
702   $$f^*(x_1,x_2,x_3)=
703   (x_2 \oplus x_3, \overline{x_1}.\overline{x_3} + x_1\overline{x_2},
704 \overline{x_1}.\overline{x_3} + x_1x_2).
705 $$ 
706
707 Le graphe  $\textsc{gig}(f^*)$  est représenté à la 
708 Figure~\ref{fig:iteration:f*}.
709 La matrice de Markov $M$ correspondante est donnée à 
710 la figure~\ref{fig:markov:f*}.
711
712 \begin{figure}[ht]
713   \begin{center}
714     \subfigure[Graphe $\textsc{gig}(f^*)$
715     \label{fig:iteration:f*}]{
716       \begin{minipage}{0.55\linewidth}
717         \centering
718         \includegraphics[width=\columnwidth]{images/iter_f}%
719       \end{minipage}
720     }%
721     \subfigure[Matrice de Markov associée au $\textsc{gig}(f^*)$
722     \label{fig:markov:f*}]{%
723       \begin{minipage}{0.35\linewidth}
724         \begin{scriptsize}
725           \begin{center}
726             $ \dfrac{1}{4} \left(
727               \begin{array}{cccccccc}
728                 1 & 1 & 1 & 1 & 0 & 0 & 0 & 0 \\
729               
730                 1 & 1 & 0 & 0 & 1 & 1 & 0 & 0 \\
731               
732                 0 & 0 & 1 & 1 & 0 & 0 & 1 & 1 \\
733               
734                 1 & 1 & 1 & 1 & 0 & 0 & 0 & 0 \\
735               
736                 1 & 0 & 1 & 0 & 1 & 0 & 1 & 0 \\
737               
738                 0 & 0 & 0 & 0 & 1 & 1 & 1 & 1 \\
739               
740                 0 & 0 & 0 & 0 & 1 & 1 & 1 & 1 \\
741               
742                 0 & 1 & 0 & 1 & 0 & 1 & 0 & 1 \\
743               
744               \end{array}            \right) $
745           \end{center}
746         \end{scriptsize}
747       \end{minipage}
748     }%
749     \caption{Représentations de $f^*(x_1,x_2,x_3)=
750       (x_2 \oplus x_3, \overline{x_1}.\overline{x_3} + x_1\overline{x_2},
751       \overline{x_1}.\overline{x_3} + x_1x_2)$.}\label{fig1}
752   \end{center}
753 \end{figure}
754 \end{xpl}
755
756
757
758 \begin{table}[ht]
759   \begin{center}
760     \begin{scriptsize}
761       \begin{tabular}{|c|c|l|c|c|}
762         \hline
763         $n$ & fonction  & $f(x)$, $f(x)$ pour $x \in [0,1,2,\hdots,2^n-1]$                 & $b$ & $b'$ \\ 
764         \hline
765         4 & $f^{*4}$ & [13,10,9,14,3,11,1,12,15,4,7,5,2,6,0,8]                          & \textbf{17}  & \textbf{38}   \\
766         \hline
767          \multirow{4}{0.5cm}{5}& $f^{*5}$  & [29, 22, 25, 30, 19, 27, 24, 16, 21, 6, 5, 28, 23, 26, 1,        & \textbf{13}  & 48   \\
768             &   & 17, 31, 12, 15, 8, 10, 14, 13, 9, 3, 2, 7, 20, 11, 18, 0, 4]     &     &      \\
769         \cline{2-5}
770          & $g^{*5}$  & [29, 22, 21, 30, 19, 27, 24, 28, 7, 20, 5, 4, 23, 26, 25,                                                                                        & 15  & \textbf{47}   \\
771             &   & 17, 31, 12, 15, 8, 10, 14, 13, 9, 3, 2, 1, 6, 11, 18, 0, 16
772                                                                                            &     &      \\
773         
774         \hline
775         \multirow{8}{0.5cm}{6}& $f^{*6}$  & 
776      [55, 60, 45, 56, 58, 42, 61, 40, 53, 50, 52, 54, 59, 34, 33, & \multirow{4}{0.5cm}{\textbf{11}}& \multirow{4}{0.5cm}{55}\\
777 & & 49, 39, 62, 47, 46, 11, 43, 57, 8, 37, 6, 36, 4, 51, 38, 1, & & \\
778 & & 48, 63, 26, 25, 30, 19, 27, 17, 28, 31, 20, 23, 21, 18, 22, & & \\
779 & & 16, 24, 13, 12, 29, 44, 10, 14, 41, 0, 15, 2, 7, 5, 35, 3, 9, 32] & &\\    
780         \cline{2-5}
781 &$g^{*6}$ &     [55, 60, 45, 44, 43, 62, 61, 48, 53, 50, 52, 36, 59, 51, 33, & \multirow{4}{0.5cm}{12}&  \multirow{4}{0.5cm}{\textbf{54}}\\
782     & & 49, 15, 14, 47, 46, 35, 58, 57, 56, 7, 54, 39, 37, 3, 38, 1, & & \\
783     & &  40, 63, 26, 25, 30, 19, 27, 17, 28, 31, 20, 23, 21, 18, 22,  & & \\
784     & &  16, 24, 13, 12, 29, 8, 10, 42, 41, 0, 5, 2, 4, 6, 11, 34, 9, 32] & & \\
785  \hline
786          \multirow{9}{0.5cm}{7}            &$f^{*7}$ & [111, 94, 93, 116, 122, 114, 125, 88, 115, 126, 85, 84, 123,     & \multirow{9}{0.5cm}{\textbf{10}}    & \multirow{9}{0.5cm}{\textbf{63}}     \\ 
787                  & & 98, 81, 120, 109, 78, 105, 110, 99, 107, 104, 108, 101, 118,     &     &      \\ 
788                  & & 117, 96, 103, 66, 113, 64, 79, 86, 95, 124, 83, 91, 121, 24,     &     &      \\ 
789                  & & 119, 22, 69, 20, 87, 18, 17, 112, 77, 76, 73, 12, 74, 106, 72,   &     &      \\ 
790                  & & 8, 7, 102, 71, 100, 75, 82, 97, 0, 127, 54, 57, 62, 51, 59,     &     &      \\ 
791                  & & 56, 48, 53, 38, 37, 60, 55, 58, 33, 49, 63, 44, 47, 40, 42,     &     &      \\ 
792                  & & 46, 45, 41, 35, 34, 39, 52, 43, 50, 32, 36, 29, 28, 61, 92,     &     &      \\ 
793                  & & 26, 90, 89, 25, 19, 30, 23, 4, 27, 2, 16, 80, 31, 10, 15, 14,     &     &      \\ 
794                  & & 3, 11, 13, 9, 5, 70, 21, 68, 67, 6, 65, 1] & & \\
795         \hline
796          \multirow{20}{0.5cm}{8}   &        $f^{*8}$  &
797 [223, 190, 249, 254, 187, 251, 233, 232, 183, 230, 247, 180,& 
798 \multirow{20}{0.5cm}{9}& 
799 \multirow{20}{0.5cm}{71}\\ 
800 & & 227, 178, 240, 248, 237, 236, 253, 172, 203, 170, 201, 168,& & \\ 
801 & & 229, 166, 165, 244, 163, 242, 241, 192, 215, 220, 205, 216,& & \\ 
802 & & 218, 222, 221, 208, 213, 210, 212, 214, 219, 211, 217, 209,& & \\ 
803 & & 239, 202, 207, 140, 139, 234, 193, 204, 135, 196, 199, 132,& & \\ 
804 & & 194, 130, 225, 200, 159, 62, 185, 252, 59, 250, 169, 56, 191,& & \\ 
805 & & 246, 245, 52, 243, 50, 176, 48, 173, 238, 189, 44, 235, 42,& & \\ 
806 & & 137, 184, 231, 38, 37, 228, 35, 226, 177, 224, 151, 156, 141,& & \\ 
807 & & 152, 154, 158, 157, 144, 149, 146, 148, 150, 155, 147, 153,& & \\ 
808 & & 145, 175, 206, 143, 12, 11, 142, 129, 128, 7, 198, 197, 4, 195,& & \\ 
809 & & 2, 161, 160, 255, 124, 109, 108, 122, 126, 125, 112, 117, 114,& & \\ 
810 & & 116, 100, 123, 98, 97, 113, 79, 106, 111, 110, 99, 74, 121,& & \\ 
811 & & 120, 71, 118, 103, 101, 115, 66, 65, 104, 127, 90, 89, 94, 83,& & \\ 
812 & & 91, 81, 92, 95, 84, 87, 85, 82, 86, 80, 88, 77, 76, 93, 72,& & \\ 
813 & & 107, 78, 105, 64, 69, 102, 68, 70, 75, 67, 73, 96, 55, 58, 45,& & \\ 
814 & & 188, 51, 186, 61, 40, 119, 182, 181, 53, 179, 54, 33, 49, 15,& & \\ 
815 & & 174, 47, 60, 171, 46, 57, 32, 167, 6, 36, 164, 43, 162, 1, 0,& & \\ 
816 & & 63, 26, 25, 30, 19, 27, 17, 28, 31, 20, 23, 21, 18, 22, 16,& & \\ 
817 & & 24, 13, 10, 29, 14, 3, 138, 41, 136, 39, 134, 133, 5, 131,& & \\ 
818 & & 34, 9, 8]&&\\
819         \hline
820       \end{tabular}
821     \end{scriptsize}
822   \end{center}
823 \caption{Fonctions avec matrices DSCC et le plus faible temps de mélange}\label{table:functions}
824 \end{table}
825
826 Le  tableau~\ref{table:functions} reprend  une synthèse de 
827 fonctions qui  ont été  générées selon  la méthode détaillée  
828 à la  section~\ref{sec:hamiltonian}.
829 Pour  chaque nombre $n=3$,  $4$, $5$ et $6$,
830 tous  les cycles  hamiltoniens non isomorphes  ont été générés.   Pour les
831 valeur de $n=7$ et $8$,  seuls $10^{5}$ cycles ont été évalués.  Parmi
832 toutes  les fonctions  obtenues en  enlevant du  $n$-cube ces  cycles,  n'ont été
833 retenues que celles  qui minimisaient le temps de mélange relatif  à une valeur de
834 $\epsilon$ fixée à $10^{-8}$ et pour un mode donné.  
835 Ce  nombre d'itérations (\textit{i.e.}, ce temps de mélange) 
836 est stocké dans la troisième
837 colonne sous la variable $b$.  
838 La variable $b'$ reprend le temps de mélange pour
839 l'algorithme~\ref{CI Algorithm}. 
840 On note que pour un nombre $n$ de bits fixé et un mode donné d'itérations, 
841 il peut y avoir plusieurs fonctions minimisant ce temps de mélange. De plus, comme ce temps 
842 de mélange est construit à partir de la matrice de Markov et que celle-ci dépend 
843 du mode, une fonction peut être optimale pour un mode et  ne pas l'être pour l'autre
844 (c.f. pour $n=5$).
845
846 Un second  résultat est  que ce nouvel  algorithme réduit grandement  le nombre
847 d'itérations  suffisant pour  obtenir une  faible  déviation par  rapport à  une
848 distribution uniforme.  On constate de  plus que ce nombre décroît avec
849 le nombre d'éléments alors qu'il augmente dans l'approche initiale où 
850 l'on marche.
851
852 Cela s'explique assez simplement. Depuis une configuration initiale, le nombre 
853 de configurations qu'on ne peut pas atteindre en une itération est de: 
854 \begin{itemize}
855 \item $2^n-n$ en unaire. Ceci représente un rapport de 
856   $\dfrac{2^n-n}{2^n} = 1-\dfrac{n}{2^n}$ 
857   de toutes les configurations; plus $n$ est grand, 
858   plus ce nombre est proche de $1$, et plus grand devient le nombre 
859   d'itérations nécessaires pour atteinte une déviation faible;
860 \item $2^n-2^{n-1}$ dans le cas généralisé,
861   soit la moitié de toutes les configurations 
862   quel que soit $n$; seul 1 bit reste constant tandis que tous les autres peuvent changer. Plus $n$ grandit, plus la proportion de bits constants diminue.
863 \end{itemize}
864
865 Cependant, dans le cas généralisé, chaque itération a une complexité 
866 plus élevée puisqu'il est nécessaire d'invoquer un générateur
867 produisant un nombre pseudo-aléatoire dans $[2^{n}]$ tandis qu'il suffit 
868 que celui-ci soit dans $[n]$ dans le cas unaire.
869 Pour comparer les deux approches, 
870 on considère que le générateur aléatoire embarqué est binaire, \textit{i.e.} ne génère qu'un bit (0 ou 1).
871
872 Dans le cas généralisé, si l'on effectue $b$ itérations, 
873 à chacune d'elles, la stratégie génère un nombre entre
874 $1$ et $2^n$. Elle fait donc $n$ appels à ce générateur.
875 On fait donc au total $b*n$ appels pour $n$ bits et
876 donc $b$ appels pour 1 bit généré en moyenne.
877 Dans le cas unaire, si l'on effectue $b'$ itérations, 
878 à chacune d'elle, la stratégie génère un nombre entre
879 $1$ et $n$. 
880 Elle fait donc $\ln(n)/\ln(2)$ appels à ce générateur binaire en moyenne. 
881 La démarche fait donc au total $b'*\ln(n)/\ln(2)$ appels pour $n$ bits et
882 donc $b'*\ln(n)/(n*\ln(2))$ appels pour 1 bit généré en moyenne.
883 Le tableau~\ref{table:marchevssaute} donne des instances de 
884 ces valeurs pour $n \in\{4,5,6,7,8\}$ et les fonctions  
885 données au tableau~\ref{table:functions}.
886 On constate que le nombre d'appels par bit généré décroît avec $n$ dans le 
887 cas des itérations généralisées et est toujours plus faible
888 que celui des itérations unaires.
889
890
891
892 \begin{table}[ht]
893 $$
894 \begin{array}{|l|l|l|l|l|l|}
895 \hline
896 \textrm{Itérations} & 4 & 5 & 6 & 7 & 8 \\ 
897 \hline
898 \textrm{Unaires}         &  19.0 & 22.3  & 23.7 & 25.3 & 27.0\\  
899 \hline
900 \textrm{Généralisées}    &  17   & 13    & 11   & 10   & 9\\
901 \hline
902 \end{array}
903 $$
904 \caption{Nombre moyen 
905   d'appels à un générateur binaire par bit généré}\label{table:marchevssaute}
906 \end{table}
907
908
909
910
911 \section{Tests statistiques}\label{sec:prng;gray:tests}
912
913 La qualité des séquences aléatoires produites par 
914 le générateur des itérations unaires ainsi que 
915 celles issues des itérations généralisées a été évaluée à travers la suite 
916 de tests statistiques développée par le 
917 \emph{National Institute of Standards and Technology} (NIST).
918 En interne, c'est l'implantation de l'algorithme de Mersenne Twister qui
919 permet de générer la stratégie aléatoire.
920
921
922
923
924  Pour les 15 tests, le seuil $\alpha$ est fixé à $1\%$:
925  une  valeur  
926  qui est plus grande que $1\%$  signifie 
927  que la chaîne est considérée comme aléatoire avec une confiance de $99\%$.
928
929
930 Les tableaux~\ref{fig:TEST:generalise} donnent
931 une vision synthétique de ces expérimentations. 
932 Nous avons évalué les fonctions préfixées par 
933 $f$ (respectivement $g$) avec les générateurs issus des itérations 
934 généralisées (resp. unaires).
935 Quelle que soit la méthode utilisée, on constate que chacun des 
936 générateurs passe 
937 avec succès le test de NIST. 
938
939 Interpréter ces résultats en concluant que ces générateurs sont 
940 tous équivalents serait erroné: la meilleure des 
941 méthodes basées sur le mode des itérations
942 généralisées (pour $n=8$ par exemple) 
943 est au moins deux fois plus rapide que la meilleure de celles qui 
944 sont basées sur les itérations unaires.
945
946
947
948
949 %%%%%%%%% Relancer pour n=6, n=7, n=8
950 %%%%%%%%% Recalculer le MT
951 %%%%%%%%% Regenerer les 10^6 bits
952 %%%%%%%%% Evaluer sur NIST
953  
954 \begin{table}[ht]
955   \centering
956   \begin{scriptsize}
957
958
959 \begin{tabular}{|l|r|r|r|r|}
960  \hline 
961 Test & $f^{*5}$ &$f^{*6}$ &$f^{*7}$ &$f^{*8}$ \\ \hline 
962 Fréquence (Monobit)& 0.401 (0.97)& 0.924 (1.0)& 0.779 (0.98)& 0.883 (0.99)\\ \hline 
963 Fréquence ds un bloc& 0.574 (0.98)& 0.062 (1.0)& 0.978 (0.98)& 0.964 (0.98)\\ \hline 
964 Somme Cumulé*& 0.598 (0.975)& 0.812 (1.0)& 0.576 (0.99)& 0.637 (0.99)\\ \hline 
965 Exécution& 0.998 (0.99)& 0.213 (0.98)& 0.816 (0.98)& 0.494 (1.0)\\ \hline 
966 Longue exécution dans un bloc& 0.085 (0.99)& 0.971 (0.99)& 0.474 (1.0)& 0.574 (0.99)\\ \hline 
967 Rang& 0.994 (0.96)& 0.779 (1.0)& 0.191 (0.99)& 0.883 (0.99)\\ \hline 
968 Fourier rapide& 0.798 (1.0)& 0.595 (0.99)& 0.739 (0.99)& 0.595 (1.0)\\ \hline 
969 Patron sans superposition*& 0.521 (0.987)& 0.494 (0.989)& 0.530 (0.990)& 0.520 (0.989)\\ \hline 
970 Patron avec superposition& 0.066 (0.99)& 0.040 (0.99)& 0.304 (1.0)& 0.249 (0.98)\\ \hline 
971 Statistiques universelles& 0.851 (0.99)& 0.911 (0.99)& 0.924 (0.96)& 0.066 (1.0)\\ \hline 
972 Entropie approchée (m=10)& 0.637 (0.99)& 0.102 (0.99)& 0.115 (0.99)& 0.350 (0.98)\\ \hline 
973 Suite aléatoire *& 0.573 (0.981)& 0.144 (0.989)& 0.422 (1.0)& 0.314 (0.984)\\ \hline 
974 Suite aléatoire variante *& 0.359 (0.968)& 0.401 (0.982)& 0.378 (0.989)& 0.329 (0.985)\\ \hline 
975 Série* (m=10)& 0.469 (0.98)& 0.475 (0.995)& 0.473 (0.985)& 0.651 (0.995)\\ \hline 
976 Complexité linaire& 0.129 (1.0)& 0.494 (1.0)& 0.062 (1.0)& 0.739 (1.0)\\ \hline 
977
978 \end{tabular}
979   \end{scriptsize}
980
981
982 \caption{Test de NIST pour les fonctions 
983   du tableau~\ref{table:functions} selon les itérations généralisées}\label{fig:TEST:generalise}
984 \end{table}
985
986
987 \begin{table}[ht]
988   \centering
989   \begin{scriptsize}
990 \begin{tabular}{|l|r|r|r|r|}
991 \hline 
992 Test & $g^{*5}$& $g^{*6}$& $f^{*7}$& $f^{*8}$\\ \hline 
993 Fréquence (Monobit)& 0.236 (1.0)& 0.867 (0.99)& 0.437 (0.99)& 0.911 (1.0)\\ \hline 
994 Fréquence ds un bloc& 0.129 (0.98)& 0.350 (0.99)& 0.366 (0.96)& 0.657 (1.0)\\ \hline 
995 Somme Cumulé*& 0.903 (0.995)& 0.931 (0.985)& 0.863 (0.995)& 0.851 (0.995)\\ \hline 
996 Exécution& 0.699 (0.98)& 0.595 (0.99)& 0.181 (1.0)& 0.437 (0.99)\\ \hline 
997 Longue exécution dans un bloc& 0.009 (0.99)& 0.474 (0.97)& 0.816 (1.0)& 0.051 (1.0)\\ \hline 
998 Rang& 0.946 (0.96)& 0.637 (0.98)& 0.494 (1.0)& 0.946 (1.0)\\ \hline 
999 Fourier rapide& 0.383 (0.99)& 0.437 (1.0)& 0.616 (0.98)& 0.924 (0.99)\\ \hline 
1000 Patron sans superposition*& 0.466 (0.990)& 0.540 (0.989)& 0.505 (0.990)& 0.529 (0.991)\\ \hline 
1001 Patron avec superposition& 0.202 (0.96)& 0.129 (0.98)& 0.851 (0.99)& 0.319 (0.98)\\ \hline 
1002 Statistiques universelles& 0.319 (0.97)& 0.534 (0.99)& 0.759 (1.0)& 0.657 (0.99)\\ \hline 
1003 Entropie approchée (m=10)& 0.075 (0.97)& 0.181 (0.99)& 0.213 (0.98)& 0.366 (0.98)\\ \hline 
1004 Suite aléatoire *& 0.357 (0.986)& 0.569 (0.991)& 0.539 (0.987)& 0.435 (0.992)\\ \hline 
1005 Suite aléatoire variante *& 0.398 (0.989)& 0.507 (0.986)& 0.668 (0.991)& 0.514 (0.994)\\ \hline 
1006 Série* (m=10)& 0.859 (0.995)& 0.768 (0.99)& 0.427 (0.995)& 0.637 (0.98)\\ \hline 
1007 Complexité linaire& 0.897 (0.99)& 0.366 (0.98)& 0.153 (1.0)& 0.437 (1.0)\\ \hline 
1008
1009 \end{tabular}
1010 \end{scriptsize}
1011
1012
1013 \caption{Test de NIST pour les fonctions 
1014   du tableau~\ref{table:functions} selon les itérations unaires}\label{fig:TEST:unaire}
1015 \end{table}
1016
1017
1018 \begin{table}[ht]
1019   \centering
1020   \begin{scriptsize}
1021
1022 \begin{tabular}{|l|r|r|r|r|}
1023  \hline 
1024 Test & 5 bits& 6 bits & 7 bits & 8bits  \\ \hline 
1025 Fréquence (Monobit)& 0.289 (1.0)& 0.437 (1.0)& 0.678 (1.0)& 0.153 (0.99)\\ \hline 
1026 Fréquence ds un bloc& 0.419 (1.0)& 0.971 (0.98)& 0.419 (0.99)& 0.275 (1.0)\\ \hline 
1027 Somme Cumulé*& 0.607 (0.99)& 0.224 (0.995)& 0.645 (0.995)& 0.901 (0.99)\\ \hline 
1028 Exécution& 0.129 (0.99)& 0.005 (0.99)& 0.935 (0.98)& 0.699 (0.98)\\ \hline 
1029 Longue exécution dans un bloc& 0.514 (1.0)& 0.739 (0.99)& 0.994 (1.0)& 0.834 (0.99)\\ \hline 
1030 Rang& 0.455 (0.97)& 0.851 (0.99)& 0.554 (1.0)& 0.964 (0.99)\\ \hline 
1031 Fourier rapide& 0.096 (0.98)& 0.955 (0.99)& 0.851 (0.97)& 0.037 (1.0)\\ \hline 
1032 Patron sans superposition*& 0.534 (0.990)& 0.524 (0.990)& 0.508 (0.987)& 0.515 (0.99)\\ \hline 
1033 Patron avec superposition& 0.699 (0.99)& 0.616 (0.95)& 0.071 (1.0)& 0.058 (1.0)\\ \hline 
1034 Statistiques universelles& 0.062 (0.99)& 0.071 (1.0)& 0.637 (1.0)& 0.494 (0.98)\\ \hline 
1035 Entropie approchée (m=10)& 0.897 (0.99)& 0.383 (0.99)& 0.366 (1.0)& 0.911 (0.99)\\ \hline 
1036 Suite aléatoire *& 0.365 (0.983)& 0.442 (0.994)& 0.579 (0.992)& 0.296 (0.993)\\ \hline 
1037 Suite aléatoire variante *& 0.471 (0.978)& 0.559 (0.992)& 0.519 (0.987)& 0.340 (0.995)\\ \hline 
1038 Série* (m=10)& 0.447 (0.985)& 0.298 (0.995)& 0.648 (1.0)& 0.352 (0.995)\\ \hline 
1039 Complexité linaire& 0.005 (0.98)& 0.534 (0.99)& 0.085 (0.97)& 0.996 (1.0)\\ \hline 
1040
1041 \end{tabular}
1042
1043
1044
1045
1046
1047
1048
1049
1050
1051
1052   \end{scriptsize}
1053
1054
1055 \caption{Test de NIST pour l'algorithme de Mersenne Twister}\label{fig:TEST:Mersenne}
1056 \end{table}
1057
1058
1059 \section{Conclusion}
1060 Ce chapitre a montré comment construire un PRNG chaotique, notamment à partir 
1061 de codes de Gray équilibrés. Une méthode complètement automatique de
1062 construction de ce type de codes a été présentée étendant les méthodes 
1063 existantes. 
1064 Dans le cas des itérations unaires, 
1065 l'algorithme qui en découle a un temps de mélange qui a 
1066 un majorant quadratique de convergence vers la distribution uniforme. 
1067 Pratiquement,  ce temps de mélange se rapproche de $N\ln N$.
1068 Les expérimentations au travers de la batterie de test de NIST ont montré
1069 que toutes les propriétés statistiques sont obtenues pour
1070  $\mathsf{N} = 4, 5, 6, 7, 8$.
1071