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

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