transparents

publicité
Recherche d’un
sous-mot
Stéphane Gonnord
Recherche d’un sous-mot
et un peu de crible
Plan
Retour sur la
dichotomie
Recherche d’un
sous-mot
Le problème
Stéphane Gonnord
Avec slicing
Sans slicing
Crible d’Ératosthène
[email protected]
www.mp933.fr
Lycée du parc - Lyon
Vendredi 29 novembre 2013
Lycée du parc
Recherche de tous les
nombres premiers
Le crible
Recherche d’un
sous-mot
Plan
Stéphane Gonnord
1. Retour sur la dichotomie
2. Recherche d’un sous-mot
I
I
I
Problème ; principe.
Mise en œuvre.
Complexité. Améliorations.
3. Le crible d’Érathosthène
I
I
I
Le problème ; une solution naïve.
Principe du crible.
Mise en place.
Plan
Retour sur la
dichotomie
Recherche d’un
sous-mot
Le problème
Avec slicing
Sans slicing
Crible d’Ératosthène
Recherche de tous les
nombres premiers
Le crible
Retour sur la dichotomie
I
Pour chercher une valeur dans un tableau trié : ln n
requètes.
Recherche d’un
sous-mot
Stéphane Gonnord
Plan
Retour sur la
dichotomie
Recherche d’un
sous-mot
Le problème
Avec slicing
Sans slicing
Crible d’Ératosthène
Recherche de tous les
nombres premiers
Le crible
Recherche d’un
sous-mot
Retour sur la dichotomie
I
I
Stéphane Gonnord
Pour chercher une valeur dans un tableau trié : ln n
requètes.
Pour approcher une solution de f (x ) = 0 avec f
continue : dans quelques semaines !
Plan
Retour sur la
dichotomie
Recherche d’un
sous-mot
Le problème
Avec slicing
a0
b0
a1
b1
a2
Recherche de tous les
nombres premiers
b2
a3
a4
b3
b4
Le crible
y = x2 −2
a5 b5
1.25
1
1.375
1.40625
I
1.5
p
2
Sans slicing
Crible d’Ératosthène
2
1.4375
Approximation de x0 à ε près en temps O (ln ε).
Le(s) problème(s)
I
Rechercher tag dans pouettagada...
Recherche d’un
sous-mot
Stéphane Gonnord
Plan
Retour sur la
dichotomie
Recherche d’un
sous-mot
Le problème
Avec slicing
Sans slicing
Crible d’Ératosthène
Recherche de tous les
nombres premiers
Le crible
Le(s) problème(s)
I
Rechercher tag dans pouettagada...
I
Ou truc dans pouettagada...
Recherche d’un
sous-mot
Stéphane Gonnord
Plan
Retour sur la
dichotomie
Recherche d’un
sous-mot
Le problème
Avec slicing
Sans slicing
Crible d’Ératosthène
Recherche de tous les
nombres premiers
Le crible
Le(s) problème(s)
I
Rechercher tag dans pouettagada...
I
Ou truc dans pouettagada...
I
Ou encore tag dans pouettagadatagaplof...
Recherche d’un
sous-mot
Stéphane Gonnord
Plan
Retour sur la
dichotomie
Recherche d’un
sous-mot
Le problème
Avec slicing
Sans slicing
Crible d’Ératosthène
Recherche de tous les
nombres premiers
Le crible
Le(s) problème(s)
I
Rechercher tag dans pouettagada...
I
Ou truc dans pouettagada...
I
Ou encore tag dans pouettagadatagaplof...
I
Voire [1,3,2] dans [12,15,1,3,2,10,1,3,2,42].
Recherche d’un
sous-mot
Stéphane Gonnord
Plan
Retour sur la
dichotomie
Recherche d’un
sous-mot
Le problème
Avec slicing
Sans slicing
Crible d’Ératosthène
Recherche de tous les
nombres premiers
Le crible
Le(s) problème(s)
I
Rechercher tag dans pouettagada...
I
Ou truc dans pouettagada...
I
Ou encore tag dans pouettagadatagaplof...
I
Voire [1,3,2] dans [12,15,1,3,2,10,1,3,2,42].
I
Mais quelle misère !
>>> ’tag’ in ’pouettagada’
True
>>> ’truc’ in ’pouettagada’
False
Recherche d’un
sous-mot
Stéphane Gonnord
Plan
Retour sur la
dichotomie
Recherche d’un
sous-mot
Le problème
Avec slicing
Sans slicing
Crible d’Ératosthène
Recherche de tous les
nombres premiers
Le crible
Recherche d’un
sous-mot
Le(s) problème(s)
Stéphane Gonnord
I
Rechercher tag dans pouettagada...
I
Ou truc dans pouettagada...
I
Ou encore tag dans pouettagadatagaplof...
I
Voire [1,3,2] dans [12,15,1,3,2,10,1,3,2,42].
I
Mais quelle misère !
Retour sur la
dichotomie
Recherche d’un
sous-mot
Le problème
Avec slicing
Sans slicing
Crible d’Ératosthène
>>> ’tag’ in ’pouettagada’
True
>>> ’truc’ in ’pouettagada’
False
I
Plan
Par contre :
>>> [1,3,2] in [12,15,1,3,2,10,1,3,2,42]
False
OUF !
Recherche de tous les
nombres premiers
Le crible
Slicing autorisé
I
Rappel :
>>> liste = [10,15,30,40]
>>> liste[1:3]
[15, 30]
Recherche d’un
sous-mot
Stéphane Gonnord
Plan
Retour sur la
dichotomie
Recherche d’un
sous-mot
Le problème
Avec slicing
Sans slicing
Crible d’Ératosthène
Recherche de tous les
nombres premiers
Le crible
Slicing autorisé
I
Rappel :
>>> liste = [10,15,30,40]
>>> liste[1:3]
[15, 30]
Recherche d’un
sous-mot
Stéphane Gonnord
Plan
Retour sur la
dichotomie
Recherche d’un
sous-mot
Le problème
Avec slicing
>>> chaine = "tagadaplof"
>>> chaine[2:5]
’gad’
Sans slicing
Crible d’Ératosthène
Recherche de tous les
nombres premiers
Le crible
Slicing autorisé
I
Rappel :
>>> liste = [10,15,30,40]
>>> liste[1:3]
[15, 30]
Recherche d’un
sous-mot
Stéphane Gonnord
Plan
Retour sur la
dichotomie
Recherche d’un
sous-mot
Le problème
Avec slicing
>>> chaine = "tagadaplof"
>>> chaine[2:5]
’gad’
I
Et donc :
Entrées : m1 , m2
lg1 , lg2 ← |m1 | , |m2 | # les longueurs
pour d allant de 0 à lg2 − lg1 faire
si m2 [d : d + lg1 ] = m1 alors
Résultat : True
Résultat : False
Sans slicing
Crible d’Ératosthène
Recherche de tous les
nombres premiers
Le crible
Slicing autorisé
I
Rappel :
>>> liste = [10,15,30,40]
>>> liste[1:3]
[15, 30]
Recherche d’un
sous-mot
Stéphane Gonnord
Plan
Retour sur la
dichotomie
Recherche d’un
sous-mot
Le problème
Avec slicing
>>> chaine = "tagadaplof"
>>> chaine[2:5]
’gad’
I
I
Et donc :
Entrées : m1 , m2
lg1 , lg2 ← |m1 | , |m2 | # les longueurs
pour d allant de 0 à lg2 − lg1 faire
si m2 [d : d + lg1 ] = m1 alors
Résultat : True
Résultat : False
Complexité : au pire |m2 |...
Sans slicing
Crible d’Ératosthène
Recherche de tous les
nombres premiers
Le crible
Slicing autorisé
I
Rappel :
>>> liste = [10,15,30,40]
>>> liste[1:3]
[15, 30]
Recherche d’un
sous-mot
Stéphane Gonnord
Plan
Retour sur la
dichotomie
Recherche d’un
sous-mot
Le problème
Avec slicing
>>> chaine = "tagadaplof"
>>> chaine[2:5]
’gad’
I
I
Et donc :
Entrées : m1 , m2
lg1 , lg2 ← |m1 | , |m2 | # les longueurs
pour d allant de 0 à lg2 − lg1 faire
si m2 [d : d + lg1 ] = m1 alors
Résultat : True
Résultat : False
Complexité : au pire |m2 |... ou plutôt |m1 | × |m2 |.
Sans slicing
Crible d’Ératosthène
Recherche de tous les
nombres premiers
Le crible
Sans slicing
I
Le problème : m2[p:p+lg1] == m1 ?
Recherche d’un
sous-mot
Stéphane Gonnord
Plan
Retour sur la
dichotomie
Recherche d’un
sous-mot
Le problème
Avec slicing
Sans slicing
Crible d’Ératosthène
Recherche de tous les
nombres premiers
Le crible
Sans slicing
I
Le problème : m2[p:p+lg1] == m1 ?
I
Vérifier chaque lettre...
Recherche d’un
sous-mot
Stéphane Gonnord
Plan
Retour sur la
dichotomie
Recherche d’un
sous-mot
Le problème
Avec slicing
Sans slicing
Crible d’Ératosthène
Recherche de tous les
nombres premiers
Le crible
Sans slicing
I
Le problème : m2[p:p+lg1] == m1 ?
I
Vérifier chaque lettre... Et quitter dès qu’il y a un
échec ! (comparer à l’algorithme « englobant »)
Recherche d’un
sous-mot
Stéphane Gonnord
Plan
Retour sur la
dichotomie
Recherche d’un
sous-mot
Le problème
Avec slicing
Sans slicing
Crible d’Ératosthène
Recherche de tous les
nombres premiers
Le crible
Sans slicing
I
Le problème : m2[p:p+lg1] == m1 ?
I
Vérifier chaque lettre... Et quitter dès qu’il y a un
échec ! (comparer à l’algorithme « englobant »)
Entrées : m1 , m2 , p
si p + |m1 | > |m2 | alors
Résultat : False
pour i allant de 0 à |m1 | − 1 faire
si m2 [p + i ] 6= m1 [i ] alors
Résultat : False
Résultat : True
Recherche d’un
sous-mot
Stéphane Gonnord
Plan
Retour sur la
dichotomie
Recherche d’un
sous-mot
Le problème
Avec slicing
Sans slicing
Crible d’Ératosthène
Recherche de tous les
nombres premiers
Le crible
Sans slicing
I
Le problème : m2[p:p+lg1] == m1 ?
I
Vérifier chaque lettre... Et quitter dès qu’il y a un
échec ! (comparer à l’algorithme « englobant »)
Entrées : m1 , m2 , p
si p + |m1 | > |m2 | alors
Résultat : False
pour i allant de 0 à |m1 | − 1 faire
si m2 [p + i ] 6= m1 [i ] alors
Résultat : False
Résultat : True
I
Complexité : |m1 | dans le pire des cas.
Recherche d’un
sous-mot
Stéphane Gonnord
Plan
Retour sur la
dichotomie
Recherche d’un
sous-mot
Le problème
Avec slicing
Sans slicing
Crible d’Ératosthène
Recherche de tous les
nombres premiers
Le crible
Le problème... et une solution
I
On veut compter/déterminer les nombres premiers
majorés par N.
Recherche d’un
sous-mot
Stéphane Gonnord
Plan
Retour sur la
dichotomie
Recherche d’un
sous-mot
Le problème
Avec slicing
Sans slicing
Crible d’Ératosthène
Recherche de tous les
nombres premiers
Le crible
Le problème... et une solution
I
I
On veut compter/déterminer les nombres premiers
majorés par N.
Solution naïve : N
√
N divisions euclidiennes.
Recherche d’un
sous-mot
Stéphane Gonnord
Plan
Retour sur la
dichotomie
Recherche d’un
sous-mot
Le problème
Avec slicing
Sans slicing
Crible d’Ératosthène
Recherche de tous les
nombres premiers
Le crible
Le problème... et une solution
I
On veut compter/déterminer les nombres premiers
majorés par N.
√
I
Solution naïve : N
N divisions euclidiennes.
I
Avec le crible : N ln ln N...
Recherche d’un
sous-mot
Stéphane Gonnord
Plan
Retour sur la
dichotomie
Recherche d’un
sous-mot
Le problème
Avec slicing
Sans slicing
Crible d’Ératosthène
Recherche de tous les
nombres premiers
Le crible
Le problème... et une solution
I
On veut compter/déterminer les nombres premiers
majorés par N.
√
I
Solution naïve : N
N divisions euclidiennes.
I
Avec le crible : N ln ln N... mais de l’ordre de N en
espace...
Recherche d’un
sous-mot
Stéphane Gonnord
Plan
Retour sur la
dichotomie
Recherche d’un
sous-mot
Le problème
Avec slicing
Sans slicing
Crible d’Ératosthène
Recherche de tous les
nombres premiers
Le crible
Le problème... et une solution
I
On veut compter/déterminer les nombres premiers
majorés par N.
√
I
Solution naïve : N
N divisions euclidiennes.
I
de l’ordre de N en
Avec le crible : N ln ln N... mais √
espace... Qu’on peut réduire à N.
Recherche d’un
sous-mot
Stéphane Gonnord
Plan
Retour sur la
dichotomie
Recherche d’un
sous-mot
Le problème
Avec slicing
Sans slicing
Crible d’Ératosthène
Recherche de tous les
nombres premiers
Le crible
Recherche d’un
sous-mot
Le problème... et une solution
I
Stéphane Gonnord
On veut compter/déterminer les nombres premiers
majorés par N.
Plan
Retour sur la
dichotomie
√
I
Solution naïve : N
N divisions euclidiennes.
I
de l’ordre de N en
Avec le crible : N ln ln N... mais √
espace... Qu’on peut réduire à N.
Recherche d’un
sous-mot
Le problème
Avec slicing
Sans slicing
Crible d’Ératosthène
Recherche de tous les
nombres premiers
N
√
N N
N ln(ln(N )) '
2
10
103
1, 5 × 102
4
10
106
2, 2 × 104
6
10
109
2, 6 × 106
8
Le crible
10
1012
2, 9 × 108
La solution naïve
I
Test de primalité :
Recherche d’un
sous-mot
Stéphane Gonnord
Plan
Retour sur la
dichotomie
Recherche d’un
sous-mot
Le problème
Avec slicing
Sans slicing
Crible d’Ératosthène
Recherche de tous les
nombres premiers
Le crible
La solution naïve
I
Test de primalité :
def est_premier(n):
if n <= 1:
return False
if n <= 3:
return True
for k in range(2, 1+int(sqrt(n))):
if n%k == 0:
return False
return True
Recherche d’un
sous-mot
Stéphane Gonnord
Plan
Retour sur la
dichotomie
Recherche d’un
sous-mot
Le problème
Avec slicing
Sans slicing
Crible d’Ératosthène
Recherche de tous les
nombres premiers
Le crible
La solution naïve
I
Test de primalité :
def est_premier(n):
if n <= 1:
return False
if n <= 3:
return True
for k in range(2, 1+int(sqrt(n))):
if n%k == 0:
return False
return True
I
Comptons :
cpt = 0
for n in range(1001):
if est_premier(n):
cpt += 1
Recherche d’un
sous-mot
Stéphane Gonnord
Plan
Retour sur la
dichotomie
Recherche d’un
sous-mot
Le problème
Avec slicing
Sans slicing
Crible d’Ératosthène
Recherche de tous les
nombres premiers
Le crible
La solution naïve
I
Test de primalité :
def est_premier(n):
if n <= 1:
return False
if n <= 3:
return True
for k in range(2, 1+int(sqrt(n))):
if n%k == 0:
return False
return True
I
Comptons :
cpt = 0
for n in range(1001):
if est_premier(n):
cpt += 1
I
Complexité :
Recherche d’un
sous-mot
Stéphane Gonnord
Plan
Retour sur la
dichotomie
Recherche d’un
sous-mot
Le problème
Avec slicing
Sans slicing
Crible d’Ératosthène
Recherche de tous les
nombres premiers
Le crible
Recherche d’un
sous-mot
La solution naïve
I
Stéphane Gonnord
Test de primalité :
Plan
def est_premier(n):
if n <= 1:
return False
if n <= 3:
return True
for k in range(2, 1+int(sqrt(n))):
if n%k == 0:
return False
return True
I
Comptons :
cpt = 0
for n in range(1001):
if est_premier(n):
cpt += 1 √
I
Complexité : au plus N
N divisions euclidiennes.
Retour sur la
dichotomie
Recherche d’un
sous-mot
Le problème
Avec slicing
Sans slicing
Crible d’Ératosthène
Recherche de tous les
nombres premiers
Le crible
Recherche d’un
sous-mot
Principe et complexité
0
1
2
3
4
5
Stéphane Gonnord
6
7
8
9
10 11 12 13 14 15 16 17 18 19
20 21 22 23 24 25 26 27 28 29
30 31 32 33 34 35 36 37 38 39
Plan
Retour sur la
dichotomie
Recherche d’un
sous-mot
Le problème
40 41 42 43 44 45 46 47 48 49
Avec slicing
Sans slicing
50 51 52 53 54 55 56 57 58 59
60 61 62 63 64 65 66 67 68 69
70 71 72 73 74 75 76 77 78 79
80 81 82 83 84 85 86 87 88 89
90 91 92 93 94 95 96 97 98 99
Crible d’Ératosthène
Recherche de tous les
nombres premiers
Le crible
Recherche d’un
sous-mot
Principe et complexité
0
1
2
3
4
5
Stéphane Gonnord
6
7
8
9
10 11 12 13 14 15 16 17 18 19
20 21 22 23 24 25 26 27 28 29
30 31 32 33 34 35 36 37 38 39
Plan
Retour sur la
dichotomie
Recherche d’un
sous-mot
Le problème
40 41 42 43 44 45 46 47 48 49
Avec slicing
Sans slicing
50 51 52 53 54 55 56 57 58 59
60 61 62 63 64 65 66 67 68 69
70 71 72 73 74 75 76 77 78 79
80 81 82 83 84 85 86 87 88 89
90 91 92 93 94 95 96 97 98 99
49
Crible d’Ératosthène
Recherche de tous les
nombres premiers
Le crible
Recherche d’un
sous-mot
Principe et complexité
0
1
2
3
4
5
Stéphane Gonnord
6
7
8
9
10 11 12 13 14 15 16 17 18 19
20 21 22 23 24 25 26 27 28 29
30 31 32 33 34 35 36 37 38 39
Plan
Retour sur la
dichotomie
Recherche d’un
sous-mot
Le problème
40 41 42 43 44 45 46 47 48 49
Avec slicing
Sans slicing
50 51 52 53 54 55 56 57 58 59
60 61 62 63 64 65 66 67 68 69
70 71 72 73 74 75 76 77 78 79
80 81 82 83 84 85 86 87 88 89
90 91 92 93 94 95 96 97 98 99
49 + 32
Crible d’Ératosthène
Recherche de tous les
nombres premiers
Le crible
Recherche d’un
sous-mot
Principe et complexité
0
1
2
3
4
5
Stéphane Gonnord
6
7
8
9
10 11 12 13 14 15 16 17 18 19
20 21 22 23 24 25 26 27 28 29
30 31 32 33 34 35 36 37 38 39
Plan
Retour sur la
dichotomie
Recherche d’un
sous-mot
Le problème
40 41 42 43 44 45 46 47 48 49
Avec slicing
Sans slicing
50 51 52 53 54 55 56 57 58 59
60 61 62 63 64 65 66 67 68 69
70 71 72 73 74 75 76 77 78 79
80 81 82 83 84 85 86 87 88 89
90 91 92 93 94 95 96 97 98 99
49 + 32 + 18
Crible d’Ératosthène
Recherche de tous les
nombres premiers
Le crible
Recherche d’un
sous-mot
Principe et complexité
0
1
2
3
4
5
Stéphane Gonnord
6
7
8
9
10 11 12 13 14 15 16 17 18 19
20 21 22 23 24 25 26 27 28 29
30 31 32 33 34 35 36 37 38 39
Plan
Retour sur la
dichotomie
Recherche d’un
sous-mot
Le problème
40 41 42 43 44 45 46 47 48 49
Avec slicing
Sans slicing
50 51 52 53 54 55 56 57 58 59
60 61 62 63 64 65 66 67 68 69
70 71 72 73 74 75 76 77 78 79
80 81 82 83 84 85 86 87 88 89
90 91 92 93 94 95 96 97 98 99
49 + 32 + 18 + 13
Crible d’Ératosthène
Recherche de tous les
nombres premiers
Le crible
Recherche d’un
sous-mot
Principe et complexité
0
1
2
3
4
5
Stéphane Gonnord
6
7
8
9
10 11 12 13 14 15 16 17 18 19
20 21 22 23 24 25 26 27 28 29
30 31 32 33 34 35 36 37 38 39
Plan
Retour sur la
dichotomie
Recherche d’un
sous-mot
Le problème
40 41 42 43 44 45 46 47 48 49
Avec slicing
Sans slicing
50 51 52 53 54 55 56 57 58 59
60 61 62 63 64 65 66 67 68 69
70 71 72 73 74 75 76 77 78 79
80 81 82 83 84 85 86 87 88 89
90 91 92 93 94 95 96 97 98 99
49 + 32 + 18 + 13 = 112
Crible d’Ératosthène
Recherche de tous les
nombres premiers
Le crible
Recherche d’un
sous-mot
Principe et complexité
0
1
2
3
4
5
Stéphane Gonnord
6
7
8
9
Plan
10 11 12 13 14 15 16 17 18 19
Retour sur la
dichotomie
20 21 22 23 24 25 26 27 28 29
Recherche d’un
sous-mot
30 31 32 33 34 35 36 37 38 39
Le problème
40 41 42 43 44 45 46 47 48 49
Avec slicing
Sans slicing
50 51 52 53 54 55 56 57 58 59
Crible d’Ératosthène
Recherche de tous les
nombres premiers
60 61 62 63 64 65 66 67 68 69
Le crible
70 71 72 73 74 75 76 77 78 79
80 81 82 83 84 85 86 87 88 89
90 91 92 93 94 95 96 97 98 99
49 + 32 + 18 + 13 = 112
pk : plus grand premier majoré par
n
2
n
n
n
3
5
pk
+ + +···+
√
n
Recherche d’un
sous-mot
Principe et complexité
0
1
2
3
4
5
Stéphane Gonnord
6
7
8
9
Plan
10 11 12 13 14 15 16 17 18 19
Retour sur la
dichotomie
20 21 22 23 24 25 26 27 28 29
Recherche d’un
sous-mot
30 31 32 33 34 35 36 37 38 39
Le problème
40 41 42 43 44 45 46 47 48 49
Avec slicing
Sans slicing
50 51 52 53 54 55 56 57 58 59
Crible d’Ératosthène
Recherche de tous les
nombres premiers
60 61 62 63 64 65 66 67 68 69
Le crible
70 71 72 73 74 75 76 77 78 79
80 81 82 83 84 85 86 87 88 89
90 91 92 93 94 95 96 97 98 99
49 + 32 + 18 + 13 = 112
pk : plus grand premier majoré par
n
2
n
n
n
3
5
pk
+ + +···+
≤n
1
2
√
n
1
1
1
3
4
n
+ + +···+
∼ n ln n.
Algorithme du crible
I
Principe :
I
Rayer les multiples (stricts) de 2 ;
Recherche d’un
sous-mot
Stéphane Gonnord
Plan
Retour sur la
dichotomie
Recherche d’un
sous-mot
Le problème
Avec slicing
Sans slicing
Crible d’Ératosthène
Recherche de tous les
nombres premiers
Le crible
Algorithme du crible
I
Principe :
I
I
Rayer les multiples (stricts) de 2 ;
puis les multiples de 3 ;
Recherche d’un
sous-mot
Stéphane Gonnord
Plan
Retour sur la
dichotomie
Recherche d’un
sous-mot
Le problème
Avec slicing
Sans slicing
Crible d’Ératosthène
Recherche de tous les
nombres premiers
Le crible
Algorithme du crible
I
Principe :
I
I
I
I
Rayer les multiples (stricts) de 2 ;
puis les multiples de 3 ;
puis les multiples de 5 ;
...
Recherche d’un
sous-mot
Stéphane Gonnord
Plan
Retour sur la
dichotomie
Recherche d’un
sous-mot
Le problème
Avec slicing
Sans slicing
Crible d’Ératosthène
Recherche de tous les
nombres premiers
Le crible
Algorithme du crible
I
Principe :
I
I
I
I
I
Rayer les multiples (stricts) de 2 ;
puis les multiples de 3 ;
puis les multiples de 5 ;
...
on s’arrête quand le carré du crible dépasse N.
Recherche d’un
sous-mot
Stéphane Gonnord
Plan
Retour sur la
dichotomie
Recherche d’un
sous-mot
Le problème
Avec slicing
Sans slicing
Crible d’Ératosthène
Recherche de tous les
nombres premiers
Le crible
Algorithme du crible
I
Principe :
I
I
I
I
I
Rayer les multiples (stricts) de 2 ;
puis les multiples de 3 ;
puis les multiples de 5 ;
...
on s’arrête quand le carré du crible dépasse N.
Recherche d’un
sous-mot
Stéphane Gonnord
Plan
Retour sur la
dichotomie
Recherche d’un
sous-mot
Le problème
Avec slicing
Sans slicing
Crible d’Ératosthène
I
Plus formellement :
Entrées : N
T ← [False,False] +
√[True] ∗ (N − 1)
pour k allant de 2 à b N c faire
si T[k] alors
# k est premier : on va « rayer » ses multiples
pour i allant de k à bN /k c faire
T [k ∗ i ] ←False
Résultat : T
Recherche de tous les
nombres premiers
Le crible
Le code
I
Par exemple :
def crible(n):
t = [False, False]+([True] * (n-1))
for k in range(2, 1+int(sqrt(n))):
for i in range(k, 1+(n//k)):
t[k*i] = False
return t
Recherche d’un
sous-mot
Stéphane Gonnord
Plan
Retour sur la
dichotomie
Recherche d’un
sous-mot
Le problème
Avec slicing
Sans slicing
Crible d’Ératosthène
Recherche de tous les
nombres premiers
Le crible
Le code
I
Par exemple :
def crible(n):
t = [False, False]+([True] * (n-1))
for k in range(2, 1+int(sqrt(n))):
for i in range(k, 1+(n//k)):
t[k*i] = False
return t
Recherche d’un
sous-mot
Stéphane Gonnord
Plan
Retour sur la
dichotomie
Recherche d’un
sous-mot
Le problème
Avec slicing
Sans slicing
Crible d’Ératosthène
Recherche de tous les
nombres premiers
Le crible
I
C’est tout ?
Le code
I
Par exemple :
def crible(n):
t = [False, False]+([True] * (n-1))
for k in range(2, 1+int(sqrt(n))):
for i in range(k, 1+(n//k)):
t[k*i] = False
return t
Recherche d’un
sous-mot
Stéphane Gonnord
Plan
Retour sur la
dichotomie
Recherche d’un
sous-mot
Le problème
Avec slicing
Sans slicing
Crible d’Ératosthène
Recherche de tous les
nombres premiers
Le crible
I
C’est tout ? Ben oui !
Le code
I
Par exemple :
def crible(n):
t = [False, False]+([True] * (n-1))
for k in range(2, 1+int(sqrt(n))):
for i in range(k, 1+(n//k)):
t[k*i] = False
return t
Recherche d’un
sous-mot
Stéphane Gonnord
Plan
Retour sur la
dichotomie
Recherche d’un
sous-mot
Le problème
Avec slicing
Sans slicing
Crible d’Ératosthène
Recherche de tous les
nombres premiers
Le crible
I
C’est tout ? Ben oui !
I
Et ça marche ?
Le code
I
Par exemple :
def crible(n):
t = [False, False]+([True] * (n-1))
for k in range(2, 1+int(sqrt(n))):
for i in range(k, 1+(n//k)):
t[k*i] = False
return t
Recherche d’un
sous-mot
Stéphane Gonnord
Plan
Retour sur la
dichotomie
Recherche d’un
sous-mot
Le problème
Avec slicing
Sans slicing
Crible d’Ératosthène
Recherche de tous les
nombres premiers
Le crible
I
C’est tout ? Ben oui !
I
Et ça marche ? Ben oui !
Le code
I
Par exemple :
def crible(n):
t = [False, False]+([True] * (n-1))
for k in range(2, 1+int(sqrt(n))):
for i in range(k, 1+(n//k)):
t[k*i] = False
return t
Recherche d’un
sous-mot
Stéphane Gonnord
Plan
Retour sur la
dichotomie
Recherche d’un
sous-mot
Le problème
Avec slicing
Sans slicing
Crible d’Ératosthène
Recherche de tous les
nombres premiers
Le crible
I
C’est tout ? Ben oui !
I
Et ça marche ? Ben oui ! Chiche ?
Le code
I
Par exemple :
def crible(n):
t = [False, False]+([True] * (n-1))
for k in range(2, 1+int(sqrt(n))):
for i in range(k, 1+(n//k)):
t[k*i] = False
return t
Recherche d’un
sous-mot
Stéphane Gonnord
Plan
Retour sur la
dichotomie
Recherche d’un
sous-mot
Le problème
Avec slicing
Sans slicing
Crible d’Ératosthène
Recherche de tous les
nombres premiers
Le crible
I
C’est tout ? Ben oui !
I
Et ça marche ? Ben oui ! Chiche ? Chiche !
>>> crible(20)
[False, False, True, True, False, True, False,
True, False, False, False, True, False, True,
False, False, False, True, False, True, False]
Recherche d’un
sous-mot
C’est fini
Stéphane Gonnord
Plan
Merci de votre attention !
Retour sur la
dichotomie
Recherche d’un
sous-mot
Le problème
Avec slicing
Sans slicing
Crible d’Ératosthène
Recherche de tous les
nombres premiers
Le crible
Recherche d’un
sous-mot
C’est fini
Stéphane Gonnord
Plan
Merci de votre attention !
Retour sur la
dichotomie
Recherche d’un
sous-mot
Le problème
Avec slicing
Sans slicing
Crible d’Ératosthène
Recherche de tous les
nombres premiers
Le crible
Téléchargement