Explorer les Livres électroniques
Catégories
Explorer les Livres audio
Catégories
Explorer les Magazines
Catégories
Explorer les Documents
Catégories
Contenu :
séance n◦ - (-).
1
Contact : Nedjmeddine Kantour, nadjmeddine.kantour@usthb.edu.com
Contenu de ce cours
• Algorithmes et complexité
• Algorithmes de Tri
• Arbres binaires
• Machines de Turing
• Calculabilité et indécidabilité
2
Rappels : Algorithme,
Algorithmique, Programmes
Qu’est-ce qu’un algorithme ?
Al-Kharezsmi. Né à Bagdad, vers 780 après Jésus-Christ. Il est l’auteur du traité
Kitab al’jabr w’al-muqabala ce qui signifie règles de restaurations et réductions, un titre
qui permet d’identifier l’un des inventeurs de l’algèbre. Par ailleurs, il semble que le mot
algorithme soit une déformation de al Kharezsmi.
3
Qu’est-ce qu’un algorithme ?
5
Qu’est-ce qu’un algorithme ?
Exemples : Calculer les solutions d’un système d’équations. Trier un ensemble de réels.
Rechercher un élément dans un liste.
6
Distinction entre Algorithme et Programme
Dans ce cours, les algorithmes sont écrits en pseudo-code ou en langage Algorithmique. Bien
que les deux notions aient des points communs, il ne faut toutefois pas confondre algorithme
et programme.
1. Un programme n’est pas forcément un algorithme. Un programme ne termine pas
forcément de lui-même (c’est souvent la personne qui l’utilise qui y met fin). Un
programme n’a pas forcément vocation à retourner un résultat. Enfin un programme est
bien souvent un assemblage complexe qui peut employer de nombreux algorithmes
résolvants des problèmes très variés.
2. La nature des algorithmes est plus mathématique que celle des pro-grammes et la
vocation d’un algorithme n’est pas forcément d’être exécutée sur un ordinateur. Les
humains utilisaient des algorithmes bien avant l’ère de l’informatique et la réalisation de
calculateurs mécaniques et électroniques. En fait, les algorithmes ont été au cœur du
développement des mathématiques. Pour autant, ce cours porte sur les algorithmes
pour l’arithmétique (appliquée à la cryptographie).
7
Exemples d’algorithme avant l’ère informatique
Étant donnés deux entiers naturels a et b, on commence par tester si b est nul. Si oui,
alors le P.G.C.D. est égal à a. Sinon, on calcule r, le reste de la division de a par b. On
remplace a par b,et b par r, et on recommence le procédé. Le dernier reste non nul est le
P.G.C.D.
Crible d’Ératosthène : Un autre algorithme très connu est le crible d’Ératosthène (IIIe
siècle av.JC) qui permet de trouver la liste des nombres premiers plus petits qu’un entier
donné quelconque.
Pivot de Gauss : Il y a aussi le pivot de Gauss (ou de Gauss-Jordan) qui est en fait une
méthode bien antérieure à Gauss (Analyse numérique).
8
Algorithmes étudiés
La plupart des algorithmes que nous étudierons datent d’après 1945. Date à laquelle John
Von Neumann introduisit ce qui est sans doute le premier programme de tri (un tri fusion).
9
Algorithmique
10
Passage du problème à l’algorithme, puis au programme
11
Passage du problème à l’algorithme, puis au programme
12
Comment analyser un algorithme ?
• L’algorithme s’arrête-t-il ?
• Est-il correct ?
Autrement dit, la sortie de l’algorithme satisfait-elle toujours la spécification
entrée-sortie que nous souhaitons ?
• Est-il efficace ?
L’efficacité peut être mesurée de plusieurs façons. Par exemple, quel est le temps
d’exécution de l’algorithme ? Quelle est sa consommation de mémoire ?
13
Exemple
Entrées: a, b ∈ R.
Sortie : x0 ∈ R, tel que ax0 + b = 0.
début
1. Calculer −b;
2. Diviser le résultat par a;
fin
14
Exemple
Entrées: a, b ∈ R.
Sortie : x0 ∈ R, tel que ax0 + b = 0.
début
1. Calculer −b;
2. Diviser le résultat par a;
fin
Entrées: a, b ∈ R.
Sortie : x0 ∈ R, tel que ax0 + b = 0.
début
1. x0 := −b/a
fin
14
Calcul de P GCD(a, b)
Rappel : Le terme PGCD désigne le Plus Grand Commun Diviseur de deux nombres entiers
positifs.
15
Calcul de P GCD(a, b)
Entrées: a, b ∈ N∗ , et a > b.
Sortie : P GCD(a, b).
début
tant que b > 0 faire
r ← (a mod b);
a ← b;
b ← r;
fin
Retourner a;
fin
16
Calcul de P GCD(a, b)
Entrées: a, b ∈ N∗ , et a > b.
Sortie : P GCD(a, b).
début
tant que a 6= b faire
si a > b alors
a ← a − b;
sinon
a ← b − a;
fin
fin
Retourner a;
fin
17
Calcul de Puissance
Soit (G, ∗) un groupe commutatif dont on note la loi multiplicativement. On veut calculer
an .
Puissance naı̈ve
Entrées: a ∈ G et n ∈ N∗ .
Sortie : an ∈ G.
début
p ← 1;
tant que n > 1 faire
p ← p ∗ a;
n ← n − 1;
fin
Retourner p;
fin
18
Calcul de Puissance : Puissance rapide
Entrées: a ∈ G et n ∈ N∗ .
Sortie : an ∈ G.
début
u ← 1;
v ← a;
tant que n > 1 faire
si n ≡ 0[2] alors
v ← v ∗ v;
n ← n/2;
sinon
u ← u ∗ v;
v ← v ∗ v;
n ← n/2;
fin
fin
Retourner u ∗ v;
fin
19
Crible d’Ératosthène
Entrées: n ∈ N∗ .
Sortie : list : Liste des nombres premier inférieurs à n.
début
list ← [2, 3, . . . , n];
i ← 1;
tant que i < |list| faire
p ← list[i];
m ← 2 ∗ p;
tant que m ≤ n faire
si m ∈ l alors
list ← list\{m};
m ← m + p;
fin
fin
fin
Retourner list;
fin
20
Test de Fermat
ap−1 ≡ 1[p].
Test de Fermat
On veut déterminer la liste des entiers inférieur à n, n ≥ 5, qui passent le test de
Fermat pour 2 et 3.
21
Test de Fermat
Test de Fermat
Entrées: n ∈ N∗ .
Sortie : list : La liste des entiers inférieur à n, n ≥ 5, qui passent le test de Fermat pour 2 et 3.
début
list ← [2, 3];
pour k ∈ {5, . . . , n} faire
si 2k−1 ≡ 1[k] et 3k−1 ≡ 1[k] alors
list ← list ∪ {k};
fin
fin
Retourner list;
fin
22
L’orthogonalisation de Gram-Schmidt
L’orthogonalisation de Gram-Schmidt est une procédure qui prend une famille de n vecteurs
linéairement indépendants, et crée un ensemble de n vecteurs orthogonaux. Cela fonctionne en
projetant chaque vecteur sur l’espace orthogonal à l’espace engendré par un sous-ensemble de ces
vecteurs.
Theorem
Soit V un sous-espace vectoriel de dimension n et B = (b1 , b2 , . . . , bn ) une base de V . On considère
la famille de vecteurs (b̃1 , b̃2 , . . . , b̃n ) définie par :
• b̃1 = b1 ,
• b̃i est le projeté de bi orthogonalement au sous-espace vectoriel engendré par les i − 1 premiers
vecteurs de B. En d’autre termes :
b̃j ·bi
||b̃ || si i > j,
j
X
b̃i = bi − µi,j b̃j , avec µi,j = 1 si j = i,
j≤i−1
0 sinon.
Alors (b̃1 , b̃2 , . . . , b̃n ) est une base orthogonale de l’espace V , i.e., ∀ i, j ≤ n, i 6= j, b̃i · b̃j = 0.
23
Algorithme de Gram-Shmidt
Algorithme de Gram-Shmidt
pour i = 1 à n faire
b̃[i] ← b[i];
pour j = 1 à i − 1 faire
b̃[j] · b[i]
µ[i, j] ← ;
norme(b̃[j])
b̃[i] ← b̃[i] − µ[i, j]b̃[j];
fin
fin
Retourner B̃, M ;
norme(u) est la norme (i.e., ||u||) du vecteur u. Proposez un algorithme pour le calcul de la norme
24
euclidienne d’un vecteur de dimension quelconque.
Test de primalité
Un nombre N (autre que 1) est premier s’il est divisible par 1 et N lui-même seulement.
Un algorithme de test de primalité se contentera alors à chercher un diviseur d de N ,
différent de 1 et N .
Si un tel diviseur (candidat) existe, N est non premier. Sinon, N est premier. Nous
proposons trois algorithmes pour résoudre le problème de test de primalité :
Test de primalité
Entrées: d ∈ N, d > 1.
Sortie : V ∈ {0, 1}, variable logique.
début
V ← 0;
pour d = 2 à N − 1 faire
si N divisible par d alors
V ← 1;
Retourner V ;
fin
fin
Retourner V ;
fin
26
Test de primalité : Algorithme 2
Test de primalité
Entrées: d ∈ N, d > 1.
Sortie : V ∈ {0, 1}, variable logique.
début
V ← 0;
pour d = 2 à N/2 faire
si N divisible par d alors
V ← 1;
Retourner V ;
fin
fin
Retourner V ;
fin
27
Test de primalité : Algorithme 3
Test de primalité
Entrées: d ∈ N, d > 1.
Sortie : V ∈ {0, 1}, variable logique.
début
V ← 0;
√
pour d = 2 à [ N ] faire
si N divisible par d alors
V ← 1;
Retourner V ;
fin
fin
Retourner V ;
fin
28
Bits réguliers
29
Bits réguliers
Entrées: un message en binaire M = {m1 , m2 , . . . , mk }, avec mi ∈ {0, 1}n , ∀i ∈ {1, . . . , k}, n > 1.
Sortie : Les ensembles d’indices des bits réguliers M0 et M1 .
début
M0 ← ∅; M1 ← ∅;
V ← {0}n ;
pour i = 1 à k faire
pour j = 1 à k faire
V [i] ← V [i] + m[j][i]; % m[j][i] ≡ mji
fin
si V [i] = 0 alors
M0 ← M0 ∪ i;
sinon
si V [i] = k alors
M1 ← M1 ∪ i;
fin
fin
fin
Retourner M0 , M1 ;
fin
30
Générateurs de nombres pseudo-aléatoires
Ces générateurs produisent la suite de nombres (Xn )n≥0 Définis par la relation de récurrence
suivante : pour tout n > 1
On remarque que la suite (Xn ) ainsi définie est périodique à partir d’un certain rang.
Exemples. Générateur IBM Xn+1 = (75 Xn ) mod 231 − 1 de période 220 , générateur Maple
Xn+1 = (427419669081 Xn ) mod 999999999989 de période 229 .
31
Générateurs de nombres pseudo-aléatoires
début
X[0] ← X0 ;
pour i = 1 à n faire
X[i] ← aX[i − 1] + b;
X[i] ← X[i] mod m;
fin
Retourner X;
fin
32
Générateurs de nombres pseudo-aléatoires
Le GCL précédent permet de générer des entiers entre 0 et m − 1. Afin de se ramener à des
réels compris entre 0 et 1, on étudie la suite Un = Xmn
début
X[0] ← X0 ;
pour i = 1 à n faire
X[i] ← aX[i − 1] + b;
X[i] ← aX[i] mod m;
fin
Retourner X/m;
fin
33
Analyse des fréquences (chiffre de César)
• La méthode la plus élémentaire pour chiffrer un message est de remplacer chaque lettre par
une autre selon une règle fixe.
• Le chiffre de César consiste simplement à décaler les lettres de l’alphabet de quelques crans
vers la droite ou la gauche.
• On reconnaı̂t la une congruence modulo 31 : On commence par remplacer a par 1, b par 2, . . . ,
z par 26, ’espace’ par 27, ‘,’ par 28, ‘.’ par 29, ‘?’ par 30 et ‘:’ par 0.
Cette convention permet d’effectuer des calculs sur le texte.
Par exemple, décalons les lettres de 3 rangs vers la gauche, comme le faisait Jules César (d’où
le nom de ce chiffre). Le système César consiste simplement à effectuer une addition de 3
modulo 31. De manière générale :
y ≡ (x + d)[31].
avec d = 3, ou même,
Par sa simplicité et par sa force, ce système a dominé la technique des écritures secrètes pendant
tout le premier millénaire. Il a résisté aux cryptanalystes jusqu’à ce que le savant arabe Abu Yusuf
Ya’qub ibn Is’haq ibn as-Sabbah Omran ibn Ismaı̈l al-Kindi mette au point, au IXème siècle, une
technique appelée Analyse des fréquences.
”Al-Kindi rédige sa méthode dans son plus important traité intitulé Manuscrit sur le déchiffrement
des messages cryptographiques. C’est le premier manuscrit connu faisant mention des fréquences
d’apparition des lettres. Il explique que la façon d’élucider un message crypté, si nous savons dans
quelle langue il est écrit, est de nous procurer un autre texte en clair dans la même langue, de la
longueur d’un feuillet environ, et de compter alors les apparitions de chaque lettre. Ensuite, nous
nous reportons au texte chiffré que nous voulons éclaircir et relevons de même ses symboles. Nous
remplaçons le symbole le plus fréquent par la lettre la plus fréquente du texte clair, le suivant par la
deuxième, le suivant par la troisième, et ainsi de suite jusqu’à ce que nous soyons venus à bout de
tous les symboles du cryptogramme à résoudre”.
35
Analyse des fréquences
36
Analyse des fréquences
37
Analyse des fréquences
38
DM 1 (2 semaines)
Devoir maison :
Répondez à une question de votre choix :
• Analyse des fréquences : Écrire un algorithme qui effectue une analyse des
fréquence sur un message chiffré par le chiffre de César (en sortie : la clé de
chiffrement, et le texte en déchiffré ou en clair).
• Informations régulières : Écrire un algorithme qui génère les ensembles de
variables réguliers Mi , ∀i ∈ {0, . . . t}, avec t en entrée, pour un message M
? quelconque (i.e., k et n quelconques), M = {m1 , m2 , . . . , mk }, avec
mi ∈ {0, . . . , t}n , ∀i ∈ {1, . . . , k}, n > 1.
• Générateurs de nombres pseudo-aléatoires : On veut affecter de manière
aléatoire s sujets à k binômes. Écrire un algorithme qui permet de réaliser une
telle affectation, en considérons le cas où le nombre de binôme est supérieur au
nombre de sujet, i.e., k > s.
39