Le problème de la machine à café
Transcription
Le problème de la machine à café
Le problème de la machine à café Stéphane Gonnord Le problème de la machine à café Un peu d’informatique avec le projet Euler Introduction The name of the game Project Euler Complexité Des cribles Principe et complexité D’autres applications Le crible «cache friendly» Stéphane Gonnord Programmation de base Somme des décimales [email protected] www.mp933.fr Lycée du parc - Lyon Fibonacci Nombres de Hamming Une petite pause géométrique Programmation dynamique Principes Les chemins Décomposition en somme Mais encore... Lundi 6 mai 2013 - Luminy Des probabilités Dice game The chase Flea circus De l’arithmétique Le pgcd Plus musclé L’arbre de Stern-Brocot WTF ? Le problème de la machine à café Stéphane Gonnord Introduction The name of the game Project Euler Complexité Des cribles Principe et complexité D’autres applications Le crible «cache friendly» Programmation de base Somme des décimales Fibonacci Nombres de Hamming Une petite pause géométrique Programmation dynamique Principes Les chemins Décomposition en somme Mais encore... Des probabilités Dice game The chase Flea circus De l’arithmétique Le pgcd Plus musclé L’arbre de Stern-Brocot Au programme Il y aura... Le problème de la machine à café Stéphane Gonnord Introduction I plein de petits exercices (' 30) ; I du crible d’Ératosthène ; I de la programmation (plus ou moins) de base ; I de l’arithmétique light... et un peu moins light ; I du dénombrement ; I des probabilités ; I de la programmation dynamique (plein !) ; I des études de complexité «à la louche» ; I des photos de hard ! The name of the game Project Euler Complexité Des cribles Principe et complexité D’autres applications Le crible «cache friendly» Programmation de base Somme des décimales Fibonacci Nombres de Hamming Une petite pause géométrique Programmation dynamique Principes Les chemins Décomposition en somme Et bien entendu.... Mais encore... Des probabilités Dice game The chase Flea circus de la géométrie à la (grand-)papa ! De l’arithmétique Le pgcd Plus musclé L’arbre de Stern-Brocot Project Euler (1/4) Le problème de la machine à café Stéphane Gonnord Introduction www.projecteuler.net The name of the game Project Euler Complexité Des cribles Principe et complexité D’autres applications Le crible «cache friendly» Programmation de base Somme des décimales Fibonacci Nombres de Hamming Une petite pause géométrique Programmation dynamique Principes Problem 1 : Multiples of 3 and 5 Les chemins Décomposition en somme Mais encore... If we list all the natural numbers below 10 that are multiples of 3 or 5, we get 3, 5, 6 and 9. The sum of these multiples is 23. Find the sum of all the multiples of 3 or 5 below 1000. Des probabilités Dice game The chase Flea circus De l’arithmétique Le pgcd Plus musclé L’arbre de Stern-Brocot Project Euler (2/4) - neuneuterie Une grosse calculatrice est parfois suffisante ! Problem 48 : Self powers 1 2 3 10 The series, 1 + 2 + 3 + · · · + 10 = 10405071317. Find the last ten digits of the series, Le problème de la machine à café Stéphane Gonnord Introduction The name of the game Project Euler Complexité Des cribles Principe et complexité D’autres applications Le crible «cache friendly» 1 2 3 1000 1 + 2 + 3 + · · · + 1000 . Programmation de base Somme des décimales Fibonacci Nombres de Hamming > add(k**k,k=1..1000) mod 10**10; Pas très malin en effet... Mais ça passe quand même ! Une petite pause géométrique Programmation dynamique Principes Les chemins >>> sum(k**k for k in range(1001)) % 10**10 Décomposition en somme Mais encore... Des probabilités Dice game The chase Flea circus De l’arithmétique Le pgcd Plus musclé L’arbre de Stern-Brocot Project Euler (3/4) - Plus intéressant... Problem 15 : Lattice paths Starting in the top left corner of a 2 × 2 grid, and only being able to move to the right and down, there are exactly 6 routes to the bottom right. Le problème de la machine à café Stéphane Gonnord Introduction The name of the game Project Euler Complexité Des cribles Principe et complexité D’autres applications Le crible «cache friendly» Programmation de base Somme des décimales Fibonacci Nombres de Hamming Une petite pause géométrique Programmation dynamique Principes How many such routes are there through a 20 × 20 grid ? Les chemins Décomposition en somme Mais encore... I I Fastoche : dénombrement classique, ou formule «de récurrence». Comment programmer le calcul via cette formule ? Des probabilités Dice game The chase Flea circus De l’arithmétique Le pgcd Plus musclé L’arbre de Stern-Brocot Project Euler (4/4) - Ça ne rigole plus Problem 208 : Robot walks A robot moves in a series of one-fifth circular arcs ( 25π ) (blah blah blah) One of 70932 possible closed paths of 25 arcs starting northward is Le problème de la machine à café Stéphane Gonnord Introduction The name of the game Project Euler Complexité Des cribles Principe et complexité D’autres applications Le crible «cache friendly» Programmation de base Somme des décimales Fibonacci Nombres de Hamming Une petite pause géométrique Programmation dynamique Principes Les chemins Décomposition en somme Mais encore... (Blah blah) how many journeys of 70 arcs in length can it take that return it, after the final arc, to its starting position ? Des probabilités Dice game The chase Flea circus I Il va falloir faire un peu de géométrie... I mais surtout de l’informatique ! De l’arithmétique Le pgcd Plus musclé L’arbre de Stern-Brocot Complexité (1/3) : the «one minute rule» One minute rule Each problem has been designed according to a "oneminute rule", which means that although it may take several hours to design a successful algorithm with more difficult problems, an efficient implementation will allow a solution to be obtained on a modestly powered computer in less than one minute. Le problème de la machine à café Stéphane Gonnord Introduction The name of the game Project Euler Complexité Des cribles Principe et complexité D’autres applications Le crible «cache friendly» Programmation de base Somme des décimales Fibonacci Nombres de Hamming Une petite pause géométrique 9 Une minute = un milliard = 10 = 2 30 Programmation dynamique Principes Les chemins Décomposition en somme Mais encore... Des probabilités Dice game The chase Flea circus De l’arithmétique Le pgcd Plus musclé L’arbre de Stern-Brocot Complexité (2/3) : à la louche Problem 184 : Triangles containing the origin For a radius of 2, I2 contains the nine points (0,0), (1,0), (1,1), (0,1), (-1,1), (-1,0), (-1,-1), (0,-1) and (1,-1). There are eight triangles having all three vertices in I2 which contain the origin in the interior. Two of them are shown below, the others are obtained from these by rotation. Le problème de la machine à café Stéphane Gonnord Introduction The name of the game Project Euler Complexité Des cribles Principe et complexité D’autres applications Le crible «cache friendly» Programmation de base Somme des décimales Fibonacci Nombres de Hamming Une petite pause géométrique Programmation dynamique Principes Les chemins Décomposition en somme Mais encore... How many triangles are there containing the origin in the interior and having all three vertices in I105 ? Des probabilités Dice game The chase Flea circus De l’arithmétique Brute force en n4 ... OK ! Le pgcd Plus musclé L’arbre de Stern-Brocot Complexité (3/3) : à la louche Problem 204 - Generalised Hamming numbers A Hamming number is a positive number which has no prime factor larger than 5. So the first few Hamming numbers are 1, 2, 3, 4, 5, 6, 8, 9, 10, 12, 15. There are 1105 Hamming numbers not exceeding 108. We will call a positive number a generalised Hamming number of type n, if it has no prime factor larger than n. Hence the Hamming numbers are the generalised Hamming numbers of type 5. How many generalised Hamming numbers of type 100 are there which don’t exceed 109 ? Le problème de la machine à café Stéphane Gonnord Introduction The name of the game Project Euler Complexité Des cribles Principe et complexité D’autres applications Le crible «cache friendly» Programmation de base Somme des décimales Fibonacci Nombres de Hamming Une petite pause géométrique Programmation dynamique Principes Les chemins Décomposition en somme Mais encore... I I I 9 Brute force en 10 ×un truc pas trop petit... Il va falloir finasser... Patience ! Des probabilités Dice game The chase Flea circus De l’arithmétique Le pgcd Plus musclé L’arbre de Stern-Brocot Crible (1/7) Problem 10 : Summation of primes The sum of the primes below 10 is 2 + 3 + 5 + 7 = 17. Find the sum of all the primes below two million. Le problème de la machine à café Stéphane Gonnord Introduction The name of the game Project Euler Complexité Des cribles Principe et complexité I (106 )3/2 = (un peu) trop de divisions euclidiennes. I def somme(N): Premiers=[True]*N p,s = 2,0 while p<N: if Premiers[p]: s += p k = 2 while k*p < N: Premiers[k*p] = False k += 1 p += 1 return s D’autres applications Le crible «cache friendly» Programmation de base Somme des décimales Fibonacci Nombres de Hamming Une petite pause géométrique Programmation dynamique Principes Les chemins Décomposition en somme Mais encore... Des probabilités Dice game The chase Flea circus De l’arithmétique Le pgcd I Résultat en 2-3 secondes Plus musclé L’arbre de Stern-Brocot Le problème de la machine à café Crible (2/7) - complexité 0 1 2 3 4 5 6 Stéphane Gonnord 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 Introduction The name of the game Project Euler Complexité Des cribles 30 31 32 33 34 35 36 37 38 39 Principe et complexité D’autres applications 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 Le crible «cache friendly» Programmation de base Somme des décimales Fibonacci 70 71 72 73 74 75 76 77 78 79 Nombres de Hamming Une petite pause géométrique 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 Programmation dynamique Principes 0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 Les chemins Décomposition en somme Mais encore... Des probabilités 20 21 22 23 24 25 26 27 28 29 Dice game The chase 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 Flea circus De l’arithmétique Le pgcd 50 51 52 53 54 55 56 57 58 59 Plus musclé L’arbre de Stern-Brocot Crible (3/7) - Encore du python from reportlab.pdfgen import canvas Le problème de la machine à café Stéphane Gonnord Introduction The name of the game Project Euler Complexité Crible = canvas.Canvas(’tableau.pdf’) Des cribles Principe et complexité D’autres applications Crible.setFont("Helvetica", 16) for i in range(10): Programmation de base for j in range(10): Crible.rect(100+30*i,500-30*j,30,30) Crible.drawString(108+30*i,510-30*j, str(10*j+i)) Le crible «cache friendly» Somme des décimales Fibonacci Nombres de Hamming Une petite pause géométrique Programmation dynamique Crible.save() Principes Les chemins Décomposition en somme Crible.setStrokeColorRGB(255,0,0) for x in range(4,100,2): i,j = x%10,x/10 Crible.line(100+30*i,500-30*j,130+30*i,530-30*j) Crible.line(130+30*i,500-30*j,100+30*i,530-30*j) Mais encore... Des probabilités Dice game The chase Flea circus De l’arithmétique Le pgcd Plus musclé L’arbre de Stern-Brocot Le problème de la machine à café Crible (4/7) - Variantes Stéphane Gonnord Problem 231 : Prime factorisation of binomial coefficients 10 3 3 The binomial coefficient = 120 = 2 × 3 × 5, and 2 + 2 + 2 + 3 + 5 = 14. So the sum of the terms in the prime factorisation of 10 is 14. 3 Find thesum of the terms in the prime factorisation of 20000000 . 15000000 Introduction The name of the game Project Euler Complexité Des cribles Principe et complexité D’autres applications Le crible «cache friendly» Programmation de base Somme des décimales «Now let’s go back home and sieve... and respect the not_20_minutes_and_not_20_computers rule» Problem 124 : Ordered radicals The radical of n, rad (n), is the product of distinct prime factors of n. For example, 504 = 23 × 32 × 7, so rad (504) = 2 × 3 × 7 = 42 ... (blah blah blah) Sort rad (k ) for 1 ≤ k ≤ 100000. Fibonacci Nombres de Hamming Une petite pause géométrique Programmation dynamique Principes Les chemins Décomposition en somme Mais encore... Des probabilités Dice game The chase Flea circus De l’arithmétique Le pgcd Plus musclé L’arbre de Stern-Brocot Crible (5/7) - Et en maths ? Hardy & Wright - theorem 430 ( !) The average number of both ω(n) and Ω(n) is ln ln n. More precisly (blah blah...) On compte le nombre de fois qu’on a «rayé» un nombre : Le problème de la machine à café Stéphane Gonnord Introduction The name of the game Project Euler Complexité Des cribles Principe et complexité D’autres applications Le crible «cache friendly» I En criblant selon tous les premiers. I En criblant selon tous les entiers. Programmation de base Somme des décimales Fibonacci Et bien entendu : Nombres de Hamming Une petite pause géométrique pn ∼ n ln n Programmation dynamique Principes Les chemins I I Le nombre moyen de diviseurs premiers des k ≤ n est équivalent à ln ln n. Le nombre moyen de diviseurs des k ≤ n est équivalent à ln n. Décomposition en somme Mais encore... Des probabilités Dice game The chase Flea circus De l’arithmétique Le pgcd Plus musclé L’arbre de Stern-Brocot Crible (6/7) - Version «Cache friendly» Le problème de la machine à café Stéphane Gonnord Introduction The name of the game Project Euler Complexité Des cribles Principe et complexité D’autres applications Le crible «cache friendly» Programmation de base Somme des décimales Fibonacci Nombres de Hamming Une petite pause géométrique Programmation dynamique Principes Les chemins Décomposition en somme Mais encore... Des probabilités Dice game The chase Flea circus De l’arithmétique Le pgcd Plus musclé L’arbre de Stern-Brocot Le problème de la machine à café Crible (7/7) - C’est pas du bidon ! I Crible classique : 10 0.041 5 10 0.15 6 7 10 1.4 8 10 15 10 160 Cache friendly, n = 107 : Taille blocs t (secondes) I Introduction 4 n t (secondes) I Stéphane Gonnord 103 8.8 The name of the game Project Euler Complexité Des cribles Principe et complexité D’autres applications 104 5.9 105 6.3 106 7.7 107 15.1 Le crible «cache friendly» Programmation de base Somme des décimales Fibonacci 8 Cache friendly, n = 10 : Nombres de Hamming Une petite pause géométrique Taille blocs t (secondes) I 103 157 104 67.9 Le chronomètre : import time t0=time.time() ... 105 67.1 106 72 107 85 108 157 Programmation dynamique Principes Les chemins Décomposition en somme Mais encore... Des probabilités Dice game The chase Flea circus De l’arithmétique Le pgcd Plus musclé L’arbre de Stern-Brocot Somme des décimales (1/3) Problem 16 : Power digit sum 15 2 = 32768 and the sum of its digits is 3 + 2 + 7 + 6 + 8 = 26. What is the sum of the digits of the number 21000 ? Le problème de la machine à café Stéphane Gonnord Introduction The name of the game Project Euler Complexité Des cribles Principe et complexité D’autres applications Le crible «cache friendly» Problem 20 : Factorial digit sum Programmation de base Somme des décimales Find the sum of the digits in the number 100! Fibonacci Nombres de Hamming Une petite pause géométrique Programmation dynamique Principes Les chemins Décomposition en somme Mais encore... Des probabilités Dice game The chase Flea circus De l’arithmétique Le pgcd Plus musclé L’arbre de Stern-Brocot Somme des décimales (2/3) I def somme(n): if n<10: return n return (n%10) + somme(n/10) C’était une blague ! Le problème de la machine à café Stéphane Gonnord Introduction The name of the game Project Euler Complexité Des cribles Principe et complexité D’autres applications I I I def somme(n): if n<10: return n return (n%10) + somme(n//10) def somme2(n0): n,s = n0,0 while n>0: s += n%10 n /= 10 return s Aheum... (Et oui, on peut écrire n //= 10) Le crible «cache friendly» Programmation de base Somme des décimales Fibonacci Nombres de Hamming Une petite pause géométrique Programmation dynamique Principes Les chemins Décomposition en somme Mais encore... Des probabilités Dice game The chase Flea circus De l’arithmétique Le pgcd Plus musclé L’arbre de Stern-Brocot Le problème de la machine à café Somme des décimales (3/3) Stéphane Gonnord I Le vrai pythoneux écrira probablement : I def somme3(n): return sum(int(x) for x in list(str(n))) Des cribles k Performances : pour le calcul de S (22 ) (récursif hors Introduction The name of the game Project Euler Complexité Principe et complexité D’autres applications jeu) Le crible «cache friendly» Programmation de base k Itératif Pythoneux Maple 13 0.02 0.003 0.02 14 0.11 0.007 0.08 (la version maple est itérative) Exercice Commenter... 15 0.45 0.02 0.30 16 1.8 0.07 1.1 17 7.1 0.23 4.4 18 28 0.87 17 Somme des décimales Fibonacci Nombres de Hamming Une petite pause géométrique Programmation dynamique Principes Les chemins Décomposition en somme Mais encore... Des probabilités Dice game The chase Flea circus De l’arithmétique Le pgcd Plus musclé L’arbre de Stern-Brocot Fibonacci 1/2 Problem 2 : Even Fibonacci numbers Each new term in the Fibonacci sequence is generated by adding the previous two terms. By starting with 1 and 2, the first 10 terms will be : Le problème de la machine à café Stéphane Gonnord Introduction The name of the game Project Euler Complexité Des cribles Principe et complexité D’autres applications Le crible «cache friendly» 1, 2, 3, 5, 8, 13, 21, 34, 55, 89, ... Programmation de base Somme des décimales Find the sum of all the even-valued terms in the sequence which do not exceed four million. Problem 25 : 1000-digit Fibonacci number Fibonacci Nombres de Hamming Une petite pause géométrique Programmation dynamique Principes The Fibonacci sequence is defined by the recurrence relation : Fn = Fn−1 + Fn−2 , where F1 = 1 and F2 = 1. Hence the first 12 terms will be : F1 = 1, F2 = 1, F3 = 2, ... , F10 = 55, F11 = 89, F12 = 144. The 12-th term, F12 , is the first term to contain three digits. What is the first term in the Fibonacci sequence to contain Les chemins Décomposition en somme Mais encore... Des probabilités Dice game The chase Flea circus De l’arithmétique Le pgcd Plus musclé L’arbre de Stern-Brocot Le problème de la machine à café Fibonacci 2/2 Stéphane Gonnord Combien coûte le calcul de fn ? Introduction The name of the game I C’est exponentiel si on s’y prend mal. I C’est linéaire si on tabule (ou mémoïze). I Mais on peut faire du logarithmique ! I Hum... c’est bizarre ! I Rha, c’était plutôt entre linéaire et quadratique ! I En fait c’était exponentiel ! Project Euler Complexité Des cribles Principe et complexité D’autres applications Le crible «cache friendly» Programmation de base Somme des décimales Fibonacci Nombres de Hamming Une petite pause géométrique Comme quoi... Un exercice Déterminer des algorithmes plus ou moins naïfs pour calculer les nombres de Catalan, et évaluer «leur complexité». Programmation dynamique Principes Les chemins Décomposition en somme Mais encore... Des probabilités Dice game The chase n−1 C0 = 1 et pour tout n ≥ 1, Cn = ∑ k =0 Flea circus Ck Cn−1−k . De l’arithmétique Le pgcd Plus musclé L’arbre de Stern-Brocot Nombres de Hamming (1/2) Problem 204 - Generalised Hamming Numbers A Hamming number is a positive number which has no prime factor larger than 5. So the first few Hamming numbers are 1, 2, 3, 4, 5, 6, 8, 9, 10, 12, 15. There are 1105 Hamming numbers not exceeding 108. We will call a positive number a generalised Hamming number of type n, if it has no prime factor larger than n. Hence the Hamming numbers are the generalised Hamming numbers of type 5. How many generalised Hamming numbers of type 100 are there which don’t exceed 109 ? Le problème de la machine à café Stéphane Gonnord Introduction The name of the game Project Euler Complexité Des cribles Principe et complexité D’autres applications Le crible «cache friendly» Programmation de base Somme des décimales Fibonacci Nombres de Hamming Une petite pause géométrique Programmation dynamique Principes Les chemins Décomposition en somme Mais encore... Des probabilités ϕ(n, k ) := nombre de nombre de Hamming de type pk . ϕ(n, k ) = ϕ(n, k − 1) + ϕ(n/pk , k ) Dice game The chase Flea circus De l’arithmétique Le pgcd Plus musclé L’arbre de Stern-Brocot Nombres de Hamming (2/2) - récréation Le problème de la machine à café Stéphane Gonnord I did the ugliest code possible (25 nested for loops in java) Introduction for(p[0]=0;p[0]<5;p[0]++){ for(p[1]=0;p[1]<5;p[1]++){ for(int i=2;i<25;i++){ p[i]=0; } if(calcv(p)<bound) for(p[2]=0;p[2]<5;p[2]++){ for(int i=3;i<25;i++){ p[i]=0; } if(calcv(p)<bound) for(p[3]=0;p[3]<5;p[3]++){ for(int i=4;i<25;i++){ p[i]=0; } if(calcv(p)<bound) for(p[4]=0;p[4]<5;p[4]++){ for(int i=5;i<25;i++){ p[i]=0; } ... The name of the game Project Euler Complexité Des cribles Principe et complexité D’autres applications Le crible «cache friendly» Programmation de base Somme des décimales Fibonacci Nombres de Hamming Une petite pause géométrique Programmation dynamique Principes Les chemins Décomposition en somme Mais encore... Des probabilités Dice game The chase Flea circus De l’arithmétique Le pgcd Plus musclé L’arbre de Stern-Brocot Pause géométrique (1/2) Problem 199 : Iterative circle packing Blah blah blah... 3 iterations... blah blah blah... there are 108 gaps and the fraction of the area which is not covered by circles is 0.06790342. Le problème de la machine à café Stéphane Gonnord Introduction The name of the game Project Euler Complexité Des cribles Principe et complexité D’autres applications Le crible «cache friendly» Programmation de base Somme des décimales Fibonacci Nombres de Hamming Une petite pause géométrique Programmation dynamique Principes Les chemins Décomposition en somme Mais encore... What fraction of the area is not covered by circles after 10 iterations ? Des probabilités Dice game The chase Flea circus De l’arithmétique Grumf... Le pgcd Plus musclé L’arbre de Stern-Brocot Pause géométrique (2/2) Théorème de Descartes (Pschhh....) Si quatre cercles de courbures (1/R) respectives k1 , ..., k4 sont mutuellement tangents... Le problème de la machine à café Stéphane Gonnord Introduction The name of the game Project Euler Complexité Des cribles Principe et complexité D’autres applications Le crible «cache friendly» Programmation de base Somme des décimales Fibonacci Nombres de Hamming Une petite pause géométrique alors : (k1 + k2 + k3 + k4 )2 = 2(k12 + k22 + k32 + k42 ). Programmation dynamique Principes Les chemins Décomposition en somme Mais encore... 2 (−1 + 2 + 3 + 6) = 2(1 + 4 + 9 + 36) (2 + 3 + 6 + 23)2 = 2(4 + 9 + 36 + 232 ) Des probabilités Dice game The chase Flea circus De l’arithmétique Le pgcd Plus musclé L’arbre de Stern-Brocot Au fait... Le dessin précédent... a été produit par python, bien entendu ! Le problème de la machine à café Stéphane Gonnord Introduction The name of the game Project Euler Complexité from reportlab.pdfgen import canvas Des cribles Principe et complexité D’autres applications Le crible «cache friendly» Desc = canvas.Canvas(’tangents.pdf’) Programmation de base Somme des décimales Desc.circle(300,400,200) Fibonacci Nombres de Hamming Une petite pause géométrique Desc.setFillColorRGB(0,255,0) Desc.circle(400,400,100,fill=True) Desc.setFillColorRGB(0,0,255) Desc.circle(299,267,66.66,fill=True) (...) Programmation dynamique Principes Les chemins Décomposition en somme Mais encore... Des probabilités Dice game The chase Flea circus De l’arithmétique Desc.save() Le pgcd Plus musclé L’arbre de Stern-Brocot Programmation dynamique Vague contexte : Le problème de la machine à café Stéphane Gonnord Introduction I problèmes d’optimisation... mais pas uniquement ! I sous-cas imbriqués ; I on ne veut pas recommencer les calculs en permanence ! The name of the game Project Euler Complexité I en concurrence (souvent) avec la memoïzation Des cribles Principe et complexité D’autres applications Le crible «cache friendly» Programmation de base Somme des décimales Fibonacci Bottom-up vs Top-down Nombres de Hamming Une petite pause géométrique Exemples classiques : I plus grande sous-suite croissante ; I problème du sac à dos ; I problème de rendu de monnaie ; I .... I mais aussi Fibonacci ! Programmation dynamique Principes Les chemins Décomposition en somme Mais encore... Des probabilités Dice game The chase Flea circus De l’arithmétique Le pgcd Plus musclé L’arbre de Stern-Brocot Comptons des chemins (1/2) Problem 15 Starting in the top left corner of a 2 × 2 grid, and only being able to move to the right and down, there are exactly 6 routes to the bottom right. Le problème de la machine à café Stéphane Gonnord Introduction The name of the game Project Euler Complexité Des cribles Principe et complexité D’autres applications Le crible «cache friendly» Programmation de base Somme des décimales Fibonacci Nombres de Hamming Une petite pause géométrique How many such routes are there through a 20 × 20 grid ? ϕ(i , j ) : nombre de chemins pour une grille (i , j ). But : ϕ(20, 20). ( 1 si i = 0 ou j = 0 ϕ(i , j ) = ϕ(i − 1, j ) + ϕ(i , j − 1) sinon Programmation dynamique Principes Les chemins Décomposition en somme Mais encore... Des probabilités Dice game The chase Flea circus De l’arithmétique Le pgcd Plus musclé L’arbre de Stern-Brocot Comptons des chemins (2/2) I Python (programmation dynamique) : Le problème de la machine à café Stéphane Gonnord Introduction The name of the game def phi(i,j): table=[[1]*(j+1) for k in range(i+1)] Des cribles for a in range(1,i+1): for b in range(1,j+1): Programmation de table[a][b] = table[a][b-1]+table[a-1][b] base return table[i][j] Project Euler Complexité Principe et complexité D’autres applications Le crible «cache friendly» Somme des décimales Fibonacci I Maple (memoïzation) : > phi:=proc(i,j) option remember: if i=0 or j=0 then return(1) else return(phi(i-1,j)+phi(i,j-1)) fi end: Nombres de Hamming Une petite pause géométrique Programmation dynamique Principes Les chemins Décomposition en somme Mais encore... Des probabilités Dice game The chase Flea circus I Python (memoïzation) : désolé, je n’ai plus la place ! De l’arithmétique Le pgcd Plus musclé L’arbre de Stern-Brocot Décomposition dynamique (1/2) Problem 31 : Coin sums In England the currency is made up of pound (£), and pence (p), and there are eight coins in general circulation : Le problème de la machine à café Stéphane Gonnord Introduction The name of the game Project Euler Complexité Des cribles Principe et complexité 1p, 2p, 5p, 10p, 20p, 50p, £1 (100p) and £2 (200p). D’autres applications Le crible «cache friendly» It is possible to make £2 in the following way : Programmation de base Somme des décimales 1×£1 + 1 × 50p + 2 × 20p + 1 × 5p + 1 × 2p + 3 × 1p How many different ways can £2 be made using any number of coins ? Fibonacci Nombres de Hamming Une petite pause géométrique Programmation dynamique Principes Les chemins Décomposition en somme Mais encore... ϕ(n, k ) := décompositions de n avec des pièces de «rang» ≤ k . ϕ(n, k ) ' ϕ(n, k − 1) + ϕ(n − pk , k ) Des probabilités Dice game The chase Flea circus De l’arithmétique Le pgcd Plus musclé L’arbre de Stern-Brocot Décomposition dynamique (2/2) Le problème de la machine à café Stéphane Gonnord Introduction pieces=[1,2,5,10,20,50,100,200] The name of the game Project Euler Complexité Des cribles def decompositions(n,r): valeurs = [[0]*(r+1) for _ in range(n+1)] Programmation de for i in range(n+1): base valeurs[i][0] = 1 for k in range(1,r+1): for i in range(n+1): Programmation dynamique valeurs[i][k] = valeurs[i][k-1] if pieces[k] <= i: valeurs[i][k] += valeurs[i-pieces[k]][k] Des probabilités return valeurs[n][r] Principe et complexité D’autres applications Le crible «cache friendly» Somme des décimales Fibonacci Nombres de Hamming Une petite pause géométrique Principes Les chemins Décomposition en somme Mais encore... Dice game The chase Flea circus De l’arithmétique Le pgcd Plus musclé L’arbre de Stern-Brocot Décomposition memoïzée ! Le problème de la machine à café Stéphane Gonnord Introduction pieces=[1,2,5,10,20,50,100,200] calculees={} The name of the game Project Euler Complexité Des cribles Principe et complexité def decompositions(n,r): Programmation de if n<0: return 0 base if (n,r) in calculees: return calculees[n,r] if r == 0: v = 1 Programmation dynamique else: v = decompositions(n-pieces[r],r)\ + decompositions(n,r-1) Des probabilités calculees[n,r] = v return v D’autres applications Le crible «cache friendly» Somme des décimales Fibonacci Nombres de Hamming Une petite pause géométrique Principes Les chemins Décomposition en somme Mais encore... Dice game The chase Flea circus De l’arithmétique Le pgcd Plus musclé L’arbre de Stern-Brocot Mais encore... Problem 215 : Crack-free walls Consider the problem of building a wall out of 2 × 1 and 3 × 1 bricks (blah blah blah) For example, the following 9 × 3 wall is not acceptable due to the running crack shown in red : Le problème de la machine à café Stéphane Gonnord Introduction The name of the game Project Euler Complexité Des cribles Principe et complexité D’autres applications Le crible «cache friendly» Programmation de base Somme des décimales Fibonacci Nombres de Hamming Une petite pause géométrique Programmation dynamique There are eight ways of forming a crack-free 9 × 3 wall, written W (9, 3) = 8. Calculate W (32, 10). Principes Les chemins Décomposition en somme Mais encore... Des probabilités Dice game The chase Flea circus De l’arithmétique Le pgcd Plus musclé L’arbre de Stern-Brocot Retour sur les robots Le problème de la machine à café Stéphane Gonnord Introduction The name of the game Project Euler Complexité Des cribles Principe et complexité D’autres applications Le crible «cache friendly» Programmation de base Somme des décimales Fibonacci I Bien paramétrer le problème... I I ϕ(n) := dictionnaire {(theta,x1,x2,y1,y2):... , ...} ϕ(n + 1) = · · · ou bien ϕ(2n) = · · · ? But : ϕ(70)[0, 0, 0, 0, 0] I Si seulement c’était si simple ! I Nombres de Hamming Une petite pause géométrique Programmation dynamique Principes Les chemins Décomposition en somme Mais encore... Des probabilités Dice game The chase Flea circus De l’arithmétique Le pgcd Plus musclé L’arbre de Stern-Brocot Le problème de la machine à café Dice game Stéphane Gonnord Problem 205 - Dice game Introduction Peter has nine four-sided (pyramidal) dice, each with faces numbered 1, 2, 3, 4. Colin has six six-sided (cubic) dice, each with faces numbered 1, 2, 3, 4, 5, 6. (blah blah blah) What is the probability that Pyramidal Pete beats Cubic Colin ? The name of the game Project Euler Complexité Des cribles Principe et complexité D’autres applications Le crible «cache friendly» Programmation de base Somme des décimales Fibonacci Nombres de Hamming 1 4 1 X +···+ X4 4 1 1 X +···+ X 6 6 6 Une petite pause géométrique 9 36 = ∑ pi X i i =9 6 ∑ ci X i =6 Principes Les chemins Décomposition en somme 36 = Programmation dynamique i Mais encore... Des probabilités Dice game The chase i −1 36 ∑ i =7 pi ∑ cj j =6 ! Flea circus De l’arithmétique Le pgcd Plus musclé L’arbre de Stern-Brocot The chase (1/3) Problem 227 : The chase "The Chase" is a game played with two dice and an even number of players. (blah blah blah) In a game with 100 players, what is the expected number of turns the game lasts ? Le problème de la machine à café Stéphane Gonnord Introduction The name of the game Project Euler Complexité Des cribles Principe et complexité D’autres applications Le crible «cache friendly» Programmation de base Somme des décimales I I I ∆i ,j : probabilité que δ passe de i à j. si |i − j | > 2 0 ∆i ,j = 1/2 si i = j ... k (∆ )50,j : probabilité d’avoir δ = j après k étapes. +∞ I But : ∑ kL0 ∆k −1 C0 , avec L0 et C0 comme il faut ! k =1 I C’est aussi L0 (I50 − ∆)−2 C0 ! Fibonacci Nombres de Hamming Une petite pause géométrique Programmation dynamique Principes Les chemins Décomposition en somme Mais encore... Des probabilités Dice game The chase Flea circus De l’arithmétique Le pgcd Plus musclé L’arbre de Stern-Brocot The chase (2/3) Le problème de la machine à café Stéphane Gonnord Introduction import numpy as np The name of the game Project Euler Complexité Des cribles Delta = np.mat(np.zeros((50,50))) for i in range(2,48): Programmation de Delta[i,i-2:i+3] = [1./36,2./9,1./2,2./9,1./36] Principe et complexité D’autres applications Le crible «cache friendly» base Somme des décimales Delta[0,:3] = Delta[1,:4] = Delta[48,46:] Delta[49,47:] [19./36,2./9,1./36] [2./9,1./2,2./9,1./36] = [1./36,2./9,19./36,2./9] = [1./18,4./9,1./2] Fibonacci Nombres de Hamming Une petite pause géométrique Programmation dynamique Principes Les chemins Décomposition en somme Mais encore... somme = (np.identity(50)-Delta)**(-2) Des probabilités Dice game The chase Flea circus res = (8*somme[49,0]+somme[49,1])/36 De l’arithmétique Le pgcd Plus musclé L’arbre de Stern-Brocot The chase (3/3) Le problème de la machine à café Stéphane Gonnord Introduction Une autre attaque ? The name of the game Project Euler Complexité Notons Ek l’espérance du nombre de tours, partant d’un écart δ = k ... Des cribles I Écrivons 50 équations... Programmation de base I Et résolvons les ! I Principe et complexité D’autres applications Le crible «cache friendly» Somme des décimales Fibonacci Nombres de Hamming Une petite pause géométrique Une simulation ? No way ! Programmation dynamique Principes Give your answer rounded to ten significant digits. Les chemins Décomposition en somme Mais encore... Des probabilités Dice game The chase Flea circus De l’arithmétique Le pgcd Plus musclé L’arbre de Stern-Brocot Flea circus (1/2) Problem 213 : Flea circus A 30 × 30 grid of squares contains 900 fleas, initially one flea per square. When a bell is rung, each flea jumps to an adjacent square at random (usually 4 possibilities, except for fleas on the edge of the grid or at the corners). What is the expected number of unoccupied squares after 50 rings of the bell ? Le problème de la machine à café Stéphane Gonnord Introduction The name of the game Project Euler Complexité Des cribles Principe et complexité D’autres applications Le crible «cache friendly» Programmation de base Somme des décimales Fibonacci Nombres de Hamming I Encore une chaîne de Markov ! I On crée la matrice de transition (900 × 900 quand même !). I On calcule T 50 ... I Et on fait la somme des produits de gnagnagna Une petite pause géométrique Programmation dynamique Principes Les chemins Décomposition en somme Mais encore... Des probabilités Dice game The chase Flea circus De l’arithmétique Le pgcd Plus musclé L’arbre de Stern-Brocot Flea circus (2/2) import numpy as np Le problème de la machine à café Stéphane Gonnord Introduction The name of the game Project Euler lg,bells = 30,50 transitions = np.mat(\ np.zeros(lg*lg*lg*lg).reshape(lg*lg,lg*lg)) Complexité Des cribles Principe et complexité D’autres applications Le crible «cache friendly» Programmation de base for i in range(lg): for j in range(lg): if i > 0 and i < lg-1: Programmation if j > 0 and j < lg-1: v = 4 # nb voisinsdynamique else: v = 3 else: ............... ...... : remplissage de la matrice Des probabilités Somme des décimales Fibonacci Nombres de Hamming Une petite pause géométrique Principes Les chemins Décomposition en somme Mais encore... Dice game The chase foo = transitions**bells Flea circus De l’arithmétique Le pgcd Plus musclé res = np.sum(np.prod(1-foo[:,p]) for p in range(lg*lg)) L’arbre de Stern-Brocot Algorithme d’Euclide (1/4) Problem 5 : Smallest multiple 2520 is the smallest number that can be divided by each of the numbers from 1 to 10 without any remainder. What is the smallest number that is evenly divisible by all of the numbers from 1 to 20 ? I Il s’agit de calculer pgcd (2, 3, ..., 20). I Algorithme d’Euclide : Le problème de la machine à café Stéphane Gonnord Introduction The name of the game Project Euler Complexité Des cribles Principe et complexité D’autres applications Le crible «cache friendly» Programmation de base Somme des décimales Fibonacci Nombres de Hamming Une petite pause géométrique si a = bq + r , alors a ∧ b = b ∧ r . Programmation dynamique Principes Les chemins Décomposition en somme Mais encore... Des probabilités Dice game The chase Flea circus De l’arithmétique Le pgcd Plus musclé L’arbre de Stern-Brocot Algorithme d’Euclide (2/4) - code I Récursif : def pgcd(a,b): if a<b: return pgcd(b,a) if b==0: return a return pgcd(b,a%b) I Itératif : def pgcd2(a,b): x,y = min(a,b),max(a,b) while y>0: x,y = y,x%y return x Le problème de la machine à café Stéphane Gonnord Introduction The name of the game Project Euler Complexité Des cribles Principe et complexité D’autres applications Le crible «cache friendly» Programmation de base Somme des décimales Fibonacci Nombres de Hamming Une petite pause géométrique Programmation dynamique Principes Les chemins Décomposition en somme Mais encore... Des probabilités Dice game The chase Flea circus I Lequel est le meilleur ? Celui que vous préférez De l’arithmétique Le pgcd Plus musclé L’arbre de Stern-Brocot Algorithme d’Euclide (3/4) - complexité I Exercice : f100 ∧ f99 vaut combien ? I Classique : si a, b ≤ fn , il y aura au plus n divisions euclidiennes. I I Corollaire : calcul de a ∧ b en temps O (n3 ), si a et b ont n bits. En fait... c’est quadratique ! Preuve : compter le nombre de «transvections» a ← a − αb pendant les divisions euclidiennes. Chacune fait descendre de (au moins) 1 la somme des longueurs... Le problème de la machine à café Stéphane Gonnord Introduction The name of the game Project Euler Complexité Des cribles Principe et complexité D’autres applications Le crible «cache friendly» Programmation de base Somme des décimales Fibonacci Nombres de Hamming Une petite pause géométrique Programmation dynamique Principes Les chemins Décomposition en somme Mais encore... Des probabilités Dice game The chase Flea circus De l’arithmétique Le pgcd Plus musclé L’arbre de Stern-Brocot Algorithme d’Euclide (4/4) - Hors sujet I Notons un le ppcm de 1, 2, ..., n. Le problème de la machine à café Stéphane Gonnord Introduction The name of the game ln un ∼ n. Project Euler Complexité I Expérimentalement (avec temps de calcul) : k 10 11 12 13 14 15 16 I n = 2k 1024 2048 4096 8192 16384 32768 65536 Complexité ? ln(un )/n 1.001 0,996 1,000 0,998 1,001 0,999 0,999 Récursif 0.0043 0.017 0.045 0.16 0.62 2.4 16 Itératif 0.0088 0.031 0.089 0.33 1.2 4.7 33 Des cribles Principe et complexité D’autres applications Le crible «cache friendly» Programmation de base Somme des décimales Fibonacci Nombres de Hamming Une petite pause géométrique Programmation dynamique Principes Les chemins Décomposition en somme Mais encore... Des probabilités Dice game The chase Flea circus De l’arithmétique Le pgcd Plus musclé L’arbre de Stern-Brocot Le problème de la machine à café Counting fractions (1/2) Stéphane Gonnord Problem 72 : Counting fractions Introduction Consider the fraction, n/d, where n and d are positive integers. If n < d and HCF (n, d ) = 1, it is called a reduced proper fraction. If we list the set of reduced proper fractions for d ≤ 8 in ascending order of size, we get : 1/8, 1/7, 1/6, 1/5, 1/4, 2/7, 1/3, 3/8, 2/5, 3/7, 1/2, The name of the game Project Euler Complexité Des cribles Principe et complexité D’autres applications Le crible «cache friendly» Programmation de base Somme des décimales Fibonacci 4/7, 3/5, 5/8, 2/3, 5/7, 3/4, 4/5, 5/6, 6/7, 7/8 It can be seen that there are 21 elements in this set. How many elements would be contained in the set of reduced proper fractions for d ≤ 1, 000, 000 ? Nombres de Hamming Une petite pause géométrique Programmation dynamique Principes Les chemins Décomposition en somme Mais encore... Des probabilités 106 Mais comment calculer ∑ ϕ(k ) ? k =2 Dice game The chase Flea circus De l’arithmétique Le pgcd Plus musclé L’arbre de Stern-Brocot Counting fractions (2/2) Problem 73 : Counting fractions in a range Consider the fraction, n/d, where n and d are positive integers. If n < d and HCF (n, d ) = 1, it is called a reduced proper fraction. If we list the set of reduced proper fractions for d ≤ 8 in ascending order of size, we get : 1/8, 1/7, 1/6, 1/5, 1/4, 2/7, 1/3, 3/8, 2/5, 3/7, 1/2, Le problème de la machine à café Stéphane Gonnord Introduction The name of the game Project Euler Complexité Des cribles Principe et complexité D’autres applications Le crible «cache friendly» Programmation de base Somme des décimales Fibonacci 4/7, 3/5, 5/8, 2/3, 5/7, 3/4, 4/5, 5/6, 6/7, 7/8 It can be seen that there are 3 fractions between 1/3 and 1/2. How many fractions lie between 1/3 and 1/2 in the sorted set of reduced proper fractions for d ≤ 12, 000 ? Nombres de Hamming Une petite pause géométrique Programmation dynamique Principes Les chemins Décomposition en somme Mais encore... Des probabilités Dice game 12000 × 2000 calculs de pgcd : ça passe ! The chase Flea circus De l’arithmétique Le pgcd Plus musclé L’arbre de Stern-Brocot Le problème de la machine à café Lattice points Stéphane Gonnord Problem 233 : Lattice points Introduction Let f (N ) be the number of points with integer coordinates that are on a circle passing through (0, 0), (N , 0), (0, N ), and (N , N ). It can be shown that f (10000) = 36. What is the sum of all positive integers N ≤ 1011 such that f (N ) = 420 ? The name of the game Project Euler Complexité Des cribles Principe et complexité D’autres applications Le crible «cache friendly» Programmation de base Somme des décimales Fibonacci Nombres de Hamming I Une petite pause géométrique If the prime factorization of n is K e n=2 ∏ i =1 L piai Programmation dynamique Principes 2b × ∏ qj j , Les chemins Décomposition en somme j =1 Mais encore... Des probabilités K where (pi , qj ) = (1, 3) [4], then f (n) = 4 ∏ (2ai + 1). i =1 I Yapluka : voir comment 420 peut être obtenu ainsi... et cribler ! Dice game The chase Flea circus De l’arithmétique Le pgcd Plus musclé L’arbre de Stern-Brocot Ambiguous Numbers (1/2) Problem 198 : Ambiguous numbers A best approximation to a real number x for the denominator bound d is a rational number r/s (in reduced form) with s d, so that any rational number p/q which is closer to x than r /s has q ≥ d. Usually (blah blah) uniquely determined (blah blah) 9/40 has the two best approximations 1/4 and 1/5 for the denominator bound 6. How many ambiguous numbers x = p/q, 0 ≤ x ≤ 1/100, are there whose denominator q does not exceed 108 ? Le problème de la machine à café Stéphane Gonnord Introduction The name of the game Project Euler Complexité Des cribles Principe et complexité D’autres applications Le crible «cache friendly» Programmation de base Somme des décimales Fibonacci Nombres de Hamming Une petite pause géométrique Programmation dynamique Principes Les chemins Fractions continues ? Décomposition en somme Mais encore... Des probabilités Beurk Dice game The chase Flea circus De l’arithmétique Le pgcd Plus musclé L’arbre de Stern-Brocot Le problème de la machine à café L’arbre de Stern-Brocot 4 7 11 29 = = Introduction 1 1+ Project Euler Complexité 1+ 13 Des cribles Principe et complexité = [2, 1, 1, 1, 3] 1 1+ The name of the game = [1, 1, 3] 1 1 2+ Stéphane Gonnord 1 1+ D’autres applications Le crible «cache friendly» Programmation de base 1 1+ 1 3 Somme des décimales Fibonacci 1 2 Nombres de Hamming Une petite pause géométrique 1 3 2 3 1 4 2 5 Programmation dynamique Principes 3 5 ... Les chemins Décomposition en somme ... 3 8 ... 3 7 Mais encore... 4 7 ... Des probabilités 5 13 ... ... Dice game 5 9 ... ... The chase Flea circus 8 21 ... ... ... De l’arithmétique Le pgcd 11 29 Plus musclé ... L’arbre de Stern-Brocot Pour conclure... I On peut faire de la «vraie» info en python. I Et aussi des maths ! I Finalement, c’était pas si difficile : Le problème de la machine à café Stéphane Gonnord Introduction The name of the game Project Euler Complexité \documentclass[t,12pt]{beamer} I Retrouvez cette présentation, et surtout les énoncés exacts sur www.mp933.fr/ Des cribles Principe et complexité D’autres applications Le crible «cache friendly» Programmation de base Somme des décimales Fibonacci Nombres de Hamming Merci de votre attention ! Une petite pause géométrique Programmation dynamique Principes Les chemins Décomposition en somme Mais encore... Des probabilités Dice game The chase Flea circus De l’arithmétique Le pgcd Plus musclé L’arbre de Stern-Brocot