tous informatique pour tous plan...

385
Informatique pour tous Stéphane Gonnord Plan général Éléments d’un ordinateur Hard Soft Stockage de l’information Algorithmique et programmation Algorithmes Python Passage de l’un à l’autre Ingénierie numérique Pivot de Gauss Dichotomie et Newton Méthode d’Euler Bases de données Stocker intelligemment l’information Le langage SQL Informatique pour tous Le programme de cette année Stéphane Gonnord [email protected] www.mp933.fr Lycée du parc - Lyon Vendredi 6 septembre 2013 - Lycée du parc

Upload: others

Post on 09-Feb-2020

3 views

Category:

Documents


0 download

TRANSCRIPT

Page 1: tous Informatique pour tous Plan généralblog.psi945.fr/public/info-commune/sup/cours-sup-imprimable-python.pdfDichotomie et Newton Méthode d’Euler Bases de données Stocker intelligemment

Informatique pourtous

Stéphane Gonnord

Plan général

Éléments d’unordinateurHard

Soft

Stockage de l’information

Algorithmique etprogrammationAlgorithmes

Python

Passage de l’un à l’autre

Ingénierie numériquePivot de Gauss

Dichotomie et Newton

Méthode d’Euler

Bases de donnéesStocker intelligemmentl’information

Le langage SQL

Informatique pour tousLe programme de cette année

Stéphane Gonnord

[email protected]

www.mp933.fr

Lycée du parc - Lyon

Vendredi 6 septembre 2013 - Lycée du parc

Page 2: tous Informatique pour tous Plan généralblog.psi945.fr/public/info-commune/sup/cours-sup-imprimable-python.pdfDichotomie et Newton Méthode d’Euler Bases de données Stocker intelligemment

Informatique pourtous

Stéphane Gonnord

Plan général

Éléments d’unordinateurHard

Soft

Stockage de l’information

Algorithmique etprogrammationAlgorithmes

Python

Passage de l’un à l’autre

Ingénierie numériquePivot de Gauss

Dichotomie et Newton

Méthode d’Euler

Bases de donnéesStocker intelligemmentl’information

Le langage SQL

Organisation matérielle◮ Cours : vendredi 13-14 ; salle 434.

◮ TP : A.Garcia, mercredi 8-10 ; S.Gonnord jeudi 16H(semaines B), salle 717. Début... le 11 septembre.

◮ DS ? Oui !

◮ Pour vos machines : Pythonxy (Windows) ouAnaconda (Mac) par exemple.

◮ Il faudra bosser ? Bof... en cours et en TP !

◮ Il faut un bouquin ? Bof, pas vraiment !

Page 3: tous Informatique pour tous Plan généralblog.psi945.fr/public/info-commune/sup/cours-sup-imprimable-python.pdfDichotomie et Newton Méthode d’Euler Bases de données Stocker intelligemment

Informatique pourtous

Stéphane Gonnord

Plan général

Éléments d’unordinateurHard

Soft

Stockage de l’information

Algorithmique etprogrammationAlgorithmes

Python

Passage de l’un à l’autre

Ingénierie numériquePivot de Gauss

Dichotomie et Newton

Méthode d’Euler

Bases de donnéesStocker intelligemmentl’information

Le langage SQL

Plan général1. Éléments d’un ordinateur :

◮ hard ;◮ soft ;◮ stockage de l’information.

2. Algorithmique et programmation :◮ algorithmique, pseudo-code ;◮ langage Python ;◮ passer de l’un à l’autre.

3. Ingénierie numérique :◮ résolution de systèmes (pivot de Gauss) ;◮ résolution d’équations de la forme f (x) = 0 ;◮ résolution approchée d’équations différentielles.

4. Bases de données◮ le problème du stockage structuré ;◮ le « langage » SQL ;◮ mise en œuvre effective.

Page 4: tous Informatique pour tous Plan généralblog.psi945.fr/public/info-commune/sup/cours-sup-imprimable-python.pdfDichotomie et Newton Méthode d’Euler Bases de données Stocker intelligemment

Informatique pourtous

Stéphane Gonnord

Plan général

Éléments d’unordinateurHard

Soft

Stockage de l’information

Algorithmique etprogrammationAlgorithmes

Python

Passage de l’un à l’autre

Ingénierie numériquePivot de Gauss

Dichotomie et Newton

Méthode d’Euler

Bases de donnéesStocker intelligemmentl’information

Le langage SQL

HardMon nouveau jouet (gamma) :

Page 5: tous Informatique pour tous Plan généralblog.psi945.fr/public/info-commune/sup/cours-sup-imprimable-python.pdfDichotomie et Newton Méthode d’Euler Bases de données Stocker intelligemment

Informatique pourtous

Stéphane Gonnord

Plan général

Éléments d’unordinateurHard

Soft

Stockage de l’information

Algorithmique etprogrammationAlgorithmes

Python

Passage de l’un à l’autre

Ingénierie numériquePivot de Gauss

Dichotomie et Newton

Méthode d’Euler

Bases de donnéesStocker intelligemmentl’information

Le langage SQL

Soft◮ Système d’exploitation (OS)

◮ Windows, Unix, ...◮ Interface entre le matériel, les applications et les

utilisateurs.◮ Gère les entrées/sorties, le système de fichier, ...

◮ Au niveau utilisateur◮ Logiciels (Chrome, LibreOffice, WOW...)◮ Environnement de développement (Idle, Eclipse,

Spyder...)

Page 6: tous Informatique pour tous Plan généralblog.psi945.fr/public/info-commune/sup/cours-sup-imprimable-python.pdfDichotomie et Newton Méthode d’Euler Bases de données Stocker intelligemment

Informatique pourtous

Stéphane Gonnord

Plan général

Éléments d’unordinateurHard

Soft

Stockage de l’information

Algorithmique etprogrammationAlgorithmes

Python

Passage de l’un à l’autre

Ingénierie numériquePivot de Gauss

Dichotomie et Newton

Méthode d’Euler

Bases de donnéesStocker intelligemmentl’information

Le langage SQL

Stockage de l’information

... 0 1 1 0 0 ...

◮ Les entiers : «de longueur arbitrairement grande»

◮ Les réels : avec un nombre fixé de «chiffres»significatifs.

◮ Et plein d’autres trucs ! (HP)

◮ Conséquences : on ne peut pas «calculer» n’importequoi avec n’importe quelle précision.

Page 7: tous Informatique pour tous Plan généralblog.psi945.fr/public/info-commune/sup/cours-sup-imprimable-python.pdfDichotomie et Newton Méthode d’Euler Bases de données Stocker intelligemment

Informatique pourtous

Stéphane Gonnord

Plan général

Éléments d’unordinateurHard

Soft

Stockage de l’information

Algorithmique etprogrammationAlgorithmes

Python

Passage de l’un à l’autre

Ingénierie numériquePivot de Gauss

Dichotomie et Newton

Méthode d’Euler

Bases de donnéesStocker intelligemmentl’information

Le langage SQL

Algorithmique : préliminaire

52 +62 +72 + · · ·+142 +152

=

15

∑k=5

k2

Les petits points, ce n’est PAS vulgaire !

Et accessoirement, comment on calcule cette somme ?

Page 8: tous Informatique pour tous Plan généralblog.psi945.fr/public/info-commune/sup/cours-sup-imprimable-python.pdfDichotomie et Newton Méthode d’Euler Bases de données Stocker intelligemment

Informatique pourtous

Stéphane Gonnord

Plan général

Éléments d’unordinateurHard

Soft

Stockage de l’information

Algorithmique etprogrammationAlgorithmes

Python

Passage de l’un à l’autre

Ingénierie numériquePivot de Gauss

Dichotomie et Newton

Méthode d’Euler

Bases de donnéesStocker intelligemmentl’information

Le langage SQL

Déroulement de ce cours◮ réfléchir au cours 1 ;

◮ écrire le cours 1 ;

◮ présenter le cours 1 ;

◮ réfléchir au cours 2 ;

◮ écrire le cours 2 ;

◮ présenter le cours 2 ;

◮ ...

◮ ...

◮ réfléchir au cours 33 ;

◮ écrire le cours 33 ;

◮ présenter le cours 33.

Un peu long à écrire, non ?

Page 9: tous Informatique pour tous Plan généralblog.psi945.fr/public/info-commune/sup/cours-sup-imprimable-python.pdfDichotomie et Newton Méthode d’Euler Bases de données Stocker intelligemment

Informatique pourtous

Stéphane Gonnord

Plan général

Éléments d’unordinateurHard

Soft

Stockage de l’information

Algorithmique etprogrammationAlgorithmes

Python

Passage de l’un à l’autre

Ingénierie numériquePivot de Gauss

Dichotomie et Newton

Méthode d’Euler

Bases de donnéesStocker intelligemmentl’information

Le langage SQL

Pareil... mais mieux ( ?)◮ Sous forme d’algorithme :

pour n de 1 à 33 faireréfléchir au cours n

écrire le cours n

présenter le cours n

◮ Plus synthétique, non ?

◮ Ben oui, mais c’est fondamentalement la mêmechose !

◮ Que pensez-vous de ça ?

pour n de 1 à 33 faireréfléchir au cours n

écrire le cours n

pour n de 1 à 33 faireprésenter le cours n

Page 10: tous Informatique pour tous Plan généralblog.psi945.fr/public/info-commune/sup/cours-sup-imprimable-python.pdfDichotomie et Newton Méthode d’Euler Bases de données Stocker intelligemment

Informatique pourtous

Stéphane Gonnord

Plan général

Éléments d’unordinateurHard

Soft

Stockage de l’information

Algorithmique etprogrammationAlgorithmes

Python

Passage de l’un à l’autre

Ingénierie numériquePivot de Gauss

Dichotomie et Newton

Méthode d’Euler

Bases de donnéesStocker intelligemmentl’information

Le langage SQL

Un dernier exemple◮ Un algorithme :

s← 0pour k de 5 à 15 faire

s← s+ k2

◮ Que vaut s à la fin ?◮ Déroulons l’algorithme :

◮ s← 0 (s vaut 0)◮ s← s+52 (s vaut alors 0+52)◮ s← s+62 (s vaut alors 52 +62)◮ · · ·

◮ s← s+142 (s vaut alors 52 +62 + · · ·+142)◮ s← s+152 (s vaut alors 52 +62 + · · ·+152)

◮ Algorithme : conception←→ compréhension.

◮ Bref : ici encore, les petits points, c’est crucial.

Page 11: tous Informatique pour tous Plan généralblog.psi945.fr/public/info-commune/sup/cours-sup-imprimable-python.pdfDichotomie et Newton Méthode d’Euler Bases de données Stocker intelligemment

Informatique pourtous

Stéphane Gonnord

Plan général

Éléments d’unordinateurHard

Soft

Stockage de l’information

Algorithmique etprogrammationAlgorithmes

Python

Passage de l’un à l’autre

Ingénierie numériquePivot de Gauss

Dichotomie et Newton

Méthode d’Euler

Bases de donnéesStocker intelligemmentl’information

Le langage SQL

Quelques lignes de code

Page 12: tous Informatique pour tous Plan généralblog.psi945.fr/public/info-commune/sup/cours-sup-imprimable-python.pdfDichotomie et Newton Méthode d’Euler Bases de données Stocker intelligemment

Informatique pourtous

Stéphane Gonnord

Plan général

Éléments d’unordinateurHard

Soft

Stockage de l’information

Algorithmique etprogrammationAlgorithmes

Python

Passage de l’un à l’autre

Ingénierie numériquePivot de Gauss

Dichotomie et Newton

Méthode d’Euler

Bases de donnéesStocker intelligemmentl’information

Le langage SQL

Du problème au programme◮ Un problème : trouver le plus petit n ∈ N tel que

n

∑k=0

k2≥ 841.

◮ Un algorithme raisonnable :s← 0n← 0tant que s < 841 faire

n← n+1s← s+n2

◮ Un «programme» qui répond au problème :

s, n = 0, 0

while s < 841:

n = n + 1

s = s + n**2

Page 13: tous Informatique pour tous Plan généralblog.psi945.fr/public/info-commune/sup/cours-sup-imprimable-python.pdfDichotomie et Newton Méthode d’Euler Bases de données Stocker intelligemment

Informatique pourtous

Stéphane Gonnord

Plan général

Éléments d’unordinateurHard

Soft

Stockage de l’information

Algorithmique etprogrammationAlgorithmes

Python

Passage de l’un à l’autre

Ingénierie numériquePivot de Gauss

Dichotomie et Newton

Méthode d’Euler

Bases de donnéesStocker intelligemmentl’information

Le langage SQL

Un système à résoudre◮ Le système :

2x + 2y − 3z = 2−2x − y − 3z = −56x + 4y + 4z = 16

◮ La question... Quelle est-elle ?

◮ Résolution ? On exprime x à l’aide de y et z, puis z àl’aide de y , puis on trouve z, puis y , puis x .

Hop, trop fastoche !NOOOOOOOOOOOOOOOOOON !

PLUS JAMAIS ÇA !

Page 14: tous Informatique pour tous Plan généralblog.psi945.fr/public/info-commune/sup/cours-sup-imprimable-python.pdfDichotomie et Newton Méthode d’Euler Bases de données Stocker intelligemment

Informatique pourtous

Stéphane Gonnord

Plan général

Éléments d’unordinateurHard

Soft

Stockage de l’information

Algorithmique etprogrammationAlgorithmes

Python

Passage de l’un à l’autre

Ingénierie numériquePivot de Gauss

Dichotomie et Newton

Méthode d’Euler

Bases de donnéesStocker intelligemmentl’information

Le langage SQL

Pivot de Gauss◮ Mise sous forme triangulaire◮ Résolution◮ Équivalences préservées

2x + 2y − 3z = 2−2x − y − 3z = −56x + 4y + 4z = 16

L2←L2+L1⇐⇒

L3←L3−3L1

2x + 2y − 3z = 21y − 6z = −3

− 2y + 13z = 10

L3←L3+2L2⇐⇒

2x + 2y − 3z = 2y − 6z = −3

z = 4

L2←L2+6L3⇐⇒

2x + 2y − 3z = 2y = 21

z = 4

L1←L1−2L2+3L3⇐⇒

2x = −28y = 21z = 4

Il y a une seule solution, qui est le triplet (−14,21,4).

◮ C’est propre, simple. AUCUNE BIDOUILLE◮ Ça se programme très facilement.

Page 15: tous Informatique pour tous Plan généralblog.psi945.fr/public/info-commune/sup/cours-sup-imprimable-python.pdfDichotomie et Newton Méthode d’Euler Bases de données Stocker intelligemment

Informatique pourtous

Stéphane Gonnord

Plan général

Éléments d’unordinateurHard

Soft

Stockage de l’information

Algorithmique etprogrammationAlgorithmes

Python

Passage de l’un à l’autre

Ingénierie numériquePivot de Gauss

Dichotomie et Newton

Méthode d’Euler

Bases de donnéesStocker intelligemmentl’information

Le langage SQL

Dichotomie

y=x2 −2

a0 b0

a1 b1

a2 b2

a3 b3

a4 b4

a5 b5

1 21.51.25

1.375

1.43751.40625

√2

Page 16: tous Informatique pour tous Plan généralblog.psi945.fr/public/info-commune/sup/cours-sup-imprimable-python.pdfDichotomie et Newton Méthode d’Euler Bases de données Stocker intelligemment

Informatique pourtous

Stéphane Gonnord

Plan général

Éléments d’unordinateurHard

Soft

Stockage de l’information

Algorithmique etprogrammationAlgorithmes

Python

Passage de l’un à l’autre

Ingénierie numériquePivot de Gauss

Dichotomie et Newton

Méthode d’Euler

Bases de donnéesStocker intelligemmentl’information

Le langage SQL

Méthode de Newton

y=x2 −2

u0 =2u1 =1.5

u2 ≃1.417√2 ≃1.414

Page 17: tous Informatique pour tous Plan généralblog.psi945.fr/public/info-commune/sup/cours-sup-imprimable-python.pdfDichotomie et Newton Méthode d’Euler Bases de données Stocker intelligemment

Informatique pourtous

Stéphane Gonnord

Plan général

Éléments d’unordinateurHard

Soft

Stockage de l’information

Algorithmique etprogrammationAlgorithmes

Python

Passage de l’un à l’autre

Ingénierie numériquePivot de Gauss

Dichotomie et Newton

Méthode d’Euler

Bases de donnéesStocker intelligemmentl’information

Le langage SQL

Les équations différentielles◮ Le problème.

y ′′ =−y vs. y ′′ =−sin(y)

◮ Résolution approchée◮ Des exemples :

◮ Le pendule amorti

θ′′(t) =−k1 sin(θ(t))− k2θ′(t).

◮ Chute d’un objet, avec frottements

m−→a = m

−→g − k

−→v .

◮ Des systèmes différentiels{

x ′(t) = −0.2x(t) − y(t)y ′(t) = x(t) − 0.2y(t)

Page 18: tous Informatique pour tous Plan généralblog.psi945.fr/public/info-commune/sup/cours-sup-imprimable-python.pdfDichotomie et Newton Méthode d’Euler Bases de données Stocker intelligemment

Informatique pourtous

Stéphane Gonnord

Plan général

Éléments d’unordinateurHard

Soft

Stockage de l’information

Algorithmique etprogrammationAlgorithmes

Python

Passage de l’un à l’autre

Ingénierie numériquePivot de Gauss

Dichotomie et Newton

Méthode d’Euler

Bases de donnéesStocker intelligemmentl’information

Le langage SQL

De jolis dessins (1/3) : pendule amorti

θ′′(t) =−k1 sin(θ(t))− k2θ′(t)

0 2 4 6 8 10 12t

0

π

θ(t)

θ′(0)=1

θ′(0)=2

θ′(0)=5

θ′(0)=8

Page 19: tous Informatique pour tous Plan généralblog.psi945.fr/public/info-commune/sup/cours-sup-imprimable-python.pdfDichotomie et Newton Méthode d’Euler Bases de données Stocker intelligemment

Informatique pourtous

Stéphane Gonnord

Plan général

Éléments d’unordinateurHard

Soft

Stockage de l’information

Algorithmique etprogrammationAlgorithmes

Python

Passage de l’un à l’autre

Ingénierie numériquePivot de Gauss

Dichotomie et Newton

Méthode d’Euler

Bases de donnéesStocker intelligemmentl’information

Le langage SQL

De jolis dessins (2/3) : chute de pommes

m−→a = m

−→g − k

−→v

0.0 0.5 1.0 1.5 2.0 2.5 3.0x(t)

0.0

0.5

1.0

1.5

2.0

z(t)

Page 20: tous Informatique pour tous Plan généralblog.psi945.fr/public/info-commune/sup/cours-sup-imprimable-python.pdfDichotomie et Newton Méthode d’Euler Bases de données Stocker intelligemment

Informatique pourtous

Stéphane Gonnord

Plan général

Éléments d’unordinateurHard

Soft

Stockage de l’information

Algorithmique etprogrammationAlgorithmes

Python

Passage de l’un à l’autre

Ingénierie numériquePivot de Gauss

Dichotomie et Newton

Méthode d’Euler

Bases de donnéesStocker intelligemmentl’information

Le langage SQL

De jolis dessins (3/3) : X ′ = AX

A ∈

{(

−0.2 −11 −0.2

)

,

(

1 00 2

)

,

(

1 00 −2

)

,

(

1 10 1

)}

Page 21: tous Informatique pour tous Plan généralblog.psi945.fr/public/info-commune/sup/cours-sup-imprimable-python.pdfDichotomie et Newton Méthode d’Euler Bases de données Stocker intelligemment

Informatique pourtous

Stéphane Gonnord

Plan général

Éléments d’unordinateurHard

Soft

Stockage de l’information

Algorithmique etprogrammationAlgorithmes

Python

Passage de l’un à l’autre

Ingénierie numériquePivot de Gauss

Dichotomie et Newton

Méthode d’Euler

Bases de donnéesStocker intelligemmentl’information

Le langage SQL

Entre les deux

k1, k2 = 1, 1

def pendule_amorti(X, _):

theta, thetap = X

return array([thetap, -k1*np.sin(theta)-k2*thetap])

t = np.arange(0, 30, 0.01)

r = odeint(pendule_amorti, array([0, 1]), t)

pl.plot(r[:, 0], r[:, 1])

...

r = odeint(pendule_amorti, array([0, 8]), t)

pl.plot(r[:, 0], r[:, 1], ’-’, linewidth=4)

pl.grid()

...

pl.savefig(’portrait-amorti.pdf’)

pl.show()

Page 22: tous Informatique pour tous Plan généralblog.psi945.fr/public/info-commune/sup/cours-sup-imprimable-python.pdfDichotomie et Newton Méthode d’Euler Bases de données Stocker intelligemment

Informatique pourtous

Stéphane Gonnord

Plan général

Éléments d’unordinateurHard

Soft

Stockage de l’information

Algorithmique etprogrammationAlgorithmes

Python

Passage de l’un à l’autre

Ingénierie numériquePivot de Gauss

Dichotomie et Newton

Méthode d’Euler

Bases de donnéesStocker intelligemmentl’information

Le langage SQL

Stocker intelligemment l’information◮ Pour l’administration :

◮ Antonio Garcia : maths en 841◮ Antonio Garcia : maple en 841 [Révoqué]◮ Stéphane Gonnord : maths en 933◮ Stéphane Gonnord : maple en 933◮ Stéphane Gonnord : option info en 931, 932, 933◮ Cédric Mancini : physique en 841◮ Antonio Garcia : IPT en 841◮ Stéphane Gonnord : IPT en 841◮ ...

◮ Quel bazar !

◮ Qui enseigne de l’option info ou de l’info pour tousdans une classe de la forme ××1 ?

Page 23: tous Informatique pour tous Plan généralblog.psi945.fr/public/info-commune/sup/cours-sup-imprimable-python.pdfDichotomie et Newton Méthode d’Euler Bases de données Stocker intelligemment

Informatique pourtous

Stéphane Gonnord

Plan général

Éléments d’unordinateurHard

Soft

Stockage de l’information

Algorithmique etprogrammationAlgorithmes

Python

Passage de l’un à l’autre

Ingénierie numériquePivot de Gauss

Dichotomie et Newton

Méthode d’Euler

Bases de donnéesStocker intelligemmentl’information

Le langage SQL

Stocker intelligemment l’informationAlors, comment ranger ça ?

◮ Dans un tableau ?

Mouais...

◮ Dans un tableur ?

Mouais...

◮ Dans une boîte noire à laquelle on accède parmagie ?

Yeah !

Il reste à apprendre le «abracadabra» pour accéder à laboîte noire.

Page 24: tous Informatique pour tous Plan généralblog.psi945.fr/public/info-commune/sup/cours-sup-imprimable-python.pdfDichotomie et Newton Méthode d’Euler Bases de données Stocker intelligemment

Informatique pourtous

Stéphane Gonnord

Plan général

Éléments d’unordinateurHard

Soft

Stockage de l’information

Algorithmique etprogrammationAlgorithmes

Python

Passage de l’un à l’autre

Ingénierie numériquePivot de Gauss

Dichotomie et Newton

Méthode d’Euler

Bases de donnéesStocker intelligemmentl’information

Le langage SQL

SQL : un langage de requêtes◮ Un exemple ?

SELECT Nom FROM Enseignements WHERE

( Matiere in (’Option info’, ’IPT’)

AND

MOD(Classe,10)=1) )

◮ Un autre ?

SELECT el.nom FROM eleves el

WHERE (SELECT count (*)

FROM colles colle

WHERE colle.eleve=el.nom

AND colle.note<10)

> 9

◮ En pratique ? requètes via Python ou via unclicodrome.

Page 25: tous Informatique pour tous Plan généralblog.psi945.fr/public/info-commune/sup/cours-sup-imprimable-python.pdfDichotomie et Newton Méthode d’Euler Bases de données Stocker intelligemment

Informatique pourtous

Stéphane Gonnord

Plan général

Éléments d’unordinateurHard

Soft

Stockage de l’information

Algorithmique etprogrammationAlgorithmes

Python

Passage de l’un à l’autre

Ingénierie numériquePivot de Gauss

Dichotomie et Newton

Méthode d’Euler

Bases de donnéesStocker intelligemmentl’information

Le langage SQL

End gameMerci de votre attention !

I wrote 20 short programs in Python yesterday. It was

wonderful. Perl, I’m leaving you. [XKCD 353]

Page 26: tous Informatique pour tous Plan généralblog.psi945.fr/public/info-commune/sup/cours-sup-imprimable-python.pdfDichotomie et Newton Méthode d’Euler Bases de données Stocker intelligemment

Ouvrons la bête

Stéphane Gonnord

Plan

BestiaireZolis photos

Éléments communs

Description d’unordinateurThéorie

Real world

Désossons le bestiauCommun à tous

Mémoire/stockage

Cartes d’extension

De gros chiffres

QuelquescomparaisonsAu néolithique

Trois budgets

Ouvrons la bêteQuelques éléments d’architecture matérielle

Stéphane Gonnord

[email protected]

www.mp933.fr

Lycée du parc - Lyon

Vendredi 13 septembre 2013 - Lycée du parc

Les photos ne sont pas toutes libres de droit

Page 27: tous Informatique pour tous Plan généralblog.psi945.fr/public/info-commune/sup/cours-sup-imprimable-python.pdfDichotomie et Newton Méthode d’Euler Bases de données Stocker intelligemment

Ouvrons la bête

Stéphane Gonnord

Plan

BestiaireZolis photos

Éléments communs

Description d’unordinateurThéorie

Real world

Désossons le bestiauCommun à tous

Mémoire/stockage

Cartes d’extension

De gros chiffres

QuelquescomparaisonsAu néolithique

Trois budgets

Plan1. Un bestiaire :

◮ quelques ordinateurs à la maison ;◮ éléments communs.

2. Description d’un ordinateur :◮ théorie (Turing, von Neuman) ;◮ real world ;◮ fonctionnement approximatif.

3. Désossons la bête :◮ la carte mère ; le microprocesseur ;◮ la RAM, le disque dur ;◮ etc.

4. Quelques comparaisons :◮ 2000 vs. 2013 ;◮ 1000 vs. 300 vs. 50.

Page 28: tous Informatique pour tous Plan généralblog.psi945.fr/public/info-commune/sup/cours-sup-imprimable-python.pdfDichotomie et Newton Méthode d’Euler Bases de données Stocker intelligemment

Ouvrons la bête

Stéphane Gonnord

Plan

BestiaireZolis photos

Éléments communs

Description d’unordinateurThéorie

Real world

Désossons le bestiauCommun à tous

Mémoire/stockage

Cartes d’extension

De gros chiffres

QuelquescomparaisonsAu néolithique

Trois budgets

Le ZX 81

Le début de l’histoire...

Page 29: tous Informatique pour tous Plan généralblog.psi945.fr/public/info-commune/sup/cours-sup-imprimable-python.pdfDichotomie et Newton Méthode d’Euler Bases de données Stocker intelligemment

Ouvrons la bête

Stéphane Gonnord

Plan

BestiaireZolis photos

Éléments communs

Description d’unordinateurThéorie

Real world

Désossons le bestiauCommun à tous

Mémoire/stockage

Cartes d’extension

De gros chiffres

QuelquescomparaisonsAu néolithique

Trois budgets

Le petit dernier : γ

Et il fonctionne !

Page 30: tous Informatique pour tous Plan généralblog.psi945.fr/public/info-commune/sup/cours-sup-imprimable-python.pdfDichotomie et Newton Méthode d’Euler Bases de données Stocker intelligemment

Ouvrons la bête

Stéphane Gonnord

Plan

BestiaireZolis photos

Éléments communs

Description d’unordinateurThéorie

Real world

Désossons le bestiauCommun à tous

Mémoire/stockage

Cartes d’extension

De gros chiffres

QuelquescomparaisonsAu néolithique

Trois budgets

Calculatrice 5 fonctions

Plus rustique...

Page 31: tous Informatique pour tous Plan généralblog.psi945.fr/public/info-commune/sup/cours-sup-imprimable-python.pdfDichotomie et Newton Méthode d’Euler Bases de données Stocker intelligemment

Ouvrons la bête

Stéphane Gonnord

Plan

BestiaireZolis photos

Éléments communs

Description d’unordinateurThéorie

Real world

Désossons le bestiauCommun à tous

Mémoire/stockage

Cartes d’extension

De gros chiffres

QuelquescomparaisonsAu néolithique

Trois budgets

Un serveur (Meert)

Le serveur... et la freebox

Page 32: tous Informatique pour tous Plan généralblog.psi945.fr/public/info-commune/sup/cours-sup-imprimable-python.pdfDichotomie et Newton Méthode d’Euler Bases de données Stocker intelligemment

Ouvrons la bête

Stéphane Gonnord

Plan

BestiaireZolis photos

Éléments communs

Description d’unordinateurThéorie

Real world

Désossons le bestiauCommun à tous

Mémoire/stockage

Cartes d’extension

De gros chiffres

QuelquescomparaisonsAu néolithique

Trois budgets

Votre serviteur

Euler

Page 33: tous Informatique pour tous Plan généralblog.psi945.fr/public/info-commune/sup/cours-sup-imprimable-python.pdfDichotomie et Newton Méthode d’Euler Bases de données Stocker intelligemment

Ouvrons la bête

Stéphane Gonnord

Plan

BestiaireZolis photos

Éléments communs

Description d’unordinateurThéorie

Real world

Désossons le bestiauCommun à tous

Mémoire/stockage

Cartes d’extension

De gros chiffres

QuelquescomparaisonsAu néolithique

Trois budgets

Un bon vieux smartphone

Un vieil (3 ans) HTC

Page 34: tous Informatique pour tous Plan généralblog.psi945.fr/public/info-commune/sup/cours-sup-imprimable-python.pdfDichotomie et Newton Méthode d’Euler Bases de données Stocker intelligemment

Ouvrons la bête

Stéphane Gonnord

Plan

BestiaireZolis photos

Éléments communs

Description d’unordinateurThéorie

Real world

Désossons le bestiauCommun à tous

Mémoire/stockage

Cartes d’extension

De gros chiffres

QuelquescomparaisonsAu néolithique

Trois budgets

Une tablette

Et son utilisation principale

Page 35: tous Informatique pour tous Plan généralblog.psi945.fr/public/info-commune/sup/cours-sup-imprimable-python.pdfDichotomie et Newton Méthode d’Euler Bases de données Stocker intelligemment

Ouvrons la bête

Stéphane Gonnord

Plan

BestiaireZolis photos

Éléments communs

Description d’unordinateurThéorie

Real world

Désossons le bestiauCommun à tous

Mémoire/stockage

Cartes d’extension

De gros chiffres

QuelquescomparaisonsAu néolithique

Trois budgets

Une unité centrale...

qui ne marche plus !

Page 36: tous Informatique pour tous Plan généralblog.psi945.fr/public/info-commune/sup/cours-sup-imprimable-python.pdfDichotomie et Newton Méthode d’Euler Bases de données Stocker intelligemment

Ouvrons la bête

Stéphane Gonnord

Plan

BestiaireZolis photos

Éléments communs

Description d’unordinateurThéorie

Real world

Désossons le bestiauCommun à tous

Mémoire/stockage

Cartes d’extension

De gros chiffres

QuelquescomparaisonsAu néolithique

Trois budgets

Bizarre

Une machine de Turing...

Page 37: tous Informatique pour tous Plan généralblog.psi945.fr/public/info-commune/sup/cours-sup-imprimable-python.pdfDichotomie et Newton Méthode d’Euler Bases de données Stocker intelligemment

Ouvrons la bête

Stéphane Gonnord

Plan

BestiaireZolis photos

Éléments communs

Description d’unordinateurThéorie

Real world

Désossons le bestiauCommun à tous

Mémoire/stockage

Cartes d’extension

De gros chiffres

QuelquescomparaisonsAu néolithique

Trois budgets

À guichet ouvert

En revenant de Nantes...

Page 38: tous Informatique pour tous Plan généralblog.psi945.fr/public/info-commune/sup/cours-sup-imprimable-python.pdfDichotomie et Newton Méthode d’Euler Bases de données Stocker intelligemment

Ouvrons la bête

Stéphane Gonnord

Plan

BestiaireZolis photos

Éléments communs

Description d’unordinateurThéorie

Real world

Désossons le bestiauCommun à tous

Mémoire/stockage

Cartes d’extension

De gros chiffres

QuelquescomparaisonsAu néolithique

Trois budgets

HPC

Quelques pétaflops sous le capot.

Page 39: tous Informatique pour tous Plan généralblog.psi945.fr/public/info-commune/sup/cours-sup-imprimable-python.pdfDichotomie et Newton Méthode d’Euler Bases de données Stocker intelligemment

Ouvrons la bête

Stéphane Gonnord

Plan

BestiaireZolis photos

Éléments communs

Description d’unordinateurThéorie

Real world

Désossons le bestiauCommun à tous

Mémoire/stockage

Cartes d’extension

De gros chiffres

QuelquescomparaisonsAu néolithique

Trois budgets

Éléments communsPoints communs (partiels) entre ces bidules :

◮ «calculent» ;

◮ fonctionnent avec des « programmes » écrit à lanaissance et/ou plus tard ;

◮ entrées ;

◮ sorties ;

◮ stockage de données ;

◮ connectivité.

Page 40: tous Informatique pour tous Plan généralblog.psi945.fr/public/info-commune/sup/cours-sup-imprimable-python.pdfDichotomie et Newton Méthode d’Euler Bases de données Stocker intelligemment

Ouvrons la bête

Stéphane Gonnord

Plan

BestiaireZolis photos

Éléments communs

Description d’unordinateurThéorie

Real world

Désossons le bestiauCommun à tous

Mémoire/stockage

Cartes d’extension

De gros chiffres

QuelquescomparaisonsAu néolithique

Trois budgets

Point de vue de Turing (1936)

Page 41: tous Informatique pour tous Plan généralblog.psi945.fr/public/info-commune/sup/cours-sup-imprimable-python.pdfDichotomie et Newton Méthode d’Euler Bases de données Stocker intelligemment

Ouvrons la bête

Stéphane Gonnord

Plan

BestiaireZolis photos

Éléments communs

Description d’unordinateurThéorie

Real world

Désossons le bestiauCommun à tous

Mémoire/stockage

Cartes d’extension

De gros chiffres

QuelquescomparaisonsAu néolithique

Trois budgets

Une machine de Turing

... # 0 1 1 0 0 1 F ...

Que fait le « programme » suivant ?

qa,#−→ qa,#,D

qa,0 −→ qa,1,D

qa,1 −→ qa,0,D

qa,F −→ qr ,F ,G

qr ,0 −→ qr ,0,G

qr ,1 −→ qr ,1,G

qr ,#−→ qF ,#,⊥

Mouais... on ne va pas aller bien loin avec ça !

Page 42: tous Informatique pour tous Plan généralblog.psi945.fr/public/info-commune/sup/cours-sup-imprimable-python.pdfDichotomie et Newton Méthode d’Euler Bases de données Stocker intelligemment

Ouvrons la bête

Stéphane Gonnord

Plan

BestiaireZolis photos

Éléments communs

Description d’unordinateurThéorie

Real world

Désossons le bestiauCommun à tous

Mémoire/stockage

Cartes d’extension

De gros chiffres

QuelquescomparaisonsAu néolithique

Trois budgets

Des tas de machines de Turing

... # 1 1 0 1 0 1 F ...

Écrire un « programme » sur machines de Turing qui...◮ ajoute un 0 en fin de ruban ;◮ ajoute un 0 en début de ruban ;◮ ajoute 1 à l’entier codé. Exemple : 42+1 = 43...

110101 −→ 001101

◮ multiplie par 2 l’entier codé ;◮ ...◮ résout un sudoku !

Thèse de Church-Turing

Tout ce qu’on peut « calculer », on peut le calculer avecune machine de Turing.

Page 43: tous Informatique pour tous Plan généralblog.psi945.fr/public/info-commune/sup/cours-sup-imprimable-python.pdfDichotomie et Newton Méthode d’Euler Bases de données Stocker intelligemment

Ouvrons la bête

Stéphane Gonnord

Plan

BestiaireZolis photos

Éléments communs

Description d’unordinateurThéorie

Real world

Désossons le bestiauCommun à tous

Mémoire/stockage

Cartes d’extension

De gros chiffres

QuelquescomparaisonsAu néolithique

Trois budgets

Point de vue de von Neumann (1945)

Page 44: tous Informatique pour tous Plan généralblog.psi945.fr/public/info-commune/sup/cours-sup-imprimable-python.pdfDichotomie et Newton Méthode d’Euler Bases de données Stocker intelligemment

Ouvrons la bête

Stéphane Gonnord

Plan

BestiaireZolis photos

Éléments communs

Description d’unordinateurThéorie

Real world

Désossons le bestiauCommun à tous

Mémoire/stockage

Cartes d’extension

De gros chiffres

QuelquescomparaisonsAu néolithique

Trois budgets

Dans la réalité

Page 45: tous Informatique pour tous Plan généralblog.psi945.fr/public/info-commune/sup/cours-sup-imprimable-python.pdfDichotomie et Newton Méthode d’Euler Bases de données Stocker intelligemment

Ouvrons la bête

Stéphane Gonnord

Plan

BestiaireZolis photos

Éléments communs

Description d’unordinateurThéorie

Real world

Désossons le bestiauCommun à tous

Mémoire/stockage

Cartes d’extension

De gros chiffres

QuelquescomparaisonsAu néolithique

Trois budgets

Fonctionnement approximatif (1/3)La vie monotone de l’unité de contrôle :

Lire instruction

Incrémenter PC

Décoder instruction

Exécuter instruction

Page 46: tous Informatique pour tous Plan généralblog.psi945.fr/public/info-commune/sup/cours-sup-imprimable-python.pdfDichotomie et Newton Méthode d’Euler Bases de données Stocker intelligemment

Ouvrons la bête

Stéphane Gonnord

Plan

BestiaireZolis photos

Éléments communs

Description d’unordinateurThéorie

Real world

Désossons le bestiauCommun à tous

Mémoire/stockage

Cartes d’extension

De gros chiffres

QuelquescomparaisonsAu néolithique

Trois budgets

Fonctionnement approximatif (2/3)Exemples d’instructions :

◮ LOAD : charge une valeur de la mémoire vers unrégistre.

◮ STORE : l’opération inverse !

◮ ADD : fait la somme de deux régistres, et la placedans un troisième.

◮ BNE : Branch if Not Equal, pour les tests.

LOAD R0, B ; charge B dans le registre R0

LOAD R1, C ; charge C dans le registre R1

ADD R2, R0, R1 ; R2 <- R0 + R1

STORE R2, A ; stocke R2 à l’adresse A

Page 47: tous Informatique pour tous Plan généralblog.psi945.fr/public/info-commune/sup/cours-sup-imprimable-python.pdfDichotomie et Newton Méthode d’Euler Bases de données Stocker intelligemment

Ouvrons la bête

Stéphane Gonnord

Plan

BestiaireZolis photos

Éléments communs

Description d’unordinateurThéorie

Real world

Désossons le bestiauCommun à tous

Mémoire/stockage

Cartes d’extension

De gros chiffres

QuelquescomparaisonsAu néolithique

Trois budgets

Fonctionnement approximatif (3/3)En réalité, c’est « un peu » plus complexe :

◮ programme et données dans la RAM ;

◮ différentes mémoires (cache de différents niveaux,RAM) ;

◮ des tas de bus à synchroniser ;

◮ pipeline ;

◮ unité de prédiction de branchement ;

◮ périphériques ;

◮ ...

Page 48: tous Informatique pour tous Plan généralblog.psi945.fr/public/info-commune/sup/cours-sup-imprimable-python.pdfDichotomie et Newton Méthode d’Euler Bases de données Stocker intelligemment

Ouvrons la bête

Stéphane Gonnord

Plan

BestiaireZolis photos

Éléments communs

Description d’unordinateurThéorie

Real world

Désossons le bestiauCommun à tous

Mémoire/stockage

Cartes d’extension

De gros chiffres

QuelquescomparaisonsAu néolithique

Trois budgets

«La plaque maternelle»Carte mère (motherboard)

www.ldlc.com, août 2013 :majoritairement de 40e à 100e (jusqu’à 1000e...)

Page 49: tous Informatique pour tous Plan généralblog.psi945.fr/public/info-commune/sup/cours-sup-imprimable-python.pdfDichotomie et Newton Méthode d’Euler Bases de données Stocker intelligemment

Ouvrons la bête

Stéphane Gonnord

Plan

BestiaireZolis photos

Éléments communs

Description d’unordinateurThéorie

Real world

Désossons le bestiauCommun à tous

Mémoire/stockage

Cartes d’extension

De gros chiffres

QuelquescomparaisonsAu néolithique

Trois budgets

Carte mère◮ supporte l’ensemble des éléments ;

◮ est placée dans un boitier, et connectée àl’alimentation ;

◮ BIOS ;

◮ Bus ;

◮ ...

Page 50: tous Informatique pour tous Plan généralblog.psi945.fr/public/info-commune/sup/cours-sup-imprimable-python.pdfDichotomie et Newton Méthode d’Euler Bases de données Stocker intelligemment

Ouvrons la bête

Stéphane Gonnord

Plan

BestiaireZolis photos

Éléments communs

Description d’unordinateurThéorie

Real world

Désossons le bestiauCommun à tous

Mémoire/stockage

Cartes d’extension

De gros chiffres

QuelquescomparaisonsAu néolithique

Trois budgets

Le (micro)processeur (Central Processing Unit)

◮ Intel, AMD, ...

◮ majoritairement de 30 à 150e (jusqu’à 2000e...).

Page 51: tous Informatique pour tous Plan généralblog.psi945.fr/public/info-commune/sup/cours-sup-imprimable-python.pdfDichotomie et Newton Méthode d’Euler Bases de données Stocker intelligemment

Ouvrons la bête

Stéphane Gonnord

Plan

BestiaireZolis photos

Éléments communs

Description d’unordinateurThéorie

Real world

Désossons le bestiauCommun à tous

Mémoire/stockage

Cartes d’extension

De gros chiffres

QuelquescomparaisonsAu néolithique

Trois budgets

Le CPU◮ multicœurs ;

◮ multiprocesseurs ;

◮ caches de différents niveaux ;

◮ CPU vs. GPU ;

◮ ...

Bref, les électroniciens hard ont encore du plein emploipour quelques années !

Page 52: tous Informatique pour tous Plan généralblog.psi945.fr/public/info-commune/sup/cours-sup-imprimable-python.pdfDichotomie et Newton Méthode d’Euler Bases de données Stocker intelligemment

Ouvrons la bête

Stéphane Gonnord

Plan

BestiaireZolis photos

Éléments communs

Description d’unordinateurThéorie

Real world

Désossons le bestiauCommun à tous

Mémoire/stockage

Cartes d’extension

De gros chiffres

QuelquescomparaisonsAu néolithique

Trois budgets

RAM

RAM nue, puis dans son slot, sur la carte mère

◮ de 500 Mo à 8 Go ;

◮ nombreux types (SDR, DDR, DDR2, ...) ;

◮ nombreuses fréquences ;

◮ 1 Go DDR2 800 MHz : de 15 à 30e

Page 53: tous Informatique pour tous Plan généralblog.psi945.fr/public/info-commune/sup/cours-sup-imprimable-python.pdfDichotomie et Newton Méthode d’Euler Bases de données Stocker intelligemment

Ouvrons la bête

Stéphane Gonnord

Plan

BestiaireZolis photos

Éléments communs

Description d’unordinateurThéorie

Real world

Désossons le bestiauCommun à tous

Mémoire/stockage

Cartes d’extension

De gros chiffres

QuelquescomparaisonsAu néolithique

Trois budgets

Disque dur (Hard Drive)

◮ capacité : de 100 Go à 6 To ;◮ vitesse de rotation (de 5000 à 15000 tpm) ;◮ cache (de 8 à 128 Mo) ;◮ 1 To, 7200 tpm, 32 Mo cache : de 60 à 80 e

Page 54: tous Informatique pour tous Plan généralblog.psi945.fr/public/info-commune/sup/cours-sup-imprimable-python.pdfDichotomie et Newton Méthode d’Euler Bases de données Stocker intelligemment

Ouvrons la bête

Stéphane Gonnord

Plan

BestiaireZolis photos

Éléments communs

Description d’unordinateurThéorie

Real world

Désossons le bestiauCommun à tous

Mémoire/stockage

Cartes d’extension

De gros chiffres

QuelquescomparaisonsAu néolithique

Trois budgets

Cartes mémoire (Solid State Drive)

◮ de 1 Go à 128 Go ;

◮ alternative raisonnable aux disques durs ;

◮ nombreux types (SD, SDHC, MicroSD, ...) ;

◮ 1 Go DDR2 800 MHz : de 15 à 30e

Page 55: tous Informatique pour tous Plan généralblog.psi945.fr/public/info-commune/sup/cours-sup-imprimable-python.pdfDichotomie et Newton Méthode d’Euler Bases de données Stocker intelligemment

Ouvrons la bête

Stéphane Gonnord

Plan

BestiaireZolis photos

Éléments communs

Description d’unordinateurThéorie

Real world

Désossons le bestiauCommun à tous

Mémoire/stockage

Cartes d’extension

De gros chiffres

QuelquescomparaisonsAu néolithique

Trois budgets

Cartes d’extension◮ Le port :

◮ Les extensions (connectique, son, wifi...) :

Page 56: tous Informatique pour tous Plan généralblog.psi945.fr/public/info-commune/sup/cours-sup-imprimable-python.pdfDichotomie et Newton Méthode d’Euler Bases de données Stocker intelligemment

Ouvrons la bête

Stéphane Gonnord

Plan

BestiaireZolis photos

Éléments communs

Description d’unordinateurThéorie

Real world

Désossons le bestiauCommun à tous

Mémoire/stockage

Cartes d’extension

De gros chiffres

QuelquescomparaisonsAu néolithique

Trois budgets

Kilo, méga, giga, tera, peta◮ bytes vs bits ;

◮ 210≃ 103 ;

◮ Mo (usage ; 106) vs Mio (mébioctets ; 220)

Ordres de grandeur :◮ Fréquences :

◮ processeur (1 GHz à 4 GHz) ;◮ bus (1 GHz, soit par exemple 32 Go par seconde) ;◮ mémoire (du même ordre ; un peu inférieur).

◮ Quantités de données :◮ cache (de 0.128 Mo en L1 à 12 Mo en L2) ;◮ RAM (0.5 Go à 8 Go) ;◮ CD-ROM (0.2 à 0.9 Go), DVD (4 à 8 Go) et Blu ray

(25 à 100 Go).◮ SSD (1 à 128 Go), HD (100 à 6000 Go).

Page 57: tous Informatique pour tous Plan généralblog.psi945.fr/public/info-commune/sup/cours-sup-imprimable-python.pdfDichotomie et Newton Méthode d’Euler Bases de données Stocker intelligemment

Ouvrons la bête

Stéphane Gonnord

Plan

BestiaireZolis photos

Éléments communs

Description d’unordinateurThéorie

Real world

Désossons le bestiauCommun à tous

Mémoire/stockage

Cartes d’extension

De gros chiffres

QuelquescomparaisonsAu néolithique

Trois budgets

Il y a plus de 10 ansDébut 2000 :

◮ Modèle : HP Vectra VL 400.

◮ Gamme : « je m’achète un gros PC » (genre 1000 eactuellement).

◮ Prix (estimé) : ∼ 2000 e.

◮ Processeur : Pentium III, 800 MHz, 256 ko de cache.

◮ Disque dur : 10 Go ; RAM : 128 Mo.

◮ Bonne carte graphique de l’époque.

◮ Windows 2000.

Bref...

Un Raspberry π avant l’heure !

Page 58: tous Informatique pour tous Plan généralblog.psi945.fr/public/info-commune/sup/cours-sup-imprimable-python.pdfDichotomie et Newton Méthode d’Euler Bases de données Stocker intelligemment

Ouvrons la bête

Stéphane Gonnord

Plan

BestiaireZolis photos

Éléments communs

Description d’unordinateurThéorie

Real world

Désossons le bestiauCommun à tous

Mémoire/stockage

Cartes d’extension

De gros chiffres

QuelquescomparaisonsAu néolithique

Trois budgets

Trois budgets◮ Raspberry π : modèle B, plus une SSD 8 Go

◮ deux autres configurations (sans écran) : rue ducommerce, août 2013.

Gamma, 40 e Config. 300 e Config. 1000 eProc. 0.7 MHz 2*3.4 GHz 4*3.4 GHzCache 0.128 Mo 1 Mo 16 Mo

HD/SSD 0 / 8 Go 0.5 To / 0 1 To/16 GoRAM 0.5 Go 4 Go 16 Go

Vidéo GPU très correct Bon GPU ÉnôôôrmeOS Linux Non Windows 8

Page 59: tous Informatique pour tous Plan généralblog.psi945.fr/public/info-commune/sup/cours-sup-imprimable-python.pdfDichotomie et Newton Méthode d’Euler Bases de données Stocker intelligemment

Ouvrons la bête

Stéphane Gonnord

Plan

BestiaireZolis photos

Éléments communs

Description d’unordinateurThéorie

Real world

Désossons le bestiauCommun à tous

Mémoire/stockage

Cartes d’extension

De gros chiffres

QuelquescomparaisonsAu néolithique

Trois budgets

End gameMerci de votre attention !

Page 60: tous Informatique pour tous Plan généralblog.psi945.fr/public/info-commune/sup/cours-sup-imprimable-python.pdfDichotomie et Newton Méthode d’Euler Bases de données Stocker intelligemment

Après le hard, le soft

Stéphane Gonnord

Plan

Systèmed’exploitationSon rôle

Les OS au cours du temps

Contenu d’un disquedurQuoi, où ?

Structure arborescente

Différents types de fichiers

Droits sur les fichiers

Apprendre à travaillerDossiers et sous-dossiers

Le choix des noms

Sauvegardes et versioning

Utiliser un IDELogique globale

Python for nerds

Python for newbies

Après le hard, le softOS, IDE and all that

Stéphane Gonnord

[email protected]

www.mp933.fr

Lycée du parc - Lyon

Vendredi 20 septembre 2013 - Lycée du parc

Page 61: tous Informatique pour tous Plan généralblog.psi945.fr/public/info-commune/sup/cours-sup-imprimable-python.pdfDichotomie et Newton Méthode d’Euler Bases de données Stocker intelligemment

Après le hard, le soft

Stéphane Gonnord

Plan

Systèmed’exploitationSon rôle

Les OS au cours du temps

Contenu d’un disquedurQuoi, où ?

Structure arborescente

Différents types de fichiers

Droits sur les fichiers

Apprendre à travaillerDossiers et sous-dossiers

Le choix des noms

Sauvegardes et versioning

Utiliser un IDELogique globale

Python for nerds

Python for newbies

Plan1. Système d’exploitation :

◮ à quoi ils servent ;◮ qui ils sont.

2. Le contenu d’un disque dur :◮ dossiers vs. fichiers ;◮ documents vs. exécutables ;◮ à toi, à moi, à lui.

3. Apprendre à travailler avec un ordinateur :◮ de l’ordre dans ses dossiers et fichiers ;◮ le choix des noms ;◮ sauvegardes et gestion des versions.

4. Utiliser un IDE :◮ Le casting Python◮ Python for nerds ;◮ Spyder vs. Idle.

Page 62: tous Informatique pour tous Plan généralblog.psi945.fr/public/info-commune/sup/cours-sup-imprimable-python.pdfDichotomie et Newton Méthode d’Euler Bases de données Stocker intelligemment

Après le hard, le soft

Stéphane Gonnord

Plan

Systèmed’exploitationSon rôle

Les OS au cours du temps

Contenu d’un disquedurQuoi, où ?

Structure arborescente

Différents types de fichiers

Droits sur les fichiers

Apprendre à travaillerDossiers et sous-dossiers

Le choix des noms

Sauvegardes et versioning

Utiliser un IDELogique globale

Python for nerds

Python for newbies

Système d’exploitation (Operating System)◮ Est lancé au boot de l’ordinateur, éventuellement

après un choix (grub/lilo).

◮ Interface entre l’utilisateur, le matériel et lesapplications.

◮ Organisation du «système de fichier» (DD...).◮ Gestion des différents utilisateurs :

◮ dossiers personnels ;◮ droits en lecture, écriture, exécution.

◮ Lancement des applications/processus, gestion duparallélisme.

Page 63: tous Informatique pour tous Plan généralblog.psi945.fr/public/info-commune/sup/cours-sup-imprimable-python.pdfDichotomie et Newton Méthode d’Euler Bases de données Stocker intelligemment

Après le hard, le soft

Stéphane Gonnord

Plan

Systèmed’exploitationSon rôle

Les OS au cours du temps

Contenu d’un disquedurQuoi, où ?

Structure arborescente

Différents types de fichiers

Droits sur les fichiers

Apprendre à travaillerDossiers et sous-dossiers

Le choix des noms

Sauvegardes et versioning

Utiliser un IDELogique globale

Python for nerds

Python for newbies

OS : un peu d’histoireIt’s a warm summer evening in ancient Greece...

Systèmes d’exploitations des ordinateurs personnels :◮ Unix (1969)◮ DOS (1981) - QDOS puis MS-DOS

Page 64: tous Informatique pour tous Plan généralblog.psi945.fr/public/info-commune/sup/cours-sup-imprimable-python.pdfDichotomie et Newton Méthode d’Euler Bases de données Stocker intelligemment

Après le hard, le soft

Stéphane Gonnord

Plan

Systèmed’exploitationSon rôle

Les OS au cours du temps

Contenu d’un disquedurQuoi, où ?

Structure arborescente

Différents types de fichiers

Droits sur les fichiers

Apprendre à travaillerDossiers et sous-dossiers

Le choix des noms

Sauvegardes et versioning

Utiliser un IDELogique globale

Python for nerds

Python for newbies

OS : situation en 2013◮ Ordinateurs personnels :

◮ Windows : 92%◮ OS X (macs, base Unix) : 7%◮ Base Unix (Linux, BSD...) : 1%

Grandes disparités selon les milieux...

◮ Serveurs d’entreprise, web, cloud : majoritairementLinux

◮ High Performance Computing (gros zordinateurs) :◮ Base Unix (Linux, BSD...) : 98%◮ Windows : 2%

◮ Smartphones :◮ Android (Linux) : 79%◮ iOS (base Linux) : 14%◮ Blackberry, Windows mobile, ... : < 7%.

Page 65: tous Informatique pour tous Plan généralblog.psi945.fr/public/info-commune/sup/cours-sup-imprimable-python.pdfDichotomie et Newton Méthode d’Euler Bases de données Stocker intelligemment

Après le hard, le soft

Stéphane Gonnord

Plan

Systèmed’exploitationSon rôle

Les OS au cours du temps

Contenu d’un disquedurQuoi, où ?

Structure arborescente

Différents types de fichiers

Droits sur les fichiers

Apprendre à travaillerDossiers et sous-dossiers

Le choix des noms

Sauvegardes et versioning

Utiliser un IDELogique globale

Python for nerds

Python for newbies

Partitionnement du disqueUn disque, beaucoup de partitions

stephane@euler:~$ df -BM

Filesystem 1M-blocks Used Available Use% Mounted on

/dev/sda3 182677M 100205M 73266M 58% /

udev 2001M 1M 2001M 1% /dev

tmpfs 805M 1M 804M 1% /run

none 5M 0M 5M 0% /run/lock

none 2011M 2M 2010M 1% /run/shm

stephane@meert:~$ df -BM

Sys. de fichiers 1M-blocs Utilisé Disponible Uti% Monté sur

/dev/sda1 18645M 6207M 11485M 36% /

none 1M 0M 1M 0% /sys/fs/cgroup

udev 992M 1M 992M 1% /dev

tmpfs 201M 1M 200M 1% /run

none 5M 0M 5M 0% /run/lock

none 1002M 0M 1002M 0% /run/shm

none 100M 0M 100M 0% /run/user

/dev/sda3 213814M 160679M 42268M 80% /home

/dev/sdb1 469325M 178937M 266541M 41% /mnt/savedisk

(en fait, il y a plusieurs disques !)

Page 66: tous Informatique pour tous Plan généralblog.psi945.fr/public/info-commune/sup/cours-sup-imprimable-python.pdfDichotomie et Newton Méthode d’Euler Bases de données Stocker intelligemment

Après le hard, le soft

Stéphane Gonnord

Plan

Systèmed’exploitationSon rôle

Les OS au cours du temps

Contenu d’un disquedurQuoi, où ?

Structure arborescente

Différents types de fichiers

Droits sur les fichiers

Apprendre à travaillerDossiers et sous-dossiers

Le choix des noms

Sauvegardes et versioning

Utiliser un IDELogique globale

Python for nerds

Python for newbies

Des tas de fichiers !

stephane@euler:~$ find / -type f 2>/dev/null | wc -l

1398531

stephane@euler:~$ find ~/ -type f 2>/dev/null | wc -l

295888

stephane@meert:~$ find / -type f 2>/dev/null | wc -l

1512922

stephane@meert:~$ find ~/ -type f 2>/dev/null | wc -l

149208

Page 67: tous Informatique pour tous Plan généralblog.psi945.fr/public/info-commune/sup/cours-sup-imprimable-python.pdfDichotomie et Newton Méthode d’Euler Bases de données Stocker intelligemment

Après le hard, le soft

Stéphane Gonnord

Plan

Systèmed’exploitationSon rôle

Les OS au cours du temps

Contenu d’un disquedurQuoi, où ?

Structure arborescente

Différents types de fichiers

Droits sur les fichiers

Apprendre à travaillerDossiers et sous-dossiers

Le choix des noms

Sauvegardes et versioning

Utiliser un IDELogique globale

Python for nerds

Python for newbies

Dossiers vs fichiersÀ la souris :

Ou en ligne de commande :

Page 68: tous Informatique pour tous Plan généralblog.psi945.fr/public/info-commune/sup/cours-sup-imprimable-python.pdfDichotomie et Newton Méthode d’Euler Bases de données Stocker intelligemment

Après le hard, le soft

Stéphane Gonnord

Plan

Systèmed’exploitationSon rôle

Les OS au cours du temps

Contenu d’un disquedurQuoi, où ?

Structure arborescente

Différents types de fichiers

Droits sur les fichiers

Apprendre à travaillerDossiers et sous-dossiers

Le choix des noms

Sauvegardes et versioning

Utiliser un IDELogique globale

Python for nerds

Python for newbies

De façon plus abstraite

info-pour-tous

... tp-sup

01-02-decouverte

... ... ...

... 16-bd3

... ... ...

... sujets-tp-python.tex

... cours-sup

Page 69: tous Informatique pour tous Plan généralblog.psi945.fr/public/info-commune/sup/cours-sup-imprimable-python.pdfDichotomie et Newton Méthode d’Euler Bases de données Stocker intelligemment

Après le hard, le soft

Stéphane Gonnord

Plan

Systèmed’exploitationSon rôle

Les OS au cours du temps

Contenu d’un disquedurQuoi, où ?

Structure arborescente

Différents types de fichiers

Droits sur les fichiers

Apprendre à travaillerDossiers et sous-dossiers

Le choix des noms

Sauvegardes et versioning

Utiliser un IDELogique globale

Python for nerds

Python for newbies

Les terminaux : pas que pour les geeks

Page 70: tous Informatique pour tous Plan généralblog.psi945.fr/public/info-commune/sup/cours-sup-imprimable-python.pdfDichotomie et Newton Méthode d’Euler Bases de données Stocker intelligemment

Après le hard, le soft

Stéphane Gonnord

Plan

Systèmed’exploitationSon rôle

Les OS au cours du temps

Contenu d’un disquedurQuoi, où ?

Structure arborescente

Différents types de fichiers

Droits sur les fichiers

Apprendre à travaillerDossiers et sous-dossiers

Le choix des noms

Sauvegardes et versioning

Utiliser un IDELogique globale

Python for nerds

Python for newbies

Fichiers : exécutables vs. documents◮ LibreOffice : titi.ods, toto.doc, tata.xls,tagada.txt...

◮ Word : toto.doc, tagada.txt, ...

◮ Chrome, Internet Explorer, Firefox, Safari :proutch.html

◮ LATEX : ce_fichier.tex, ce_fichier.pdf,ce_fichier.log...

◮ WoW : des tas de fichiers de configuration !

◮ gcc : toto.c (source) toto.out (exécutableproduit)...

◮ Idle, Spyder : tp-01.py

◮ und so weiter.

Page 71: tous Informatique pour tous Plan généralblog.psi945.fr/public/info-commune/sup/cours-sup-imprimable-python.pdfDichotomie et Newton Méthode d’Euler Bases de données Stocker intelligemment

Après le hard, le soft

Stéphane Gonnord

Plan

Systèmed’exploitationSon rôle

Les OS au cours du temps

Contenu d’un disquedurQuoi, où ?

Structure arborescente

Différents types de fichiers

Droits sur les fichiers

Apprendre à travaillerDossiers et sous-dossiers

Le choix des noms

Sauvegardes et versioning

Utiliser un IDELogique globale

Python for nerds

Python for newbies

Droits, groupesLes fichiers ont un propriétaire. Les utilisateurs des droits

plus ou moins étendus.◮ Droits :

◮ écriture ;◮ lecture ;◮ exécution.

◮ Groupes :◮ root, superuser ;◮ utilisateur de base ;◮ groupe d’utilisateur plus ou moins vaste ;◮ tout le monde.

◮ Ces notions ont du sens :◮ sur un ordinateur personnel ;◮ sur un réseau (celui du lycée) ;◮ sur le cloud (dropbox, drive, ...) ;◮ mais aussi les réseaux sociaux, dans une certaine

mesure.

Page 72: tous Informatique pour tous Plan généralblog.psi945.fr/public/info-commune/sup/cours-sup-imprimable-python.pdfDichotomie et Newton Méthode d’Euler Bases de données Stocker intelligemment

Après le hard, le soft

Stéphane Gonnord

Plan

Systèmed’exploitationSon rôle

Les OS au cours du temps

Contenu d’un disquedurQuoi, où ?

Structure arborescente

Différents types de fichiers

Droits sur les fichiers

Apprendre à travaillerDossiers et sous-dossiers

Le choix des noms

Sauvegardes et versioning

Utiliser un IDELogique globale

Python for nerds

Python for newbies

Droits, groupes

Page 73: tous Informatique pour tous Plan généralblog.psi945.fr/public/info-commune/sup/cours-sup-imprimable-python.pdfDichotomie et Newton Méthode d’Euler Bases de données Stocker intelligemment

Après le hard, le soft

Stéphane Gonnord

Plan

Systèmed’exploitationSon rôle

Les OS au cours du temps

Contenu d’un disquedurQuoi, où ?

Structure arborescente

Différents types de fichiers

Droits sur les fichiers

Apprendre à travaillerDossiers et sous-dossiers

Le choix des noms

Sauvegardes et versioning

Utiliser un IDELogique globale

Python for nerds

Python for newbies

Structure ni trop plate ni trop étirée

MAL !

Page 74: tous Informatique pour tous Plan généralblog.psi945.fr/public/info-commune/sup/cours-sup-imprimable-python.pdfDichotomie et Newton Méthode d’Euler Bases de données Stocker intelligemment

Après le hard, le soft

Stéphane Gonnord

Plan

Systèmed’exploitationSon rôle

Les OS au cours du temps

Contenu d’un disquedurQuoi, où ?

Structure arborescente

Différents types de fichiers

Droits sur les fichiers

Apprendre à travaillerDossiers et sous-dossiers

Le choix des noms

Sauvegardes et versioning

Utiliser un IDELogique globale

Python for nerds

Python for newbies

Noms de fichiersPlusieurs religions plus ou moins permissives.Exemple de compromis :

◮ Bien :◮ tp-1.py

◮ tp_1.py

◮ premier_tp_python_de_l_annee.py (mais lourd)

◮ Mal :◮ tp-1

◮ tp 1.py

◮ tépé1.py

◮ 1er-tp.py

◮ tp-1-avec-slash/ tsk-tsk.py

◮ 1 Super_Premier tépé ! *&* .py

◮ Très mal : Documents/tp-1.py

Page 75: tous Informatique pour tous Plan généralblog.psi945.fr/public/info-commune/sup/cours-sup-imprimable-python.pdfDichotomie et Newton Méthode d’Euler Bases de données Stocker intelligemment

Après le hard, le soft

Stéphane Gonnord

Plan

Systèmed’exploitationSon rôle

Les OS au cours du temps

Contenu d’un disquedurQuoi, où ?

Structure arborescente

Différents types de fichiers

Droits sur les fichiers

Apprendre à travaillerDossiers et sous-dossiers

Le choix des noms

Sauvegardes et versioning

Utiliser un IDELogique globale

Python for nerds

Python for newbies

Noms de variables (identificateurs)Plusieurs écoles/religions, pour chaque langage !

◮ Bien :◮ debut

◮ liste1

◮ avec_underscore

◮ PlutotAvecDesMajuscules

◮ indice_debut_segment_recherche (porte dusens)

◮ Mal (dont certains interdits) :◮ début

◮ l1

◮ avec-tiret

◮ 1mauvais_debut

Page 76: tous Informatique pour tous Plan généralblog.psi945.fr/public/info-commune/sup/cours-sup-imprimable-python.pdfDichotomie et Newton Méthode d’Euler Bases de données Stocker intelligemment

Après le hard, le soft

Stéphane Gonnord

Plan

Systèmed’exploitationSon rôle

Les OS au cours du temps

Contenu d’un disquedurQuoi, où ?

Structure arborescente

Différents types de fichiers

Droits sur les fichiers

Apprendre à travaillerDossiers et sous-dossiers

Le choix des noms

Sauvegardes et versioning

Utiliser un IDELogique globale

Python for nerds

Python for newbies

Sauvegardes et versioningOn vous l’aura dit au moins une fois...

◮ Sauvegardes :◮ régulières ;◮ (partiellement) automatisées ;◮ (de temps en temps) délocalisées.

◮ Gestion des versions :◮ à la grand-papa (cpold) ;◮ professionnelle : arch, git, cvs, svn, mercurial...

Exemple concret : votre (futur) TIPE...

Page 77: tous Informatique pour tous Plan généralblog.psi945.fr/public/info-commune/sup/cours-sup-imprimable-python.pdfDichotomie et Newton Méthode d’Euler Bases de données Stocker intelligemment

Après le hard, le soft

Stéphane Gonnord

Plan

Systèmed’exploitationSon rôle

Les OS au cours du temps

Contenu d’un disquedurQuoi, où ?

Structure arborescente

Différents types de fichiers

Droits sur les fichiers

Apprendre à travaillerDossiers et sous-dossiers

Le choix des noms

Sauvegardes et versioning

Utiliser un IDELogique globale

Python for nerds

Python for newbies

Logique globaleLe casting :

◮ Fichier Python (« script ») : toto.pyInstructions à exécuter successivement.

◮ Un interpréteur interactif (ou pas). Exécute lesinstructions d’un script, ou données à la volée.

◮ Une fenêtre d’exécution.

Plein de combinaisons possibles !

◮ Fichier exécuté « dans une fenêtre ».

◮ Pas de fichier ; des commandes dans l’interpréteurinteractif (on ne va pas loin !).

◮ Un fichier Python interprété, avec ensuite descommandes dans la fenêtre interactive.

Page 78: tous Informatique pour tous Plan généralblog.psi945.fr/public/info-commune/sup/cours-sup-imprimable-python.pdfDichotomie et Newton Méthode d’Euler Bases de données Stocker intelligemment

Après le hard, le soft

Stéphane Gonnord

Plan

Systèmed’exploitationSon rôle

Les OS au cours du temps

Contenu d’un disquedurQuoi, où ?

Structure arborescente

Différents types de fichiers

Droits sur les fichiers

Apprendre à travaillerDossiers et sous-dossiers

Le choix des noms

Sauvegardes et versioning

Utiliser un IDELogique globale

Python for nerds

Python for newbies

Un fichier Python

"""

des commentaires

de début de fichier

"""

n = 5 # encore un commentaire

# et encore ici

for i in range(n):

print("7 * "+str(i)+" = "+str(7*i))

Page 79: tous Informatique pour tous Plan généralblog.psi945.fr/public/info-commune/sup/cours-sup-imprimable-python.pdfDichotomie et Newton Méthode d’Euler Bases de données Stocker intelligemment

Après le hard, le soft

Stéphane Gonnord

Plan

Systèmed’exploitationSon rôle

Les OS au cours du temps

Contenu d’un disquedurQuoi, où ?

Structure arborescente

Différents types de fichiers

Droits sur les fichiers

Apprendre à travaillerDossiers et sous-dossiers

Le choix des noms

Sauvegardes et versioning

Utiliser un IDELogique globale

Python for nerds

Python for newbies

Un fichier Python exécuté

◮ Avec l’entête # -*- coding: utf-8 -*- Python2.7 ne pose plus de problème.

◮ Exercice : qu’est-ce qui cloche dans ce terminal ?Comment ai-je réalisé ce tour de magie ?

Page 80: tous Informatique pour tous Plan généralblog.psi945.fr/public/info-commune/sup/cours-sup-imprimable-python.pdfDichotomie et Newton Méthode d’Euler Bases de données Stocker intelligemment

Après le hard, le soft

Stéphane Gonnord

Plan

Systèmed’exploitationSon rôle

Les OS au cours du temps

Contenu d’un disquedurQuoi, où ?

Structure arborescente

Différents types de fichiers

Droits sur les fichiers

Apprendre à travaillerDossiers et sous-dossiers

Le choix des noms

Sauvegardes et versioning

Utiliser un IDELogique globale

Python for nerds

Python for newbies

À la rude : avec Emacs

Page 81: tous Informatique pour tous Plan généralblog.psi945.fr/public/info-commune/sup/cours-sup-imprimable-python.pdfDichotomie et Newton Méthode d’Euler Bases de données Stocker intelligemment

Après le hard, le soft

Stéphane Gonnord

Plan

Systèmed’exploitationSon rôle

Les OS au cours du temps

Contenu d’un disquedurQuoi, où ?

Structure arborescente

Différents types de fichiers

Droits sur les fichiers

Apprendre à travaillerDossiers et sous-dossiers

Le choix des noms

Sauvegardes et versioning

Utiliser un IDELogique globale

Python for nerds

Python for newbies

Spyder

Page 82: tous Informatique pour tous Plan généralblog.psi945.fr/public/info-commune/sup/cours-sup-imprimable-python.pdfDichotomie et Newton Méthode d’Euler Bases de données Stocker intelligemment

Après le hard, le soft

Stéphane Gonnord

Plan

Systèmed’exploitationSon rôle

Les OS au cours du temps

Contenu d’un disquedurQuoi, où ?

Structure arborescente

Différents types de fichiers

Droits sur les fichiers

Apprendre à travaillerDossiers et sous-dossiers

Le choix des noms

Sauvegardes et versioning

Utiliser un IDELogique globale

Python for nerds

Python for newbies

Idle

Page 83: tous Informatique pour tous Plan généralblog.psi945.fr/public/info-commune/sup/cours-sup-imprimable-python.pdfDichotomie et Newton Méthode d’Euler Bases de données Stocker intelligemment

Après le hard, le soft

Stéphane Gonnord

Plan

Systèmed’exploitationSon rôle

Les OS au cours du temps

Contenu d’un disquedurQuoi, où ?

Structure arborescente

Différents types de fichiers

Droits sur les fichiers

Apprendre à travaillerDossiers et sous-dossiers

Le choix des noms

Sauvegardes et versioning

Utiliser un IDELogique globale

Python for nerds

Python for newbies

End gameMerci de votre attention !

Page 84: tous Informatique pour tous Plan généralblog.psi945.fr/public/info-commune/sup/cours-sup-imprimable-python.pdfDichotomie et Newton Méthode d’Euler Bases de données Stocker intelligemment

Premiers élémentsde Python

Stéphane Gonnord

Plan

Différents typesd’objetsEntiers, flottants

Booléens

Listes, chaînes de caractères

Etc.

VariablesUn boût de mémoire

Consultable, modifiable

Échange de valeurs

FonctionsUn malentendu classique

Return vs. print

Variables locales

Diverses chosesL’aide

Affichage formaté

Les PEPs

Premiers éléments de PythonVariables, affectations, fonctions.

Stéphane Gonnord

[email protected]

www.mp933.fr

Lycée du parc - Lyon

Vendredi 27 septembre 2013Lycée du parc

Page 85: tous Informatique pour tous Plan généralblog.psi945.fr/public/info-commune/sup/cours-sup-imprimable-python.pdfDichotomie et Newton Méthode d’Euler Bases de données Stocker intelligemment

Premiers élémentsde Python

Stéphane Gonnord

Plan

Différents typesd’objetsEntiers, flottants

Booléens

Listes, chaînes de caractères

Etc.

VariablesUn boût de mémoire

Consultable, modifiable

Échange de valeurs

FonctionsUn malentendu classique

Return vs. print

Variables locales

Diverses chosesL’aide

Affichage formaté

Les PEPs

Plan1. Type des «objets» Python

◮ entiers, flottants, complexes ;◮ booléens ;◮ listes, chaînes ;◮ etc.

2. Notion de variable :◮ un boût de mémoire affectable ;◮ consultable ;◮ modifiable.

3. Fonctions, programmes :◮ paramètres, résultat ;◮ variables locales.

4. Pendant que j’y pense :◮ aide ;◮ affichage formaté.◮ PEPs ;

Page 86: tous Informatique pour tous Plan généralblog.psi945.fr/public/info-commune/sup/cours-sup-imprimable-python.pdfDichotomie et Newton Méthode d’Euler Bases de données Stocker intelligemment

Premiers élémentsde Python

Stéphane Gonnord

Plan

Différents typesd’objetsEntiers, flottants

Booléens

Listes, chaînes de caractères

Etc.

VariablesUn boût de mémoire

Consultable, modifiable

Échange de valeurs

FonctionsUn malentendu classique

Return vs. print

Variables locales

Diverses chosesL’aide

Affichage formaté

Les PEPs

Entiers

>>> 3 + 2

5

>>> 3 * 2

6

>>> 3 ** 2

9

>>> 17 // 5

3

Attention !

◮ Python 2

>>> 17 / 5

3

◮ Python 3

>>> 17 / 5

3.4

>>> 841 ** 42

69411562938724983467771066983228469706012755537

24742896758041881773820659662797651233792769905

75933677718153328990193476881L

>>> 841 ^ 42

867

Page 87: tous Informatique pour tous Plan généralblog.psi945.fr/public/info-commune/sup/cours-sup-imprimable-python.pdfDichotomie et Newton Méthode d’Euler Bases de données Stocker intelligemment

Premiers élémentsde Python

Stéphane Gonnord

Plan

Différents typesd’objetsEntiers, flottants

Booléens

Listes, chaînes de caractères

Etc.

VariablesUn boût de mémoire

Consultable, modifiable

Échange de valeurs

FonctionsUn malentendu classique

Return vs. print

Variables locales

Diverses chosesL’aide

Affichage formaté

Les PEPs

Flottants : quelques bizarreries

>>> 1.1 + 2.7

3.8000000000000003

>>> 1.1 * 2.7

2.9700000000000006

>>> 1.1 / 2.7

0.40740740740740744

>>> 1.1 ** 4.2

1.492276423671142

>>> complex(1,1) ** 2

2j

>>> (1. / 2) * 2

1.0

>>> (1. / 9) * 9

1.0

>>> (1. / 3**6) * 3**6

0.9999999999999999

>>> (1. / 10**11) * 10**11

0.9999999999999999

>>> (1. / 2**841) * 2**841

1.0

Page 88: tous Informatique pour tous Plan généralblog.psi945.fr/public/info-commune/sup/cours-sup-imprimable-python.pdfDichotomie et Newton Méthode d’Euler Bases de données Stocker intelligemment

Premiers élémentsde Python

Stéphane Gonnord

Plan

Différents typesd’objetsEntiers, flottants

Booléens

Listes, chaînes de caractères

Etc.

VariablesUn boût de mémoire

Consultable, modifiable

Échange de valeurs

FonctionsUn malentendu classique

Return vs. print

Variables locales

Diverses chosesL’aide

Affichage formaté

Les PEPs

Flottants : en mode calculatrice

>>> cos(pi)

Traceback (most recent call last):

File "<pyshell#32>", line 1, in <module>

cos(pi)

NameError: name ’cos’ is not defined

>>> import math

>>> math.cos(math.pi/2)

6.123031769111886e-17

>>> import math as mt

>>> mt.cos(mt.pi/2)

6.123031769111886e-17

>>> from math import cos, pi

>>> cos(pi/2)

6.123031769111886e-17

>>> from math import *

>>> cos(pi/2)

6.123031769111886e-17

Page 89: tous Informatique pour tous Plan généralblog.psi945.fr/public/info-commune/sup/cours-sup-imprimable-python.pdfDichotomie et Newton Méthode d’Euler Bases de données Stocker intelligemment

Premiers élémentsde Python

Stéphane Gonnord

Plan

Différents typesd’objetsEntiers, flottants

Booléens

Listes, chaînes de caractères

Etc.

VariablesUn boût de mémoire

Consultable, modifiable

Échange de valeurs

FonctionsUn malentendu classique

Return vs. print

Variables locales

Diverses chosesL’aide

Affichage formaté

Les PEPs

Divisions : Python 2 vs Python 3◮ Pour les divisions d’entiers : TOUJOURS //

◮ Pour les divisions de flottants : TOUJOURS /

Exercice

Quels sont les résultats de ces commandes sous Python 2et Python 3 ?

>>> 7 / 2

>>> 7. / 2

>>> float(7) / 2

>>> float(7 / 2)

Page 90: tous Informatique pour tous Plan généralblog.psi945.fr/public/info-commune/sup/cours-sup-imprimable-python.pdfDichotomie et Newton Méthode d’Euler Bases de données Stocker intelligemment

Premiers élémentsde Python

Stéphane Gonnord

Plan

Différents typesd’objetsEntiers, flottants

Booléens

Listes, chaînes de caractères

Etc.

VariablesUn boût de mémoire

Consultable, modifiable

Échange de valeurs

FonctionsUn malentendu classique

Return vs. print

Variables locales

Diverses chosesL’aide

Affichage formaté

Les PEPs

Un type étrange : les booléens

>>> 3 == 5

False

>>> 841 > 0

True

>>> 841 <= 900

True

>>> (841 < 0) and ( (841 > 900) or (841 < 900) )

False

Exercice

Quels sont les résultats de ces commandes ?

>>> (1+1==3) and ((1+1==2) or (3+3==6))

>>> ((1+1==3) and (1+1==2)) or (3+3==6)

Page 91: tous Informatique pour tous Plan généralblog.psi945.fr/public/info-commune/sup/cours-sup-imprimable-python.pdfDichotomie et Newton Méthode d’Euler Bases de données Stocker intelligemment

Premiers élémentsde Python

Stéphane Gonnord

Plan

Différents typesd’objetsEntiers, flottants

Booléens

Listes, chaînes de caractères

Etc.

VariablesUn boût de mémoire

Consultable, modifiable

Échange de valeurs

FonctionsUn malentendu classique

Return vs. print

Variables locales

Diverses chosesL’aide

Affichage formaté

Les PEPs

Listes (1/2)

>>> l = [5, 3, 42.42, 1, ’tagada’]

>>> l[1]

3

>>> len(l)

5

>>> l[5]

Traceback (most recent call last):

File "<pyshell#44>", line 1, in <module>

l[5]

IndexError: list index out of range

>>> l[-1]

’tagada’

Page 92: tous Informatique pour tous Plan généralblog.psi945.fr/public/info-commune/sup/cours-sup-imprimable-python.pdfDichotomie et Newton Méthode d’Euler Bases de données Stocker intelligemment

Premiers élémentsde Python

Stéphane Gonnord

Plan

Différents typesd’objetsEntiers, flottants

Booléens

Listes, chaînes de caractères

Etc.

VariablesUn boût de mémoire

Consultable, modifiable

Échange de valeurs

FonctionsUn malentendu classique

Return vs. print

Variables locales

Diverses chosesL’aide

Affichage formaté

Les PEPs

Listes (2/2)Rappel : l = [5, 3, 42.42, 1, ’tagada’]

>>> l[1:4]

[3, 42.42, 1]

>>> l[2:-2]

Vous avez suivi ?

[42.42]

>>> l[2] = 1515

>>> l

[5, 3, 1515, 1, ’tagada’]

Les listes sont mutables

Page 93: tous Informatique pour tous Plan généralblog.psi945.fr/public/info-commune/sup/cours-sup-imprimable-python.pdfDichotomie et Newton Méthode d’Euler Bases de données Stocker intelligemment

Premiers élémentsde Python

Stéphane Gonnord

Plan

Différents typesd’objetsEntiers, flottants

Booléens

Listes, chaînes de caractères

Etc.

VariablesUn boût de mémoire

Consultable, modifiable

Échange de valeurs

FonctionsUn malentendu classique

Return vs. print

Variables locales

Diverses chosesL’aide

Affichage formaté

Les PEPs

Chaînes de caractères

>>> c = ’plof’

>>> d = "plof"

>>> c == d

True

>>> len(c)

4

>>> c[2]

’o’

>>> c[1:3]

’lo’

>>> c[1] = ’a’

Traceback (most recent call last):

File "<pyshell#77>", line 1, in <module>

c[1] = ’a’

TypeError: ’str’ object does not support item assignment

Page 94: tous Informatique pour tous Plan généralblog.psi945.fr/public/info-commune/sup/cours-sup-imprimable-python.pdfDichotomie et Newton Méthode d’Euler Bases de données Stocker intelligemment

Premiers élémentsde Python

Stéphane Gonnord

Plan

Différents typesd’objetsEntiers, flottants

Booléens

Listes, chaînes de caractères

Etc.

VariablesUn boût de mémoire

Consultable, modifiable

Échange de valeurs

FonctionsUn malentendu classique

Return vs. print

Variables locales

Diverses chosesL’aide

Affichage formaté

Les PEPs

Tuples

>>> t = 3, ’plof’, 5.3, 4

>>> t[2]

5.3

>>> t[2] = 3

Traceback (most recent call last):

File "<pyshell#62>", line 1, in <module>

t[2] = 3

TypeError: ’tuple’ object does not support

item assignment

Les tuples sont non-mutables

>>> t = 1, 15

>>> a, b = t

>>> b

15

Page 95: tous Informatique pour tous Plan généralblog.psi945.fr/public/info-commune/sup/cours-sup-imprimable-python.pdfDichotomie et Newton Méthode d’Euler Bases de données Stocker intelligemment

Premiers élémentsde Python

Stéphane Gonnord

Plan

Différents typesd’objetsEntiers, flottants

Booléens

Listes, chaînes de caractères

Etc.

VariablesUn boût de mémoire

Consultable, modifiable

Échange de valeurs

FonctionsUn malentendu classique

Return vs. print

Variables locales

Diverses chosesL’aide

Affichage formaté

Les PEPs

Ensembles

>>> s = {3, 4.5, 3, ’toto’}

>>> len(s)

3

>>> s

set([4.5, 3, ’toto’])

>>> 3 in s, ’truc’ in s

(True, False)

Mais aussi : les ensembles sont itérables :

>>> for x in s: print(x)

4.5

3

toto

Page 96: tous Informatique pour tous Plan généralblog.psi945.fr/public/info-commune/sup/cours-sup-imprimable-python.pdfDichotomie et Newton Méthode d’Euler Bases de données Stocker intelligemment

Premiers élémentsde Python

Stéphane Gonnord

Plan

Différents typesd’objetsEntiers, flottants

Booléens

Listes, chaînes de caractères

Etc.

VariablesUn boût de mémoire

Consultable, modifiable

Échange de valeurs

FonctionsUn malentendu classique

Return vs. print

Variables locales

Diverses chosesL’aide

Affichage formaté

Les PEPs

Associer un nom à une valeur

>>> x

Traceback (most recent call last):

File "<pyshell#0>", line 1, in <module>

x

NameError: name ’x’ is not defined

>>> x = 10

>>> x

10

>>> y = 42

>>> x * y

420

>>> x, y

(10, 42)

>>> z = x * y

>>> x, y, z

(10, 42, 420)

Page 97: tous Informatique pour tous Plan généralblog.psi945.fr/public/info-commune/sup/cours-sup-imprimable-python.pdfDichotomie et Newton Méthode d’Euler Bases de données Stocker intelligemment

Premiers élémentsde Python

Stéphane Gonnord

Plan

Différents typesd’objetsEntiers, flottants

Booléens

Listes, chaînes de caractères

Etc.

VariablesUn boût de mémoire

Consultable, modifiable

Échange de valeurs

FonctionsUn malentendu classique

Return vs. print

Variables locales

Diverses chosesL’aide

Affichage formaté

Les PEPs

Égalité vs. alias ; opérations-affectations

>>> z = x

>>> x, y, z

(10, 42, 10)

>>> x = 12

>>> x, y, z

(12, 42, 10)

>>> x = x+3

>>> x

15

>>> x += 3

>>> x

18

>>> # Mais aussi : «x -= » «x //= » «x *= » ...

Page 98: tous Informatique pour tous Plan généralblog.psi945.fr/public/info-commune/sup/cours-sup-imprimable-python.pdfDichotomie et Newton Méthode d’Euler Bases de données Stocker intelligemment

Premiers élémentsde Python

Stéphane Gonnord

Plan

Différents typesd’objetsEntiers, flottants

Booléens

Listes, chaînes de caractères

Etc.

VariablesUn boût de mémoire

Consultable, modifiable

Échange de valeurs

FonctionsUn malentendu classique

Return vs. print

Variables locales

Diverses chosesL’aide

Affichage formaté

Les PEPs

Échange de valeurs (1/2)Exercice : échanger les valeurs de deux variables.

◮ Premier essai : « fastoche»

>>> a,b = 10,42

>>> b = a

>>> a = b

>>> a,b

(10, 10)

◮ Deuxième essai : en passant par un tiers

>>> a,b = 10,42

>>> c = a

>>> a = b

>>> b = c

>>> a,b

(42, 10)

Page 99: tous Informatique pour tous Plan généralblog.psi945.fr/public/info-commune/sup/cours-sup-imprimable-python.pdfDichotomie et Newton Méthode d’Euler Bases de données Stocker intelligemment

Premiers élémentsde Python

Stéphane Gonnord

Plan

Différents typesd’objetsEntiers, flottants

Booléens

Listes, chaînes de caractères

Etc.

VariablesUn boût de mémoire

Consultable, modifiable

Échange de valeurs

FonctionsUn malentendu classique

Return vs. print

Variables locales

Diverses chosesL’aide

Affichage formaté

Les PEPs

Échange de valeurs (2/2)◮ Troisième essai : affectation d’un couple

>>> a,b = 10,42

>>> a,b = b,a

>>> a,b

(42, 10)

◮ Dernier essai : sioux

>>> a,b = 10,42

>>> a = b-a

>>> b = b-a

>>> a = a+b

>>> a,b

(42, 10)

Solution très astucieuse...et pourrie (mais intéressante !)

Page 100: tous Informatique pour tous Plan généralblog.psi945.fr/public/info-commune/sup/cours-sup-imprimable-python.pdfDichotomie et Newton Méthode d’Euler Bases de données Stocker intelligemment

Premiers élémentsde Python

Stéphane Gonnord

Plan

Différents typesd’objetsEntiers, flottants

Booléens

Listes, chaînes de caractères

Etc.

VariablesUn boût de mémoire

Consultable, modifiable

Échange de valeurs

FonctionsUn malentendu classique

Return vs. print

Variables locales

Diverses chosesL’aide

Affichage formaté

Les PEPs

Fonctions vs. interfaces utilisateur« J’en ai marre de ces profs qui pensent qu’un programme

commence avec un input et termine avec un print »

(citation authentique, mais non revendiquée ni datée...)

◮ Une fonction :◮ est écrite une fois et exécutée autant de fois que l’on

veut ;◮ prend (en général) des

arguments/entrées/paramètres ;◮ exécute alors une suite d’instructions ;◮ n’affiche rien (a priori) ;◮ renvoie/retourne (éventuellement) un résultat.

◮ Une interface utilisateur :◮ raconte sa vie, demande des trucs à l’utilisateur ;◮ fait des calculs (appels de fonctions, en général)

associés à ces données ;◮ donne un résultat à l’utilisateur, par exemple en

l’affichant à l’écran.

Page 101: tous Informatique pour tous Plan généralblog.psi945.fr/public/info-commune/sup/cours-sup-imprimable-python.pdfDichotomie et Newton Méthode d’Euler Bases de données Stocker intelligemment

Premiers élémentsde Python

Stéphane Gonnord

Plan

Différents typesd’objetsEntiers, flottants

Booléens

Listes, chaînes de caractères

Etc.

VariablesUn boût de mémoire

Consultable, modifiable

Échange de valeurs

FonctionsUn malentendu classique

Return vs. print

Variables locales

Diverses chosesL’aide

Affichage formaté

Les PEPs

Return vs print (1/3)◮ Définitions :

def discriminant1(a, b, c):

b**2 - 4*a*c

def discriminant2(a, b, c):

print(b**2 - 4*a*c)

def discriminant3(a, b, c):

return b**2 - 4*a*c

◮ Appels :

>>> discriminant1(1, 5, 3)

>>> discriminant2(1, 5, 3)

13

>>> discriminant3(1, 5, 3)

13

Page 102: tous Informatique pour tous Plan généralblog.psi945.fr/public/info-commune/sup/cours-sup-imprimable-python.pdfDichotomie et Newton Méthode d’Euler Bases de données Stocker intelligemment

Premiers élémentsde Python

Stéphane Gonnord

Plan

Différents typesd’objetsEntiers, flottants

Booléens

Listes, chaînes de caractères

Etc.

VariablesUn boût de mémoire

Consultable, modifiable

Échange de valeurs

FonctionsUn malentendu classique

Return vs. print

Variables locales

Diverses chosesL’aide

Affichage formaté

Les PEPs

Return vs print (2/3)

>>> print(discriminant1(1, 5, 3))

None

>>> print(discriminant2(1, 5, 3))

13

None

>>> print(discriminant3(1, 5, 3))

13

Les adeptes du print constatent alors qu’ils ne fautsurtout plus utiliser print sur le résultat...Ça devient difficile à défendre !

Page 103: tous Informatique pour tous Plan généralblog.psi945.fr/public/info-commune/sup/cours-sup-imprimable-python.pdfDichotomie et Newton Méthode d’Euler Bases de données Stocker intelligemment

Premiers élémentsde Python

Stéphane Gonnord

Plan

Différents typesd’objetsEntiers, flottants

Booléens

Listes, chaînes de caractères

Etc.

VariablesUn boût de mémoire

Consultable, modifiable

Échange de valeurs

FonctionsUn malentendu classique

Return vs. print

Variables locales

Diverses chosesL’aide

Affichage formaté

Les PEPs

Return vs print (3/3 ; coup de grace)

>>> from math import sqrt

>>> sqrt(discriminant1(1,5,3))

Traceback (most recent call last):

File "<stdin>", line 1, in <module>

TypeError: a float is required

>>> sqrt(discriminant2(1,5,3))

13

Traceback (most recent call last):

File "<stdin>", line 1, in <module>

TypeError: a float is required

>>> sqrt(discriminant3(1,5,3))

3.605551275463989

Page 104: tous Informatique pour tous Plan généralblog.psi945.fr/public/info-commune/sup/cours-sup-imprimable-python.pdfDichotomie et Newton Méthode d’Euler Bases de données Stocker intelligemment

Premiers élémentsde Python

Stéphane Gonnord

Plan

Différents typesd’objetsEntiers, flottants

Booléens

Listes, chaînes de caractères

Etc.

VariablesUn boût de mémoire

Consultable, modifiable

Échange de valeurs

FonctionsUn malentendu classique

Return vs. print

Variables locales

Diverses chosesL’aide

Affichage formaté

Les PEPs

Fonction/interfaceUtilisation de la fonction discriminant dans unprogramme interagissant avec l’utilisateur.

def discriminant(a, b, c):

return b**2 - 4*a*c

print("Entrez successivement a, b et c séparés

par des virgules")

a,b,c = input()

delta = discriminant(a,b,c)

print("Le discriminant de aX^2+bX+c vaut "+str(delta))

À l’exécution :

>>> Entrez successivement a, b et c séparés par des virgules

1,5,3

Le discriminant de aX^2+bX+c vaut 13

Page 105: tous Informatique pour tous Plan généralblog.psi945.fr/public/info-commune/sup/cours-sup-imprimable-python.pdfDichotomie et Newton Méthode d’Euler Bases de données Stocker intelligemment

Premiers élémentsde Python

Stéphane Gonnord

Plan

Différents typesd’objetsEntiers, flottants

Booléens

Listes, chaînes de caractères

Etc.

VariablesUn boût de mémoire

Consultable, modifiable

Échange de valeurs

FonctionsUn malentendu classique

Return vs. print

Variables locales

Diverses chosesL’aide

Affichage formaté

Les PEPs

À toi, à moi, aux autres (1/3)La variable locale n’est pas vue de l’extérieur.

◮ Script :

def f(y):

x = 2*y

return x

◮ On exécute, puis...

>>> f(10)

20

>>> x

Traceback (most recent call last):

File "<stdin>", line 1, in <module>

NameError: name ’x’ is not defined

Page 106: tous Informatique pour tous Plan généralblog.psi945.fr/public/info-commune/sup/cours-sup-imprimable-python.pdfDichotomie et Newton Méthode d’Euler Bases de données Stocker intelligemment

Premiers élémentsde Python

Stéphane Gonnord

Plan

Différents typesd’objetsEntiers, flottants

Booléens

Listes, chaînes de caractères

Etc.

VariablesUn boût de mémoire

Consultable, modifiable

Échange de valeurs

FonctionsUn malentendu classique

Return vs. print

Variables locales

Diverses chosesL’aide

Affichage formaté

Les PEPs

À toi, à moi, aux autres (2/3)La variable locale n’écrase pas la globale.

◮ Script :

x = 42

def f(y):

x = 2*y

return x

◮ On exécute, puis...

>>> f(10)

20

>>> x

42

Page 107: tous Informatique pour tous Plan généralblog.psi945.fr/public/info-commune/sup/cours-sup-imprimable-python.pdfDichotomie et Newton Méthode d’Euler Bases de données Stocker intelligemment

Premiers élémentsde Python

Stéphane Gonnord

Plan

Différents typesd’objetsEntiers, flottants

Booléens

Listes, chaînes de caractères

Etc.

VariablesUn boût de mémoire

Consultable, modifiable

Échange de valeurs

FonctionsUn malentendu classique

Return vs. print

Variables locales

Diverses chosesL’aide

Affichage formaté

Les PEPs

À toi, à moi, aux autres (3/3)Le paramètre est également un nom local.

◮ Script :

x = 42

def f(x):

y = 2*x

return y

◮ On exécute, puis...

>>> f(10)

20

>>> x

42

Page 108: tous Informatique pour tous Plan généralblog.psi945.fr/public/info-commune/sup/cours-sup-imprimable-python.pdfDichotomie et Newton Méthode d’Euler Bases de données Stocker intelligemment

Premiers élémentsde Python

Stéphane Gonnord

Plan

Différents typesd’objetsEntiers, flottants

Booléens

Listes, chaînes de caractères

Etc.

VariablesUn boût de mémoire

Consultable, modifiable

Échange de valeurs

FonctionsUn malentendu classique

Return vs. print

Variables locales

Diverses chosesL’aide

Affichage formaté

Les PEPs

À l’aide !◮ Sur le web :

◮ http://docs.python.org/2.7/

◮ Taper l’erreur suspecte dans un browser !

◮ Sous interpréteur :◮ >>> help(for), >>> help(range)

◮ >>> help(int)

◮ >>> help(math)

◮ Avec l’IDE :◮ Complétion, coloration, brace balancing◮ Idle : F1 (aide ouverte dans le browser).◮ Spyder : explorateur de variable, inspecteur d’objets.

Page 109: tous Informatique pour tous Plan généralblog.psi945.fr/public/info-commune/sup/cours-sup-imprimable-python.pdfDichotomie et Newton Méthode d’Euler Bases de données Stocker intelligemment

Premiers élémentsde Python

Stéphane Gonnord

Plan

Différents typesd’objetsEntiers, flottants

Booléens

Listes, chaînes de caractères

Etc.

VariablesUn boût de mémoire

Consultable, modifiable

Échange de valeurs

FonctionsUn malentendu classique

Return vs. print

Variables locales

Diverses chosesL’aide

Affichage formaté

Les PEPs

Affichage formaté◮ Pfff...

>>> x = 21

>>> print("le double de ",x," vaut ",2*x)

P2 : (’le double de ’, 21, ’ vaut ’, 42)

P3 : le double de 21 vaut 42

◮ Rustique mais facile et efficace :

>>> print("le double de "+str(x)+" vaut "+str(2*x))

le double de 21 vaut 42

◮ À la C :

>>> print("le double de %i vaut %i"%(x,2*x))

le double de 21 vaut 42

◮ En vrai Python :

>>> print("le double de {0} vaut {1}".format(x,2*x))

le double de 21 vaut 42

Page 110: tous Informatique pour tous Plan généralblog.psi945.fr/public/info-commune/sup/cours-sup-imprimable-python.pdfDichotomie et Newton Méthode d’Euler Bases de données Stocker intelligemment

Premiers élémentsde Python

Stéphane Gonnord

Plan

Différents typesd’objetsEntiers, flottants

Booléens

Listes, chaînes de caractères

Etc.

VariablesUn boût de mémoire

Consultable, modifiable

Échange de valeurs

FonctionsUn malentendu classique

Return vs. print

Variables locales

Diverses chosesL’aide

Affichage formaté

Les PEPs

Python Enhancement Proposals

Pour les perfectionnistes... mais pas uniquement !

◮ PEP 0 : Index of Python Enhancement Proposals◮ PEP 8 : Style Guide for Python Code

◮ Limit all lines to a maximum of 79 characters.◮ Never use the characters ’l’ (lowercase letter el), ’O’

(uppercase letter oh), or ’I’ (uppercase letter eye) assingle character variable names.

◮ Function names should be lowercase, with wordsseparated by underscores as necessary to improvereadability.

◮ ...

◮ PEP 42 : Feature Requests

◮ PEP 257 : Docstring Conventions

◮ ...

Page 111: tous Informatique pour tous Plan généralblog.psi945.fr/public/info-commune/sup/cours-sup-imprimable-python.pdfDichotomie et Newton Méthode d’Euler Bases de données Stocker intelligemment

Premiers élémentsde Python

Stéphane Gonnord

Plan

Différents typesd’objetsEntiers, flottants

Booléens

Listes, chaînes de caractères

Etc.

VariablesUn boût de mémoire

Consultable, modifiable

Échange de valeurs

FonctionsUn malentendu classique

Return vs. print

Variables locales

Diverses chosesL’aide

Affichage formaté

Les PEPs

End gameMerci de votre attention !

Page 112: tous Informatique pour tous Plan généralblog.psi945.fr/public/info-commune/sup/cours-sup-imprimable-python.pdfDichotomie et Newton Méthode d’Euler Bases de données Stocker intelligemment

Notion d’algorithme

Stéphane Gonnord

Plan

Formaliser destâches répétitivesDans la vraie vie

En mathématiques

Des maths trèsélaboréesAdditionner

Multiplier

Mais encore...

Boucles et tests enPythonSyntaxe des boucles

Syntaxe des tests

Exemples etexercicesReprise des algorithmesprécédents

Du rabe

À l’envers !

Exercices

Ce qui reste à faireCorrection et terminaison

Complexité

Notion d’algorithmeBoucles et tests avec et sans Python

Stéphane Gonnord

[email protected]

www.mp933.fr

Lycée du parc - Lyon

Vendredi 4, 11 et 18 octobre 2013Lycée du parc

Page 113: tous Informatique pour tous Plan généralblog.psi945.fr/public/info-commune/sup/cours-sup-imprimable-python.pdfDichotomie et Newton Méthode d’Euler Bases de données Stocker intelligemment

Notion d’algorithme

Stéphane Gonnord

Plan

Formaliser destâches répétitivesDans la vraie vie

En mathématiques

Des maths trèsélaboréesAdditionner

Multiplier

Mais encore...

Boucles et tests enPythonSyntaxe des boucles

Syntaxe des tests

Exemples etexercicesReprise des algorithmesprécédents

Du rabe

À l’envers !

Exercices

Ce qui reste à faireCorrection et terminaison

Complexité

Plan1. Formaliser des tâches répétitives :

◮ des exemples de la vraie vie ;◮ un peu de mathématiques

2. Des maths un peu élaborées :◮ L’addition ;◮ la multiplication ;◮ etc.

3. Boucles et tests en Python :◮ boucles ;◮ tests.

4. Des tas d’exemples et exercices :◮ primalité, indice de dépassement... ;◮ up side down.

5. Ce qui reste à faire :◮ prouver ;◮ évaluer la complexité.

Page 114: tous Informatique pour tous Plan généralblog.psi945.fr/public/info-commune/sup/cours-sup-imprimable-python.pdfDichotomie et Newton Méthode d’Euler Bases de données Stocker intelligemment

Notion d’algorithme

Stéphane Gonnord

Plan

Formaliser destâches répétitivesDans la vraie vie

En mathématiques

Des maths trèsélaboréesAdditionner

Multiplier

Mais encore...

Boucles et tests enPythonSyntaxe des boucles

Syntaxe des tests

Exemples etexercicesReprise des algorithmesprécédents

Du rabe

À l’envers !

Exercices

Ce qui reste à faireCorrection et terminaison

Complexité

Un premier exemple gonflé (1/2)Exercice

Comment obtenir cet affichage ?

Allo ?

Allo ?

Allo ?

Non mais allo quoi !

◮ Algorithme :

pour i allant de 10 à 12 faireAfficher « Allo ? »

Afficher « Non mais allo quoi ! »

◮ Programme :

for i in range(10,13):

print("Allo ?")

print("Non mais allo quoi !")

Page 115: tous Informatique pour tous Plan généralblog.psi945.fr/public/info-commune/sup/cours-sup-imprimable-python.pdfDichotomie et Newton Méthode d’Euler Bases de données Stocker intelligemment

Notion d’algorithme

Stéphane Gonnord

Plan

Formaliser destâches répétitivesDans la vraie vie

En mathématiques

Des maths trèsélaboréesAdditionner

Multiplier

Mais encore...

Boucles et tests enPythonSyntaxe des boucles

Syntaxe des tests

Exemples etexercicesReprise des algorithmesprécédents

Du rabe

À l’envers !

Exercices

Ce qui reste à faireCorrection et terminaison

Complexité

Un premier exemple gonflé (2/2)pour i allant de 10 à 12 faire

Afficher « Allo ? »Afficher « Non mais allo quoi ! »

pour i allant de 10 à 12 faireAfficher « Allo ? »Afficher « Non mais allo quoi ! »

for i in range(10,13):

print("Allo ?")

print("Non mais allo quoi !")

for i in range(10,13):

print("Allo ?")

print("Non mais allo quoi !")

Allo ?

Allo ?

Allo ?

Non mais allo quoi !

Allo ?

Non mais allo quoi !

Allo ?

Non mais allo quoi !

Allo ?

Non mais allo quoi !

Page 116: tous Informatique pour tous Plan généralblog.psi945.fr/public/info-commune/sup/cours-sup-imprimable-python.pdfDichotomie et Newton Méthode d’Euler Bases de données Stocker intelligemment

Notion d’algorithme

Stéphane Gonnord

Plan

Formaliser destâches répétitivesDans la vraie vie

En mathématiques

Des maths trèsélaboréesAdditionner

Multiplier

Mais encore...

Boucles et tests enPythonSyntaxe des boucles

Syntaxe des tests

Exemples etexercicesReprise des algorithmesprécédents

Du rabe

À l’envers !

Exercices

Ce qui reste à faireCorrection et terminaison

Complexité

Compter et sommer des machinsExercice

Comment compter le nombre d’entiers ≤ 1000 qui sontpremiers ? Et leur somme ?

c← 0 # un compteurpour i allant de 1 à 1000 faire

si i est premier alorsc← c+1

Résultat : c

s← 0 # un «sommeur»pour i allant de 1 à 1000 faire

si i est premier alorss← s+ i

Résultat : s

Page 117: tous Informatique pour tous Plan généralblog.psi945.fr/public/info-commune/sup/cours-sup-imprimable-python.pdfDichotomie et Newton Méthode d’Euler Bases de données Stocker intelligemment

Notion d’algorithme

Stéphane Gonnord

Plan

Formaliser destâches répétitivesDans la vraie vie

En mathématiques

Des maths trèsélaboréesAdditionner

Multiplier

Mais encore...

Boucles et tests enPythonSyntaxe des boucles

Syntaxe des tests

Exemples etexercicesReprise des algorithmesprécédents

Du rabe

À l’envers !

Exercices

Ce qui reste à faireCorrection et terminaison

Complexité

IRL : corriger des copies◮ Un premier point de vue :

pour c décrivant l’ensemble C des copies faire

pour p décrivant l’ensemble P des parties du DS faireCorriger la partie p de la copie c ; noter cette partie

Noter c

◮ Un autre :pour p décrivant P faire

pour c décrivant C faireCorriger la partie p de la copie c ; noter cette partie

pour c décrivant C faireNoter c

◮ Il ne s’agit pas de boucles « sur des entiers »

Page 118: tous Informatique pour tous Plan généralblog.psi945.fr/public/info-commune/sup/cours-sup-imprimable-python.pdfDichotomie et Newton Méthode d’Euler Bases de données Stocker intelligemment

Notion d’algorithme

Stéphane Gonnord

Plan

Formaliser destâches répétitivesDans la vraie vie

En mathématiques

Des maths trèsélaboréesAdditionner

Multiplier

Mais encore...

Boucles et tests enPythonSyntaxe des boucles

Syntaxe des tests

Exemples etexercicesReprise des algorithmesprécédents

Du rabe

À l’envers !

Exercices

Ce qui reste à faireCorrection et terminaison

Complexité

ExponentiationExercice

Comment calculer 84142 avec seulement des multiplica-tions ?

◮ r ← 841 (r va être multiplié par 841... 41 fois)◮ r ← r ×841 (r vaut alors 8412)◮ r ← r ×841 (r vaut alors 8413)◮ ...◮ r ← r ×841 (r vaut alors 84142)

Algorithme

r ← 841pour i allant de 0 à 40 faire

r ← r ×841Résultat : r

◮ La deuxième instruction n’était pas r ← r × r

◮ Pour xn, il vaut mieux partir de r ← 1 ; pourquoi ?

Page 119: tous Informatique pour tous Plan généralblog.psi945.fr/public/info-commune/sup/cours-sup-imprimable-python.pdfDichotomie et Newton Méthode d’Euler Bases de données Stocker intelligemment

Notion d’algorithme

Stéphane Gonnord

Plan

Formaliser destâches répétitivesDans la vraie vie

En mathématiques

Des maths trèsélaboréesAdditionner

Multiplier

Mais encore...

Boucles et tests enPythonSyntaxe des boucles

Syntaxe des tests

Exemples etexercicesReprise des algorithmesprécédents

Du rabe

À l’envers !

Exercices

Ce qui reste à faireCorrection et terminaison

Complexité

FactorielleExercice

Comment calculer 841! avec seulement des multiplica-tions ?

◮ r ← 1 (r va être multiplié par 2, puis 3, ... puis 841)

◮ r ← r ×2 (r vaut alors 2)

◮ r ← r ×3 (r vaut alors 2×3)

◮ ...

◮ r ← r ×841 (r vaut alors 841!)

Algorithme

r ← 1pour i allant de 2 à 841 faire

r ← r × i

Résultat : r

Page 120: tous Informatique pour tous Plan généralblog.psi945.fr/public/info-commune/sup/cours-sup-imprimable-python.pdfDichotomie et Newton Méthode d’Euler Bases de données Stocker intelligemment

Notion d’algorithme

Stéphane Gonnord

Plan

Formaliser destâches répétitivesDans la vraie vie

En mathématiques

Des maths trèsélaboréesAdditionner

Multiplier

Mais encore...

Boucles et tests enPythonSyntaxe des boucles

Syntaxe des tests

Exemples etexercicesReprise des algorithmesprécédents

Du rabe

À l’envers !

Exercices

Ce qui reste à faireCorrection et terminaison

Complexité

IRL : Mr G. et la trigonométrie◮ Un algorithme pratiqué par tous :

Faire apprendre un formulaire basique de trigonométriePoser deux ou trois formules en DStant que ce n’est pas bien appris faire

grogner ;exiger que ce soit travaillé mieux que ça ;poser deux ou trois formules en DS

Passer à la suite◮ Problème de la terminaison...

Exercice

Formaliser l’algorithme, dans le cas (improbable) où la trigone serait jamais bien apprise.

Page 121: tous Informatique pour tous Plan généralblog.psi945.fr/public/info-commune/sup/cours-sup-imprimable-python.pdfDichotomie et Newton Méthode d’Euler Bases de données Stocker intelligemment

Notion d’algorithme

Stéphane Gonnord

Plan

Formaliser destâches répétitivesDans la vraie vie

En mathématiques

Des maths trèsélaboréesAdditionner

Multiplier

Mais encore...

Boucles et tests enPythonSyntaxe des boucles

Syntaxe des tests

Exemples etexercicesReprise des algorithmesprécédents

Du rabe

À l’envers !

Exercices

Ce qui reste à faireCorrection et terminaison

Complexité

Encore une boucle « Tant que »Exercice

Déterminer le plus petit entier n tel que n!≥ 1010

◮ Premier algorithme :n← 1tant que n!< 1010 faire

n← n+1Résultat : n

◮ Et si on s’interdit la fonction factorielle ?n← 1f ← 1 # f vaudra n! à (presque) tout momenttant que f < 1010 faire

n← n+1f ← f ×n

Résultat : n

Page 122: tous Informatique pour tous Plan généralblog.psi945.fr/public/info-commune/sup/cours-sup-imprimable-python.pdfDichotomie et Newton Méthode d’Euler Bases de données Stocker intelligemment

Notion d’algorithme

Stéphane Gonnord

Plan

Formaliser destâches répétitivesDans la vraie vie

En mathématiques

Des maths trèsélaboréesAdditionner

Multiplier

Mais encore...

Boucles et tests enPythonSyntaxe des boucles

Syntaxe des tests

Exemples etexercicesReprise des algorithmesprécédents

Du rabe

À l’envers !

Exercices

Ce qui reste à faireCorrection et terminaison

Complexité

Addition : à deux chiffres (1/3)Exercice

Calculer 62+15

◮ Première solution :

>>> 62 + 15

77

◮ Et sinon :

6 2+ 1 5

? ?

6 2+ 1 5

? 7

6 2+ 1 5

7 7

Page 123: tous Informatique pour tous Plan généralblog.psi945.fr/public/info-commune/sup/cours-sup-imprimable-python.pdfDichotomie et Newton Méthode d’Euler Bases de données Stocker intelligemment

Notion d’algorithme

Stéphane Gonnord

Plan

Formaliser destâches répétitivesDans la vraie vie

En mathématiques

Des maths trèsélaboréesAdditionner

Multiplier

Mais encore...

Boucles et tests enPythonSyntaxe des boucles

Syntaxe des tests

Exemples etexercicesReprise des algorithmesprécédents

Du rabe

À l’envers !

Exercices

Ce qui reste à faireCorrection et terminaison

Complexité

Addition : à deux chiffres (2/3)Exercice

Calculer 68+15

6 8+ 1 5

? ?

6 8+ 1 5

? 3

1

6 8+ 1 5

8 3

1

Algorithme général ?

a b+ c de f g

Page 124: tous Informatique pour tous Plan généralblog.psi945.fr/public/info-commune/sup/cours-sup-imprimable-python.pdfDichotomie et Newton Méthode d’Euler Bases de données Stocker intelligemment

Notion d’algorithme

Stéphane Gonnord

Plan

Formaliser destâches répétitivesDans la vraie vie

En mathématiques

Des maths trèsélaboréesAdditionner

Multiplier

Mais encore...

Boucles et tests enPythonSyntaxe des boucles

Syntaxe des tests

Exemples etexercicesReprise des algorithmesprécédents

Du rabe

À l’envers !

Exercices

Ce qui reste à faireCorrection et terminaison

Complexité

Addition : à deux chiffres (3/3)

a b+ c de f g

Entrées : a,b,c,d

s1← b+d

si s1 < 10 alorsg← s1 # pas de retenuer ← 0

sinong← s1−10 # retenue de 1r ← 1

s2← r +a+ c

si s2 < 10 alors

(e, f )← (0,s2)sinon

(e, f )← (1,s2−10)

Résultat : d ,e, f

Page 125: tous Informatique pour tous Plan généralblog.psi945.fr/public/info-commune/sup/cours-sup-imprimable-python.pdfDichotomie et Newton Méthode d’Euler Bases de données Stocker intelligemment

Notion d’algorithme

Stéphane Gonnord

Plan

Formaliser destâches répétitivesDans la vraie vie

En mathématiques

Des maths trèsélaboréesAdditionner

Multiplier

Mais encore...

Boucles et tests enPythonSyntaxe des boucles

Syntaxe des tests

Exemples etexercicesReprise des algorithmesprécédents

Du rabe

À l’envers !

Exercices

Ce qui reste à faireCorrection et terminaison

Complexité

Addition : le cas généralExercice

Calculer 123987+456456

1 2 3 9 8 7+ 4 5 6 4 5 6? ? ? ? ? ? ?

1 2 3 9 8 7+ 4 5 6 4 5 6? ? ? ? ? ? 3

1

1 2 3 9 8 7+ 4 5 6 4 5 6? ? ? ? ? 4 3

11

1 2+ 4 5? ? ?

Algorithme général :

◮ nature des entrées...

◮ et du résultat ;

◮ propagation d’une retenue...

◮ qu’on peut oublier après utilisation.

Page 126: tous Informatique pour tous Plan généralblog.psi945.fr/public/info-commune/sup/cours-sup-imprimable-python.pdfDichotomie et Newton Méthode d’Euler Bases de données Stocker intelligemment

Notion d’algorithme

Stéphane Gonnord

Plan

Formaliser destâches répétitivesDans la vraie vie

En mathématiques

Des maths trèsélaboréesAdditionner

Multiplier

Mais encore...

Boucles et tests enPythonSyntaxe des boucles

Syntaxe des tests

Exemples etexercicesReprise des algorithmesprécédents

Du rabe

À l’envers !

Exercices

Ce qui reste à faireCorrection et terminaison

Complexité

Mutiplication : n et 1 chiffresExercice

Calculer 841×7

8 4 1x 7

? ? ? ?

8 4 1x 7

? ? ? 7

0

8 4 1x 7

? ? 8 7

02

8 4 1x 7

? 8 8 7

025

◮ Entrées, résultat ;

◮ une boucle ;

◮ propagation d’une retenue.

Page 127: tous Informatique pour tous Plan généralblog.psi945.fr/public/info-commune/sup/cours-sup-imprimable-python.pdfDichotomie et Newton Méthode d’Euler Bases de données Stocker intelligemment

Notion d’algorithme

Stéphane Gonnord

Plan

Formaliser destâches répétitivesDans la vraie vie

En mathématiques

Des maths trèsélaboréesAdditionner

Multiplier

Mais encore...

Boucles et tests enPythonSyntaxe des boucles

Syntaxe des tests

Exemples etexercicesReprise des algorithmesprécédents

Du rabe

À l’envers !

Exercices

Ce qui reste à faireCorrection et terminaison

Complexité

Mutiplication : n et p chiffresExercice

Calculer 841×57

8 4 1x 5 7? ? ?

8 4 1x 5 7

5 8 8 7

8 4 1x 5 7

5 8 8 70

8 4 1x 5 7

5 8 8 74 2 0 5 0

◮ Une boucle...

◮ ou deux ;

◮ choisir le niveau de découpage du problème.

Page 128: tous Informatique pour tous Plan généralblog.psi945.fr/public/info-commune/sup/cours-sup-imprimable-python.pdfDichotomie et Newton Méthode d’Euler Bases de données Stocker intelligemment

Notion d’algorithme

Stéphane Gonnord

Plan

Formaliser destâches répétitivesDans la vraie vie

En mathématiques

Des maths trèsélaboréesAdditionner

Multiplier

Mais encore...

Boucles et tests enPythonSyntaxe des boucles

Syntaxe des tests

Exemples etexercicesReprise des algorithmesprécédents

Du rabe

À l’envers !

Exercices

Ce qui reste à faireCorrection et terminaison

Complexité

SoustractionExercice

Calculer 857−41

8 5 7- 4 1? ? ?

8 5 7- 4 1? ? 6

8 5 7- 4 1? 1 6

8 5 7- 4 18 1 6

Exercice

Calculer 841−57

8 4 1- 5 7? ? ?

8 4 1- 5 7? ? 4

1

8 4 1- 5 7? 8 4

11

8 4 1- 5 77 8 4

11

Exercice

Formaliser un algorithme de soustraction

Page 129: tous Informatique pour tous Plan généralblog.psi945.fr/public/info-commune/sup/cours-sup-imprimable-python.pdfDichotomie et Newton Méthode d’Euler Bases de données Stocker intelligemment

Notion d’algorithme

Stéphane Gonnord

Plan

Formaliser destâches répétitivesDans la vraie vie

En mathématiques

Des maths trèsélaboréesAdditionner

Multiplier

Mais encore...

Boucles et tests enPythonSyntaxe des boucles

Syntaxe des tests

Exemples etexercicesReprise des algorithmesprécédents

Du rabe

À l’envers !

Exercices

Ce qui reste à faireCorrection et terminaison

Complexité

DivisionExercice

Réaliser la division euclidienne de 841 par 3 puis par 57.

>>> 841/3, 841%3

(280, 1)

>>> 841/57, 841%57

(14, 43)

Exercice (difficile)

Formaliser un algorithme de division euclidienne d’entiers.

On pourra utiliser une boîte noire prenant a et b avec 0≤ a≤ 99 et

1≤ b ≤ 9, renvoyant le plus grand entier q tel que bq ≤ a.

Page 130: tous Informatique pour tous Plan généralblog.psi945.fr/public/info-commune/sup/cours-sup-imprimable-python.pdfDichotomie et Newton Méthode d’Euler Bases de données Stocker intelligemment

Notion d’algorithme

Stéphane Gonnord

Plan

Formaliser destâches répétitivesDans la vraie vie

En mathématiques

Des maths trèsélaboréesAdditionner

Multiplier

Mais encore...

Boucles et tests enPythonSyntaxe des boucles

Syntaxe des tests

Exemples etexercicesReprise des algorithmesprécédents

Du rabe

À l’envers !

Exercices

Ce qui reste à faireCorrection et terminaison

Complexité

Boucles énumératives : syntaxeL’indentation marque le bloc exécuté.

◮ Entiers décrivant un domaine régulier :

for i in range(10):

...

...

for i in range(5, 10):

for i in range(20, 30, 3):

◮ Énumération sur une liste ou un ensemble :

for x in [1, 20, 1, -5]:

...

for x in {-1, 15, 10}:

◮ Et même sur les lignes d’un fichier !

toto = open(’un_fichier.txt’,’r’)

for ch in toto:

...

Page 131: tous Informatique pour tous Plan généralblog.psi945.fr/public/info-commune/sup/cours-sup-imprimable-python.pdfDichotomie et Newton Méthode d’Euler Bases de données Stocker intelligemment

Notion d’algorithme

Stéphane Gonnord

Plan

Formaliser destâches répétitivesDans la vraie vie

En mathématiques

Des maths trèsélaboréesAdditionner

Multiplier

Mais encore...

Boucles et tests enPythonSyntaxe des boucles

Syntaxe des tests

Exemples etexercicesReprise des algorithmesprécédents

Du rabe

À l’envers !

Exercices

Ce qui reste à faireCorrection et terminaison

Complexité

Boucles énumératives : exemples◮ Sur un range :

>>> for i in range(10, 1, -3):

print(i**2)

100

49

16

◮ Sur des listes/ensembles :

>>> for x in [1, 3, 1]:

print(x**2)

1

9

1

>>> for x in {1, 3, 1}:

print(x**2)

1

9

Page 132: tous Informatique pour tous Plan généralblog.psi945.fr/public/info-commune/sup/cours-sup-imprimable-python.pdfDichotomie et Newton Méthode d’Euler Bases de données Stocker intelligemment

Notion d’algorithme

Stéphane Gonnord

Plan

Formaliser destâches répétitivesDans la vraie vie

En mathématiques

Des maths trèsélaboréesAdditionner

Multiplier

Mais encore...

Boucles et tests enPythonSyntaxe des boucles

Syntaxe des tests

Exemples etexercicesReprise des algorithmesprécédents

Du rabe

À l’envers !

Exercices

Ce qui reste à faireCorrection et terminaison

Complexité

Boucles conditionnelles« Tant qu’il reste des M&M’s, on en reprend »

◮ L’indentation marque le bloc ;

◮ Syntaxe :

while <condition> :

<instr 1>

...

<instr n>

<ensuite>

◮ Exemple moisi :

i = 10

while i < 20:

i = i+3

print(i)

print("Maintenant, i vaut "+str(i))

Exercice

Qu’est-ce qui va être affiché ? Pourquoi cet exemple est moisi ?

Page 133: tous Informatique pour tous Plan généralblog.psi945.fr/public/info-commune/sup/cours-sup-imprimable-python.pdfDichotomie et Newton Méthode d’Euler Bases de données Stocker intelligemment

Notion d’algorithme

Stéphane Gonnord

Plan

Formaliser destâches répétitivesDans la vraie vie

En mathématiques

Des maths trèsélaboréesAdditionner

Multiplier

Mais encore...

Boucles et tests enPythonSyntaxe des boucles

Syntaxe des tests

Exemples etexercicesReprise des algorithmesprécédents

Du rabe

À l’envers !

Exercices

Ce qui reste à faireCorrection et terminaison

Complexité

Boucles conditionnelles◮ Encore un exemple moisi :

i, j = 10, 20

while j < 20:

i = i+3

print(i+j)

print("Maintenant, i vaut "+str(i))

Exercice

Qu’est-ce qui va être affiché ?

◮ Plus intéressant :

a, cpt = 2020, 0

while a % 2 == 0:

cpt = cpt+1

a = a/2

Exercice

Que vaut i à la sortie de boucle ? Et a ?

Page 134: tous Informatique pour tous Plan généralblog.psi945.fr/public/info-commune/sup/cours-sup-imprimable-python.pdfDichotomie et Newton Méthode d’Euler Bases de données Stocker intelligemment

Notion d’algorithme

Stéphane Gonnord

Plan

Formaliser destâches répétitivesDans la vraie vie

En mathématiques

Des maths trèsélaboréesAdditionner

Multiplier

Mais encore...

Boucles et tests enPythonSyntaxe des boucles

Syntaxe des tests

Exemples etexercicesReprise des algorithmesprécédents

Du rabe

À l’envers !

Exercices

Ce qui reste à faireCorrection et terminaison

Complexité

Tests : syntaxe◮ L’indentation gnagnagna

◮ Syntaxe :

if <condition> :

<instr 1>

...

<instr n>

<ensuite>

◮ Possibilité (mais non obligation !) d’une alternative :

if <condition> :

<instr 1>

...

else:

<instr 1>

...

<ensuite>

Page 135: tous Informatique pour tous Plan généralblog.psi945.fr/public/info-commune/sup/cours-sup-imprimable-python.pdfDichotomie et Newton Méthode d’Euler Bases de données Stocker intelligemment

Notion d’algorithme

Stéphane Gonnord

Plan

Formaliser destâches répétitivesDans la vraie vie

En mathématiques

Des maths trèsélaboréesAdditionner

Multiplier

Mais encore...

Boucles et tests enPythonSyntaxe des boucles

Syntaxe des tests

Exemples etexercicesReprise des algorithmesprécédents

Du rabe

À l’envers !

Exercices

Ce qui reste à faireCorrection et terminaison

Complexité

Tests : exemples◮ S’il pleut, alors je prends un parapluie.

◮ Si j’ai colle de physique demain alors je bosse mon cours dephysique ; sinon je bosse mon cours de maths.

◮ Si j’ai colle de physique demain alors je bosse mon cours dephysique ; sinon : si j’ai colle de maths demain, alors je bossemon cours de maths, et sinon je vais courir au parc.

◮ Si j’ai colle de physique demain alors je bosse mon cours dephysique, et si j’ai colle de maths demain, alors je bosse moncours de maths.

Exercice

Que se passe t-il dans les trois derniers exemples selon les collesqu’on a le lendemain ? (il y a donc 12 réponses attendues !).On fera l’hypothèse que les conditions suffisantes énoncées sont né-

cessaires...

Page 136: tous Informatique pour tous Plan généralblog.psi945.fr/public/info-commune/sup/cours-sup-imprimable-python.pdfDichotomie et Newton Méthode d’Euler Bases de données Stocker intelligemment

Notion d’algorithme

Stéphane Gonnord

Plan

Formaliser destâches répétitivesDans la vraie vie

En mathématiques

Des maths trèsélaboréesAdditionner

Multiplier

Mais encore...

Boucles et tests enPythonSyntaxe des boucles

Syntaxe des tests

Exemples etexercicesReprise des algorithmesprécédents

Du rabe

À l’envers !

Exercices

Ce qui reste à faireCorrection et terminaison

Complexité

Nombre et somme de premiersExercice

Déterminer le nombre d’entiers inférieurs à 1000 qui sont premiers, ainsi que leursomme.

◮ Algorithme :

c← 0 ; s← 0 # le compteur et le sommeurpour i allant de 1 à 1000 faire

si i est premier alorsc← c+1s← s+ i

◮ Programme :

compteur, somme = 0, 0

for n in range(1000):

if est_premier(n):

compteur = compteur+1

somme = somme+n

◮ Résultat :

>>> compteur, somme

(168, 76127)

Page 137: tous Informatique pour tous Plan généralblog.psi945.fr/public/info-commune/sup/cours-sup-imprimable-python.pdfDichotomie et Newton Méthode d’Euler Bases de données Stocker intelligemment

Notion d’algorithme

Stéphane Gonnord

Plan

Formaliser destâches répétitivesDans la vraie vie

En mathématiques

Des maths trèsélaboréesAdditionner

Multiplier

Mais encore...

Boucles et tests enPythonSyntaxe des boucles

Syntaxe des tests

Exemples etexercicesReprise des algorithmesprécédents

Du rabe

À l’envers !

Exercices

Ce qui reste à faireCorrection et terminaison

Complexité

Calcul de 84142

Exercice

Comment calculer 84142 avec seulement des multiplications ?

◮ Algorithme :r ← 1pour i allant de 0 à 41 faire

r ← r ×841

◮ Programme :

r = 1

for i in range(42):

r *= 841 # Rappel : c’est comme r = r*841

◮ Résultat :

>>> r - 841**42

0L

Page 138: tous Informatique pour tous Plan généralblog.psi945.fr/public/info-commune/sup/cours-sup-imprimable-python.pdfDichotomie et Newton Méthode d’Euler Bases de données Stocker intelligemment

Notion d’algorithme

Stéphane Gonnord

Plan

Formaliser destâches répétitivesDans la vraie vie

En mathématiques

Des maths trèsélaboréesAdditionner

Multiplier

Mais encore...

Boucles et tests enPythonSyntaxe des boucles

Syntaxe des tests

Exemples etexercicesReprise des algorithmesprécédents

Du rabe

À l’envers !

Exercices

Ce qui reste à faireCorrection et terminaison

Complexité

Calcul de 841!Exercice

Comment calculer 841! avec seulement des multiplications ?

◮ Algorithme :r ← 1pour i allant de 1 à 841 faire

r ← r × i

◮ Programme :

r = 1

for i in range(1,842):

r *= i

◮ Résultat :

>>> r - math.factorial(841)

0L

Page 139: tous Informatique pour tous Plan généralblog.psi945.fr/public/info-commune/sup/cours-sup-imprimable-python.pdfDichotomie et Newton Méthode d’Euler Bases de données Stocker intelligemment

Notion d’algorithme

Stéphane Gonnord

Plan

Formaliser destâches répétitivesDans la vraie vie

En mathématiques

Des maths trèsélaboréesAdditionner

Multiplier

Mais encore...

Boucles et tests enPythonSyntaxe des boucles

Syntaxe des tests

Exemples etexercicesReprise des algorithmesprécédents

Du rabe

À l’envers !

Exercices

Ce qui reste à faireCorrection et terminaison

Complexité

Un dépassementExercice

Déterminer le plus petit entier n tel que n!≥ 1010

◮ Algorithme :

n← 1 ; f ← 1 # f vaudra n! à (presque) tout momenttant que f < 1010 faire

n← n+1f ← f ×n

◮ Programme :

n, facto = 1, 1

while facto<10**10:

n += 1

facto *= n

◮ Résultat :

>>> n,facto

(14, 87178291200L)

>>> math.factorial(14)

87178291200L

Page 140: tous Informatique pour tous Plan généralblog.psi945.fr/public/info-commune/sup/cours-sup-imprimable-python.pdfDichotomie et Newton Méthode d’Euler Bases de données Stocker intelligemment

Notion d’algorithme

Stéphane Gonnord

Plan

Formaliser destâches répétitivesDans la vraie vie

En mathématiques

Des maths trèsélaboréesAdditionner

Multiplier

Mais encore...

Boucles et tests enPythonSyntaxe des boucles

Syntaxe des tests

Exemples etexercicesReprise des algorithmesprécédents

Du rabe

À l’envers !

Exercices

Ce qui reste à faireCorrection et terminaison

Complexité

Addition de deux entiers

def addition(a,b):

""" calcul de c=a+b; représentation avec une liste de décimaux

On suppose que len(a) = len(b)"""

n = len(a)

c = [] # on va adjoindre successivement les décimales

r = 0

for i in range(n):

s = a[i]+b[i]+r

if s>9:

c.append(s-10)

r = 1

else:

c.append(s)

r = 0

if r == 1:

c.append(1)

return c

>>> addition([7,8,9,3,2,1],[6,5,4,6,5,4])

[3, 4, 4, 0, 8, 5]

Page 141: tous Informatique pour tous Plan généralblog.psi945.fr/public/info-commune/sup/cours-sup-imprimable-python.pdfDichotomie et Newton Méthode d’Euler Bases de données Stocker intelligemment

Notion d’algorithme

Stéphane Gonnord

Plan

Formaliser destâches répétitivesDans la vraie vie

En mathématiques

Des maths trèsélaboréesAdditionner

Multiplier

Mais encore...

Boucles et tests enPythonSyntaxe des boucles

Syntaxe des tests

Exemples etexercicesReprise des algorithmesprécédents

Du rabe

À l’envers !

Exercices

Ce qui reste à faireCorrection et terminaison

Complexité

Recherche de diviseursExercice

Déterminer les diviseurs de 9991

◮ Algorithme :

pour d allant de 1 à 9991 faire

si d divise 9991 alorsAfficher d

◮ Programme :

for d in range(1,9992):

if 9991%d ==0:

print(d)

◮ Résultat :

1

97

103

9991

◮ Et pour les mettre dans une liste ?

Page 142: tous Informatique pour tous Plan généralblog.psi945.fr/public/info-commune/sup/cours-sup-imprimable-python.pdfDichotomie et Newton Méthode d’Euler Bases de données Stocker intelligemment

Notion d’algorithme

Stéphane Gonnord

Plan

Formaliser destâches répétitivesDans la vraie vie

En mathématiques

Des maths trèsélaboréesAdditionner

Multiplier

Mais encore...

Boucles et tests enPythonSyntaxe des boucles

Syntaxe des tests

Exemples etexercicesReprise des algorithmesprécédents

Du rabe

À l’envers !

Exercices

Ce qui reste à faireCorrection et terminaison

Complexité

Primalité (1/2)Exercice

N = 10002200057 est-il premier ?

◮ Algorithme 1 :

pour d allant de 2 à N−1 faire

si d divise N alorsAfficher « Oulala, N n’est pas premier »

◮ Bof...

◮ Algorithme 2 :Premier <- True # jusqu’à preuve du contraire !pour d allant de 2 à N−1 faire

si d divise N alorsPremier <- False

◮ Améliorations :

◮ s’arrêter à√

N ;◮ s’arrêter si Premier est passé à False

Page 143: tous Informatique pour tous Plan généralblog.psi945.fr/public/info-commune/sup/cours-sup-imprimable-python.pdfDichotomie et Newton Méthode d’Euler Bases de données Stocker intelligemment

Notion d’algorithme

Stéphane Gonnord

Plan

Formaliser destâches répétitivesDans la vraie vie

En mathématiques

Des maths trèsélaboréesAdditionner

Multiplier

Mais encore...

Boucles et tests enPythonSyntaxe des boucles

Syntaxe des tests

Exemples etexercicesReprise des algorithmesprécédents

Du rabe

À l’envers !

Exercices

Ce qui reste à faireCorrection et terminaison

Complexité

Primalité (2/2)◮ Algorithme 3 : s’arrêter à

√N

pour d allant de 2 à ⌊√

N⌋ faire...

◮ Algorithme 4 : s’arrêter si Premier est passé à False

d ← 2tant que d ≤

√N et Premier faire

si d divise N alorsPremier <- False

d ← d +1

◮ Programme :

n, premier, d = 10002200057, True, 2

while d<=sqrt(n) and premier:

if n % d == 0:

premier = False

d += 1

◮ Résultat :

>>> d

100004

>>> 1000003*1000019

1000022000057L

Page 144: tous Informatique pour tous Plan généralblog.psi945.fr/public/info-commune/sup/cours-sup-imprimable-python.pdfDichotomie et Newton Méthode d’Euler Bases de données Stocker intelligemment

Notion d’algorithme

Stéphane Gonnord

Plan

Formaliser destâches répétitivesDans la vraie vie

En mathématiques

Des maths trèsélaboréesAdditionner

Multiplier

Mais encore...

Boucles et tests enPythonSyntaxe des boucles

Syntaxe des tests

Exemples etexercicesReprise des algorithmesprécédents

Du rabe

À l’envers !

Exercices

Ce qui reste à faireCorrection et terminaison

Complexité

Reverse engineering◮ Après l’exécution du programme suivant, que vaut s ?

s = 0

for i in range(101):

for j in range(101):

s = s+(i+j)**2

◮ Montrer que le programme suivant va terminer :

i, cpt = 5000, 0

while i>0:

i = i//2

cpt = cpt+1

Que valent i et cpt après exécution ?

◮ Que se passe-t-il à l’exécution de ce programme ?

n = 10

while n>1:

print(n)

if n%2 ==0:

n = n/2

else:

n = 3*n+1

Que se passe-t-il si n = 1000 au départ ? Et pour n quelconque ?

Page 145: tous Informatique pour tous Plan généralblog.psi945.fr/public/info-commune/sup/cours-sup-imprimable-python.pdfDichotomie et Newton Méthode d’Euler Bases de données Stocker intelligemment

Notion d’algorithme

Stéphane Gonnord

Plan

Formaliser destâches répétitivesDans la vraie vie

En mathématiques

Des maths trèsélaboréesAdditionner

Multiplier

Mais encore...

Boucles et tests enPythonSyntaxe des boucles

Syntaxe des tests

Exemples etexercicesReprise des algorithmesprécédents

Du rabe

À l’envers !

Exercices

Ce qui reste à faireCorrection et terminaison

Complexité

Quelques exercices suplémentaires◮ Écrire un programme (une fonction) réalisant la soustraction de

deux entiers donnés par des listes de décimales (supposées demême taille).

◮ Même chose pour la multiplication de deux entiers :

◮ avec n et 1 décimales ;◮ avec n et p décimales.

◮ S’attaquer à la division !

Page 146: tous Informatique pour tous Plan généralblog.psi945.fr/public/info-commune/sup/cours-sup-imprimable-python.pdfDichotomie et Newton Méthode d’Euler Bases de données Stocker intelligemment

Notion d’algorithme

Stéphane Gonnord

Plan

Formaliser destâches répétitivesDans la vraie vie

En mathématiques

Des maths trèsélaboréesAdditionner

Multiplier

Mais encore...

Boucles et tests enPythonSyntaxe des boucles

Syntaxe des tests

Exemples etexercicesReprise des algorithmesprécédents

Du rabe

À l’envers !

Exercices

Ce qui reste à faireCorrection et terminaison

Complexité

Prouver la correction (1/2)Exercice

Montrer que le code suivant fait ce qu’on attendait de lui :

compteur = 0

for n in range(1001):

if est_premier(n):

compteur = compteur+1

◮ Notion d’invariant de boucle.

◮ Trouver le bon (délicat !) ;

◮ et le prouver.

◮ Ici par exemple : « À la fin de l’exécution du corps de boucle,compteur vaut le nombre d’indices k ≤ n tels queest_premier(k) a renvoyé True »

◮ Il reste à conclure !

Page 147: tous Informatique pour tous Plan généralblog.psi945.fr/public/info-commune/sup/cours-sup-imprimable-python.pdfDichotomie et Newton Méthode d’Euler Bases de données Stocker intelligemment

Notion d’algorithme

Stéphane Gonnord

Plan

Formaliser destâches répétitivesDans la vraie vie

En mathématiques

Des maths trèsélaboréesAdditionner

Multiplier

Mais encore...

Boucles et tests enPythonSyntaxe des boucles

Syntaxe des tests

Exemples etexercicesReprise des algorithmesprécédents

Du rabe

À l’envers !

Exercices

Ce qui reste à faireCorrection et terminaison

Complexité

Prouver la correction (2/2)Exercice

Montrer qu’après l’exécution du script suivant, r1 et r2 valent respectivement 84142 et841! :

r1, r2 = 1, 1

for i in range(42):

r1 = r1*841

for i in range(2,842):

r2 = r2*i

Fastoche !Exercice

Montrer qu’après l’exécution du script suivant, r vaut 84142

r, p, n = 1, 841, 42

while n > 0:

if n%2 == 1:

r *= p

p *= p

n //= 2

Peut-être un peu moins fastoche !

Page 148: tous Informatique pour tous Plan généralblog.psi945.fr/public/info-commune/sup/cours-sup-imprimable-python.pdfDichotomie et Newton Méthode d’Euler Bases de données Stocker intelligemment

Notion d’algorithme

Stéphane Gonnord

Plan

Formaliser destâches répétitivesDans la vraie vie

En mathématiques

Des maths trèsélaboréesAdditionner

Multiplier

Mais encore...

Boucles et tests enPythonSyntaxe des boucles

Syntaxe des tests

Exemples etexercicesReprise des algorithmesprécédents

Du rabe

À l’envers !

Exercices

Ce qui reste à faireCorrection et terminaison

Complexité

Prouver la terminaison◮ On suppose que n a été affecté (et vaut un entier strictement

positif). Montrer que la boucle suivante va terminer :

while n>0:

n = n-10

◮ Même chose ici :

while n>0:

n = n // 2

◮ Et encore ici :

while n>1:

if n%2 ==0:

n = n/2

else:

n = 3*n+1

Attention, il y a un piège :-)

Page 149: tous Informatique pour tous Plan généralblog.psi945.fr/public/info-commune/sup/cours-sup-imprimable-python.pdfDichotomie et Newton Méthode d’Euler Bases de données Stocker intelligemment

Notion d’algorithme

Stéphane Gonnord

Plan

Formaliser destâches répétitivesDans la vraie vie

En mathématiques

Des maths trèsélaboréesAdditionner

Multiplier

Mais encore...

Boucles et tests enPythonSyntaxe des boucles

Syntaxe des tests

Exemples etexercicesReprise des algorithmesprécédents

Du rabe

À l’envers !

Exercices

Ce qui reste à faireCorrection et terminaison

Complexité

Évaluer la complexité (1/2)◮ On suppose que n a été affecté (et vaut un entier strictement

positif). Combien d’opérations élémentaires le programmesuivant va-t-il exécuter ?

s = 0

for i in range(n):

s = s+i**2

◮ Même chose ici :

s = 0

for i in range(n):

for j in range(i,n):

s = s+j**2

◮ Et ici :

while n<10**10:

n = n * 2

Page 150: tous Informatique pour tous Plan généralblog.psi945.fr/public/info-commune/sup/cours-sup-imprimable-python.pdfDichotomie et Newton Méthode d’Euler Bases de données Stocker intelligemment

Notion d’algorithme

Stéphane Gonnord

Plan

Formaliser destâches répétitivesDans la vraie vie

En mathématiques

Des maths trèsélaboréesAdditionner

Multiplier

Mais encore...

Boucles et tests enPythonSyntaxe des boucles

Syntaxe des tests

Exemples etexercicesReprise des algorithmesprécédents

Du rabe

À l’envers !

Exercices

Ce qui reste à faireCorrection et terminaison

Complexité

Évaluer la complexité (2/2)◮ On suppose que n a été affecté (et vaut un entier strictement

positif). Combien d’opérations élémentaires le programmesuivant va-t-il exécuter ?

while n>0:

n = n // 2

◮ Et ici ?

while n>1:

if n%2 ==0:

n = n/2

else:

n = 3*n+1

Page 151: tous Informatique pour tous Plan généralblog.psi945.fr/public/info-commune/sup/cours-sup-imprimable-python.pdfDichotomie et Newton Méthode d’Euler Bases de données Stocker intelligemment

Notion d’algorithme

Stéphane Gonnord

Plan

Formaliser destâches répétitivesDans la vraie vie

En mathématiques

Des maths trèsélaboréesAdditionner

Multiplier

Mais encore...

Boucles et tests enPythonSyntaxe des boucles

Syntaxe des tests

Exemples etexercicesReprise des algorithmesprécédents

Du rabe

À l’envers !

Exercices

Ce qui reste à faireCorrection et terminaison

Complexité

End gameMerci de votre attention !

XKCD 1247 : « The mother of all suspect files »

(Better change the URL to https before downloading.)

Page 152: tous Informatique pour tous Plan généralblog.psi945.fr/public/info-commune/sup/cours-sup-imprimable-python.pdfDichotomie et Newton Méthode d’Euler Bases de données Stocker intelligemment

Tableaux/listes enPython (1/2)

Stéphane Gonnord

Plan

Tableaux et listesTableaux vs listes

La chêvre et le choux

En pratiqueCréation, indexation

Slicing

Compréhension

Maping

Retour à la théorieAppend et extend

Copie de liste

Passage en argument

Travailler avec deslistesParcours

Somme des éléments d’untableau

Recherche du maximum

Tableaux/listes en Python (1/2)Une première couche

Stéphane Gonnord

[email protected]

www.mp933.fr

Lycée du parc - Lyon

Vendredi 8 et 15 novembre 2013Lycée du parc

Page 153: tous Informatique pour tous Plan généralblog.psi945.fr/public/info-commune/sup/cours-sup-imprimable-python.pdfDichotomie et Newton Méthode d’Euler Bases de données Stocker intelligemment

Tableaux/listes enPython (1/2)

Stéphane Gonnord

Plan

Tableaux et listesTableaux vs listes

La chêvre et le choux

En pratiqueCréation, indexation

Slicing

Compréhension

Maping

Retour à la théorieAppend et extend

Copie de liste

Passage en argument

Travailler avec deslistesParcours

Somme des éléments d’untableau

Recherche du maximum

Plan1. Tableaux vs. listes

◮ Tableaux/vecteurs ;◮ listes ;◮ la chêvre et le choux.

2. En pratique◮ Création, indexation ;◮ slicing ;◮ listes en compréhension.

3. Seconde couche de théorie◮ append et extend ;◮ copie de liste ;◮ passage en argument.

4. Quelques manipulations effectives de listes◮ parcours basique ;◮ recherche d’un maximum ;◮ recherche d’un élément ;◮ etc.

Page 154: tous Informatique pour tous Plan généralblog.psi945.fr/public/info-commune/sup/cours-sup-imprimable-python.pdfDichotomie et Newton Méthode d’Euler Bases de données Stocker intelligemment

Tableaux/listes enPython (1/2)

Stéphane Gonnord

Plan

Tableaux et listesTableaux vs listes

La chêvre et le choux

En pratiqueCréation, indexation

Slicing

Compréhension

Maping

Retour à la théorieAppend et extend

Copie de liste

Passage en argument

Travailler avec deslistesParcours

Somme des éléments d’untableau

Recherche du maximum

Tableaux (vecteurs) vs. listesDeux structures concurrentes

◮ Les tableaux :◮ Un bloc (intervalle) de mémoire.◮ Accès direct en temps constant.◮ Ne peut être « prolongé » à moindre coût.

◮ Les listes (chaînées) :◮ Accès au premier élément, ajout en tête : facile.◮ Ou le contraire !◮ Accès au k -ème : difficile, coûteux.

Page 155: tous Informatique pour tous Plan généralblog.psi945.fr/public/info-commune/sup/cours-sup-imprimable-python.pdfDichotomie et Newton Méthode d’Euler Bases de données Stocker intelligemment

Tableaux/listes enPython (1/2)

Stéphane Gonnord

Plan

Tableaux et listesTableaux vs listes

La chêvre et le choux

En pratiqueCréation, indexation

Slicing

Compréhension

Maping

Retour à la théorieAppend et extend

Copie de liste

Passage en argument

Travailler avec deslistesParcours

Somme des éléments d’untableau

Recherche du maximum

Une implémentation très astucieuse◮ Les tableaux redimensionnables :

◮ pour ajouter/étendre à moindre coût, mais avecaccès rapide au k -ième ;

◮ tableau recopié au delà de certains seuils.

◮ Agrandissement d’un tableau jusqu’à 1025éléments :

◮ 1+2+3+ · · ·+1025◮ 1+2+4+8+ · · ·+2048

◮ Complexité : pire des cas, moyenne, amorti...

Page 156: tous Informatique pour tous Plan généralblog.psi945.fr/public/info-commune/sup/cours-sup-imprimable-python.pdfDichotomie et Newton Méthode d’Euler Bases de données Stocker intelligemment

Tableaux/listes enPython (1/2)

Stéphane Gonnord

Plan

Tableaux et listesTableaux vs listes

La chêvre et le choux

En pratiqueCréation, indexation

Slicing

Compréhension

Maping

Retour à la théorieAppend et extend

Copie de liste

Passage en argument

Travailler avec deslistesParcours

Somme des éléments d’untableau

Recherche du maximum

Création, indexation◮ t = [ ..., ..., ...] ; t = [0] * 10

◮ len(t)

◮ t[0], t[1], ..., t[n-1], t[-1], ..., t[-n]

◮ >>> x = 5

>>> id(x)

161288320

>>> x = 12

>>> id(x)

161288236

>>> t = [12, 15, 42]

>>> id(t)

168387212

>>> t[1] = 841

>>> t

[12, 841, 42]

>>> id(t)

168387212

Page 157: tous Informatique pour tous Plan généralblog.psi945.fr/public/info-commune/sup/cours-sup-imprimable-python.pdfDichotomie et Newton Méthode d’Euler Bases de données Stocker intelligemment

Tableaux/listes enPython (1/2)

Stéphane Gonnord

Plan

Tableaux et listesTableaux vs listes

La chêvre et le choux

En pratiqueCréation, indexation

Slicing

Compréhension

Maping

Retour à la théorieAppend et extend

Copie de liste

Passage en argument

Travailler avec deslistesParcours

Somme des éléments d’untableau

Recherche du maximum

Slicing◮ t[a: b] : une tranche de t

>>> t = [42, 12, 15, 19, 16, 3, 40]

>>> t[2 : 4]

[15, 19]

◮ Mais recopiée ailleurs !

>>> t1 = t[2 : 5]

>>> t1

[15, 19, 16]

>>> t1[1] = 6

>>> t, t1

([42, 12, 15, 19, 16, 3, 40], [15, 6, 16])

>>> id(t), id(t1)

152527500, 152529132

◮ Des variantes : t[a: ] ; t[ : b] ; t[ : ] ;t[2: -3] ; t[10: 2] ; t[a : b : s]

Page 158: tous Informatique pour tous Plan généralblog.psi945.fr/public/info-commune/sup/cours-sup-imprimable-python.pdfDichotomie et Newton Méthode d’Euler Bases de données Stocker intelligemment

Tableaux/listes enPython (1/2)

Stéphane Gonnord

Plan

Tableaux et listesTableaux vs listes

La chêvre et le choux

En pratiqueCréation, indexation

Slicing

Compréhension

Maping

Retour à la théorieAppend et extend

Copie de liste

Passage en argument

Travailler avec deslistesParcours

Somme des éléments d’untableau

Recherche du maximum

Comprehension◮ Dans R :

{x ∈ R; |x | ≤ 1}= {cos t | t ∈ [0,10]}

◮ [x for x in s if condition(x)]

>>> [i for i in range(10) if i%3 == 0]

[0, 3, 6, 9]

◮ [phi(x) for x in s]

>>> [i**2 for i in range(4)]

[0, 1, 4, 9]

◮ [phi(x) for x in s if condition(x)]

>>> [i**2 for i in range(10) if i%3 == 0]

[0, 9, 36, 81]

Page 159: tous Informatique pour tous Plan généralblog.psi945.fr/public/info-commune/sup/cours-sup-imprimable-python.pdfDichotomie et Newton Méthode d’Euler Bases de données Stocker intelligemment

Tableaux/listes enPython (1/2)

Stéphane Gonnord

Plan

Tableaux et listesTableaux vs listes

La chêvre et le choux

En pratiqueCréation, indexation

Slicing

Compréhension

Maping

Retour à la théorieAppend et extend

Copie de liste

Passage en argument

Travailler avec deslistesParcours

Somme des éléments d’untableau

Recherche du maximum

Maping◮ Pour appliquer une fonction à chaque élément d’une

liste

>>> def f(x): return 2*x

>>> map(f, [3, 10, 40])

[6, 20, 80]

>>> map(est_premier, [3, 24, 91, 101])

[True, False, False, True]

>>> map(len, [ [1,15] , [10] , [4,5,6,7] ])

[2, 1, 4]

◮ Attention : évaluation retardée en Python 3

>>> map(f, [1, 4, 10])

<map object at 0xa4ffb2c>

>>> list(map(f, [1, 4, 10]))

[2, 8, 20]

Page 160: tous Informatique pour tous Plan généralblog.psi945.fr/public/info-commune/sup/cours-sup-imprimable-python.pdfDichotomie et Newton Méthode d’Euler Bases de données Stocker intelligemment

Tableaux/listes enPython (1/2)

Stéphane Gonnord

Plan

Tableaux et listesTableaux vs listes

La chêvre et le choux

En pratiqueCréation, indexation

Slicing

Compréhension

Maping

Retour à la théorieAppend et extend

Copie de liste

Passage en argument

Travailler avec deslistesParcours

Somme des éléments d’untableau

Recherche du maximum

Append et extend

>>> t = [1, 3]

>>> t + [17]

[1, 3, 17]

>>> t

[1, 3]

>>> id(t)

152528972

>>> t = t + [17]

>>> t, id(t)

([1, 3, 17], 152528428)

>>> t.append(1515)

>>> t, id(t)

([1, 3, 17, 1515], 152528428)

>>> t.extend([’pif’, 19, ’paf’])

>>> id(t), t

(152528428, [1, 3, 17, 1515, ’pif’, 19, ’paf’])

Page 161: tous Informatique pour tous Plan généralblog.psi945.fr/public/info-commune/sup/cours-sup-imprimable-python.pdfDichotomie et Newton Méthode d’Euler Bases de données Stocker intelligemment

Tableaux/listes enPython (1/2)

Stéphane Gonnord

Plan

Tableaux et listesTableaux vs listes

La chêvre et le choux

En pratiqueCréation, indexation

Slicing

Compréhension

Maping

Retour à la théorieAppend et extend

Copie de liste

Passage en argument

Travailler avec deslistesParcours

Somme des éléments d’untableau

Recherche du maximum

Copie de liste◮ Une liste est une adresse :

>>> t1 = [4, 2, 15]

>>> t2 = t1[ : ]

>>> t3 = t1

>>> t1, t2, t3

[4, 2, 15], [4, 2, 15], [4, 2, 15]

>>> map(id, [t1, t2, t3])

[145335084, 145386956, 145335084]

>>> t2[1] = 1515

>>> t3[1] = 841

>>> t1, t2, t3

([4, 841, 15], [4, 1515, 15], [4, 841, 15])

◮ En première approximation : ma_copie = t[ : ]

◮ copy.copy vs copy.deepcopy

Page 162: tous Informatique pour tous Plan généralblog.psi945.fr/public/info-commune/sup/cours-sup-imprimable-python.pdfDichotomie et Newton Méthode d’Euler Bases de données Stocker intelligemment

Tableaux/listes enPython (1/2)

Stéphane Gonnord

Plan

Tableaux et listesTableaux vs listes

La chêvre et le choux

En pratiqueCréation, indexation

Slicing

Compréhension

Maping

Retour à la théorieAppend et extend

Copie de liste

Passage en argument

Travailler avec deslistesParcours

Somme des éléments d’untableau

Recherche du maximum

Passage en argument◮ (Experts : passage par valeur car tableau=pointeur !)

◮ Consultation : oui !

def maximum(t):

...

◮ Écriture : possible, mais attention...

◮ C’est super !

def echange(t, i, j):

t[i], t[j] = t[j], t[i]

◮ C’est une catastrophe ! Si la fonction est mal écrite(ou volontairement néfaste), elle peut détruire ladonnée.

Page 163: tous Informatique pour tous Plan généralblog.psi945.fr/public/info-commune/sup/cours-sup-imprimable-python.pdfDichotomie et Newton Méthode d’Euler Bases de données Stocker intelligemment

Tableaux/listes enPython (1/2)

Stéphane Gonnord

Plan

Tableaux et listesTableaux vs listes

La chêvre et le choux

En pratiqueCréation, indexation

Slicing

Compréhension

Maping

Retour à la théorieAppend et extend

Copie de liste

Passage en argument

Travailler avec deslistesParcours

Somme des éléments d’untableau

Recherche du maximum

Parcours de liste◮ Première version :

for i in range(len(t)):

... (travail sur t[i])

◮ Deuxième version (souvent meilleure) :

for x in t:

... (travail direct sur x)

◮ Exemples : trouver le maximum d’un tableau... oubien l’indice correspondant.

Page 164: tous Informatique pour tous Plan généralblog.psi945.fr/public/info-commune/sup/cours-sup-imprimable-python.pdfDichotomie et Newton Méthode d’Euler Bases de données Stocker intelligemment

Tableaux/listes enPython (1/2)

Stéphane Gonnord

Plan

Tableaux et listesTableaux vs listes

La chêvre et le choux

En pratiqueCréation, indexation

Slicing

Compréhension

Maping

Retour à la théorieAppend et extend

Copie de liste

Passage en argument

Travailler avec deslistesParcours

Somme des éléments d’untableau

Recherche du maximum

Somme des éléments d’un tableau◮ Version 1 :

def somme1(t):

res = 0

for i in range(len(t)):

res = res + t[i]

return res

◮ Version 2 :

def somme2(t):

res = 0

for x in t:

res = res + x

return res

◮ Version 3 (votre préférée...) :

def somme3(t):

return sum(t)

Page 165: tous Informatique pour tous Plan généralblog.psi945.fr/public/info-commune/sup/cours-sup-imprimable-python.pdfDichotomie et Newton Méthode d’Euler Bases de données Stocker intelligemment

Tableaux/listes enPython (1/2)

Stéphane Gonnord

Plan

Tableaux et listesTableaux vs listes

La chêvre et le choux

En pratiqueCréation, indexation

Slicing

Compréhension

Maping

Retour à la théorieAppend et extend

Copie de liste

Passage en argument

Travailler avec deslistesParcours

Somme des éléments d’untableau

Recherche du maximum

Recherche du maximum◮ Version 1 :

def maxi(t):

assert( len(t)>0 )

maxi_provisoire = t[0]

for x in t:

if x>maxi_provisoire:

maxi_provisoire = x

return maxi_provisoire

◮ Version 2 (...) :

def maxi_feignasse(t):

return max(t)

Exercice : retourner la position du maximum.

Page 166: tous Informatique pour tous Plan généralblog.psi945.fr/public/info-commune/sup/cours-sup-imprimable-python.pdfDichotomie et Newton Méthode d’Euler Bases de données Stocker intelligemment

Tableaux/listes enPython (1/2)

Stéphane Gonnord

Plan

Tableaux et listesTableaux vs listes

La chêvre et le choux

En pratiqueCréation, indexation

Slicing

Compréhension

Maping

Retour à la théorieAppend et extend

Copie de liste

Passage en argument

Travailler avec deslistesParcours

Somme des éléments d’untableau

Recherche du maximum

End gameMerci de votre attention !

Page 167: tous Informatique pour tous Plan généralblog.psi945.fr/public/info-commune/sup/cours-sup-imprimable-python.pdfDichotomie et Newton Méthode d’Euler Bases de données Stocker intelligemment

Recherches dans untableau

Stéphane Gonnord

Plan

RechercheséquentielleLe problème

Positions

True/False

RecherchedichotomiquePrincipe

Différentes implémentations

Complexité, correction

Recherches dans un tableauséquentielle et dichotomique

Stéphane Gonnord

[email protected]

www.mp933.fr

Lycée du parc - Lyon

Vendredi 22 (et 29 ?) novembre 2013Lycée du parc

Page 168: tous Informatique pour tous Plan généralblog.psi945.fr/public/info-commune/sup/cours-sup-imprimable-python.pdfDichotomie et Newton Méthode d’Euler Bases de données Stocker intelligemment

Recherches dans untableau

Stéphane Gonnord

Plan

RechercheséquentielleLe problème

Positions

True/False

RecherchedichotomiquePrincipe

Différentes implémentations

Complexité, correction

Plan1. Recherche séquentielle

◮ Présence d’un élément ; positions.◮ Sortie prématurée... ou pas ?◮ Correction, complexité.

2. Recherche dichotomique◮ Principe.◮ Mise en œuvre.◮ Sortie prématurée... ou pas ?◮ Correction, complexité.

Page 169: tous Informatique pour tous Plan généralblog.psi945.fr/public/info-commune/sup/cours-sup-imprimable-python.pdfDichotomie et Newton Méthode d’Euler Bases de données Stocker intelligemment

Recherches dans untableau

Stéphane Gonnord

Plan

RechercheséquentielleLe problème

Positions

True/False

RecherchedichotomiquePrincipe

Différentes implémentations

Complexité, correction

Le problèmeEst-ce qu’un objet x appartient à un tableau t?

◮ Deux types de réponse :◮ True/False

◮ Tableau des positions (éventuelles)

◮ True/False :◮ Je parcours tous les éléments de t , et je note la

présence éventuelle de x .◮ Dès que je vois x , je hurle qu’il est présent et le

travail est fini.

◮ Positions :je parcours tous les indices, et je note les positionsoù je trouve x .

◮ Une première solution excellente/misérable :

def appartient1(x, t):

return x in t

Page 170: tous Informatique pour tous Plan généralblog.psi945.fr/public/info-commune/sup/cours-sup-imprimable-python.pdfDichotomie et Newton Méthode d’Euler Bases de données Stocker intelligemment

Recherches dans untableau

Stéphane Gonnord

Plan

RechercheséquentielleLe problème

Positions

True/False

RecherchedichotomiquePrincipe

Différentes implémentations

Complexité, correction

Positions où on trouve l’objet◮ Fastoche...

◮ À comprendre, et savoir refaire les yeux fermés...Mais merci d’avoir tout de même ce poly avec vousau prochain tp, au cazou.

◮ Et donc, voici le code :

def positions(x, t):

""" Calcule les positions de x dans t"""

pos = [] # où seront stockées les positions

for i in range(len(t)):

if t[i] == x:

pos.append(i)

return pos

Page 171: tous Informatique pour tous Plan généralblog.psi945.fr/public/info-commune/sup/cours-sup-imprimable-python.pdfDichotomie et Newton Méthode d’Euler Bases de données Stocker intelligemment

Recherches dans untableau

Stéphane Gonnord

Plan

RechercheséquentielleLe problème

Positions

True/False

RecherchedichotomiquePrincipe

Différentes implémentations

Complexité, correction

True/False avec return interne◮ Dès qu’on voit x, on quitte le programme via return.

On ne retourne False qu’après avoir tout parcouru.

◮ Code :

def appartient2(x, t):

"""Appartenance à un tableau.

On sort dès que possible"""

for y in t:

if y == x:

return True # surtout pas de else !

return False # Attention à l’indentation

◮ Complexité : de 1 à n = |t| accès au tableau.

◮ Correction/validité ?

Page 172: tous Informatique pour tous Plan généralblog.psi945.fr/public/info-commune/sup/cours-sup-imprimable-python.pdfDichotomie et Newton Méthode d’Euler Bases de données Stocker intelligemment

Recherches dans untableau

Stéphane Gonnord

Plan

RechercheséquentielleLe problème

Positions

True/False

RecherchedichotomiquePrincipe

Différentes implémentations

Complexité, correction

True/False avec return final◮ Dès qu’on voit x, « on le note »... dans un booléen.

◮ Code :

def appartient3(x, t):

"""Appartenance à un tableau.

On le parcourt complètement"""

vu = False

for y in t:

if y == x:

vu = True # toujours pas de else...

return vu

◮ Complexité : systématiquement n = |t| accès (moinsbien, donc).

◮ Correction/validité ?

Page 173: tous Informatique pour tous Plan généralblog.psi945.fr/public/info-commune/sup/cours-sup-imprimable-python.pdfDichotomie et Newton Méthode d’Euler Bases de données Stocker intelligemment

Recherches dans untableau

Stéphane Gonnord

Plan

RechercheséquentielleLe problème

Positions

True/False

RecherchedichotomiquePrincipe

Différentes implémentations

Complexité, correction

True/False avec return final : mieux !◮ Dès qu’on voit x, « on le note »... dans un booléen...

et on quitte la boucle !◮ Mais comment donc ?◮ Code :def appartient4(x, t):

"""Appartenance à un tableau.

On sort de la boucle dès que possible"""

vu = False

indice = 0

while not(vu) and indice<len(t):

if t[indice] == x:

vu = True

indice = indice+1 # attention à l’indentation

return vu

◮ Complexité : de 1 à n = |t| accès.◮ Correction/validité ?

Page 174: tous Informatique pour tous Plan généralblog.psi945.fr/public/info-commune/sup/cours-sup-imprimable-python.pdfDichotomie et Newton Méthode d’Euler Bases de données Stocker intelligemment

Recherches dans untableau

Stéphane Gonnord

Plan

RechercheséquentielleLe problème

Positions

True/False

RecherchedichotomiquePrincipe

Différentes implémentations

Complexité, correction

Principe de la recherche dichotomique◮ S’applique à un tableau trié.◮ Vu de loin :

◮ appartient(Winehouse, [Abba,...,ZZtop])?◮ n vs lnn ; 109 vs. 30.

◮ D’un peu plus près :◮ On tient à jour un intervalle de recherche dans le

tableau.◮ Il (sa longueur) est divisé(e) par deux à chaque

étape.◮ Jusqu’à ce que...

◮ on trouve Amy !◮ ou on constate l’absence.

Page 175: tous Informatique pour tous Plan généralblog.psi945.fr/public/info-commune/sup/cours-sup-imprimable-python.pdfDichotomie et Newton Méthode d’Euler Bases de données Stocker intelligemment

Recherches dans untableau

Stéphane Gonnord

Plan

RechercheséquentielleLe problème

Positions

True/False

RecherchedichotomiquePrincipe

Différentes implémentations

Complexité, correction

Plus précisément◮ On tient à jour deux indices indiquant le début (d) et

la fin (f ) de la plage considérée.

◮ Initialisation : d, f = 0, len(t)-1

◮ Nombre d’éléments de la plage de travail ?

f −d +1

(piquets, intervalles...)

◮ Indice « central » ?

m =f +d +1

2

◮ Intervalle pour continuer ?

[d ,m−1] ou [m+1, f ]

Page 176: tous Informatique pour tous Plan généralblog.psi945.fr/public/info-commune/sup/cours-sup-imprimable-python.pdfDichotomie et Newton Méthode d’Euler Bases de données Stocker intelligemment

Recherches dans untableau

Stéphane Gonnord

Plan

RechercheséquentielleLe problème

Positions

True/False

RecherchedichotomiquePrincipe

Différentes implémentations

Complexité, correction

L’algorithmeEntrées : b,T

d , f ← 0, |T |−1tant que f > d faire

si f −d est pair alors

m← d+f2

sinon

m← d+f+12

si T [m] = b alorsRésultat : True

si T [m]> b alorsf ←m−1 # continuer à gauche

sinond ←m+1 # continuer à droite

# Ici, f = d (il reste un élément) ou f = d−1 (il n’y a plus rien)si d = f et T [d ] = b alors

Résultat : TrueRésultat : False

Page 177: tous Informatique pour tous Plan généralblog.psi945.fr/public/info-commune/sup/cours-sup-imprimable-python.pdfDichotomie et Newton Méthode d’Euler Bases de données Stocker intelligemment

Recherches dans untableau

Stéphane Gonnord

Plan

RechercheséquentielleLe problème

Positions

True/False

RecherchedichotomiquePrincipe

Différentes implémentations

Complexité, correction

Implémentation directe

def recherche_dichotomique(b, t):

""" Recherche dichotomique dans un tableau trié"""

d, f = 0, len(t)-1

while f > d:

m = (d+f+1)//2

if t[m] == b:

return True

if t[m] > b:

f = m-1

else:

d = m+1

if d == f and t[d] == b:

return True

return False

Page 178: tous Informatique pour tous Plan généralblog.psi945.fr/public/info-commune/sup/cours-sup-imprimable-python.pdfDichotomie et Newton Méthode d’Euler Bases de données Stocker intelligemment

Recherches dans untableau

Stéphane Gonnord

Plan

RechercheséquentielleLe problème

Positions

True/False

RecherchedichotomiquePrincipe

Différentes implémentations

Complexité, correction

Pareil... sans return prématuré

def recherche_dichotomique_bis(b, t):

""" Recherche dichotomique dans un tableau trié"""

d, f = 0, len(t)-1

j_ai_trouve = False

while not(j_ai_trouve) and (f > d):

m = (d+f+1)//2

if t[m] == b:

j_ai_trouve = True

else:

if t[m] > b:

f = m-1

else:

d = m+1

if d == f and t[d] == b:

j_ai_trouve = True

return j_ai_trouve

Page 179: tous Informatique pour tous Plan généralblog.psi945.fr/public/info-commune/sup/cours-sup-imprimable-python.pdfDichotomie et Newton Méthode d’Euler Bases de données Stocker intelligemment

Recherches dans untableau

Stéphane Gonnord

Plan

RechercheséquentielleLe problème

Positions

True/False

RecherchedichotomiquePrincipe

Différentes implémentations

Complexité, correction

Et en récursif ?

def dicho_ter(but, t, debut, fin):

""" Recherche dichotomique récursive

dans une zone d’un tableau trié"""

if debut > fin:

# peut arriver du fait des appels récursifs

return False

if debut == fin:

return t[debut] == but

milieu = (debut+fin+1)//2

if t[milieu] == but:

return True

if t[milieu] < but:

return dicho_ter(but, t, milieu+1, fin)

return dicho_ter(but, t, debut, milieu-1)

Page 180: tous Informatique pour tous Plan généralblog.psi945.fr/public/info-commune/sup/cours-sup-imprimable-python.pdfDichotomie et Newton Méthode d’Euler Bases de données Stocker intelligemment

Recherches dans untableau

Stéphane Gonnord

Plan

RechercheséquentielleLe problème

Positions

True/False

RecherchedichotomiquePrincipe

Différentes implémentations

Complexité, correction

Cryptique !On peut faire encore mieux... (pire ?)

def dicho_grumf(but, t, debut, fin):

return (debut <= fin) and\

((debut == fin and t[debut] == but)

or

(debut < fin

and

((t[(debut+fin+1)//2]==but)

or (t[(debut+fin+1)//2]>but

and dicho_grumf(but,t,debut,(debut+fin-1)//2))

or (t[(debut+fin+1)//2]<but

and dicho_grumf(but, t,(debut+fin+3)//2,fin)))))

Page 181: tous Informatique pour tous Plan généralblog.psi945.fr/public/info-commune/sup/cours-sup-imprimable-python.pdfDichotomie et Newton Méthode d’Euler Bases de données Stocker intelligemment

Recherches dans untableau

Stéphane Gonnord

Plan

RechercheséquentielleLe problème

Positions

True/False

RecherchedichotomiquePrincipe

Différentes implémentations

Complexité, correction

Complexité◮ Au départ : n éléments à traiter.

◮ À chaque étape supplémentaire : la longueur estdivisée par deux.

◮ LA (une) bonne propriété :

« Après k passages dans la boucle, f −d +1≤ n2k »

◮ Preuve : par récurrence.

◮ Conséquence : une complexité « en lnn ».

◮ C’est vraiment mieux que n ?

Ben oui, vraiment !

Page 182: tous Informatique pour tous Plan généralblog.psi945.fr/public/info-commune/sup/cours-sup-imprimable-python.pdfDichotomie et Newton Méthode d’Euler Bases de données Stocker intelligemment

Recherches dans untableau

Stéphane Gonnord

Plan

RechercheséquentielleLe problème

Positions

True/False

RecherchedichotomiquePrincipe

Différentes implémentations

Complexité, correction

Correction◮ Invariant :

« T [debut]≤ b ≤ T [fin] »◮ Conséquence : si b est présent dans t , on va le

trouver. Et sinon ?◮ Cet invariant est faux !◮ On peut alors modifier le code... ou l’invariant !

Merci de votre attention !

Page 183: tous Informatique pour tous Plan généralblog.psi945.fr/public/info-commune/sup/cours-sup-imprimable-python.pdfDichotomie et Newton Méthode d’Euler Bases de données Stocker intelligemment

Recherche d’unsous-mot

Stéphane Gonnord

Plan

Retour sur ladichotomie

Recherche d’unsous-motLe problème

Avec slicing

Sans slicing

Crible d’ÉratosthèneRecherche de tous lesnombres premiers

Le crible

Recherche d’un sous-motet un peu de crible

Stéphane Gonnord

[email protected]

www.mp933.fr

Lycée du parc - Lyon

Vendredi 29 novembre 2013Lycée du parc

Page 184: tous Informatique pour tous Plan généralblog.psi945.fr/public/info-commune/sup/cours-sup-imprimable-python.pdfDichotomie et Newton Méthode d’Euler Bases de données Stocker intelligemment

Recherche d’unsous-mot

Stéphane Gonnord

Plan

Retour sur ladichotomie

Recherche d’unsous-motLe problème

Avec slicing

Sans slicing

Crible d’ÉratosthèneRecherche de tous lesnombres premiers

Le crible

Plan1. Retour sur la dichotomie

2. Recherche d’un sous-mot◮ Problème ; principe.◮ Mise en œuvre.◮ Complexité. Améliorations.

3. Le crible d’Érathosthène◮ Le problème ; une solution naïve.◮ Principe du crible.◮ Mise en place.

Page 185: tous Informatique pour tous Plan généralblog.psi945.fr/public/info-commune/sup/cours-sup-imprimable-python.pdfDichotomie et Newton Méthode d’Euler Bases de données Stocker intelligemment

Recherche d’unsous-mot

Stéphane Gonnord

Plan

Retour sur ladichotomie

Recherche d’unsous-motLe problème

Avec slicing

Sans slicing

Crible d’ÉratosthèneRecherche de tous lesnombres premiers

Le crible

Retour sur la dichotomie◮ Pour chercher une valeur dans un tableau trié : lnn

requètes.

◮ Pour approcher une solution de f (x) = 0 avec f

continue : dans quelques semaines !

y=x2 −2

a0 b0

a1 b1

a2 b2

a3 b3

a4 b4

a5 b5

1 21.51.25

1.375

1.43751.40625

√2

◮ Approximation de x0 à ε près en temps O(lnε).

Page 186: tous Informatique pour tous Plan généralblog.psi945.fr/public/info-commune/sup/cours-sup-imprimable-python.pdfDichotomie et Newton Méthode d’Euler Bases de données Stocker intelligemment

Recherche d’unsous-mot

Stéphane Gonnord

Plan

Retour sur ladichotomie

Recherche d’unsous-motLe problème

Avec slicing

Sans slicing

Crible d’ÉratosthèneRecherche de tous lesnombres premiers

Le crible

Le(s) problème(s)◮ Rechercher tag dans pouettagada...

◮ Ou truc dans pouettagada...

◮ Ou encore tag dans pouettagadatagaplof...

◮ Voire [1,3,2] dans [12,15,1,3,2,10,1,3,2,42].

◮ Mais quelle misère !

>>> ’tag’ in ’pouettagada’

True

>>> ’truc’ in ’pouettagada’

False

◮ Par contre :

>>> [1,3,2] in [12,15,1,3,2,10,1,3,2,42]

False

OUF !

Page 187: tous Informatique pour tous Plan généralblog.psi945.fr/public/info-commune/sup/cours-sup-imprimable-python.pdfDichotomie et Newton Méthode d’Euler Bases de données Stocker intelligemment

Recherche d’unsous-mot

Stéphane Gonnord

Plan

Retour sur ladichotomie

Recherche d’unsous-motLe problème

Avec slicing

Sans slicing

Crible d’ÉratosthèneRecherche de tous lesnombres premiers

Le crible

Slicing autorisé◮ Rappel :

>>> liste = [10,15,30,40]

>>> liste[1:3]

[15, 30]

>>> chaine = "tagadaplof"

>>> chaine[2:5]

’gad’

◮ Et donc :Entrées : m1,m2

lg1, lg2← |m1| , |m2| # les longueurspour d allant de 0 à lg2− lg1 faire

si m2[d : d + lg1] = m1 alorsRésultat : True

Résultat : False◮ Complexité : au pire |m2|... ou plutôt |m1|× |m2|.

Page 188: tous Informatique pour tous Plan généralblog.psi945.fr/public/info-commune/sup/cours-sup-imprimable-python.pdfDichotomie et Newton Méthode d’Euler Bases de données Stocker intelligemment

Recherche d’unsous-mot

Stéphane Gonnord

Plan

Retour sur ladichotomie

Recherche d’unsous-motLe problème

Avec slicing

Sans slicing

Crible d’ÉratosthèneRecherche de tous lesnombres premiers

Le crible

Sans slicing◮ Le problème : m2[p:p+lg1] == m1?

◮ Vérifier chaque lettre... Et quitter dès qu’il y a unéchec ! (comparer à l’algorithme « englobant »)Entrées : m1,m2,psi p+ |m1|> |m2| alors

Résultat : Falsepour i allant de 0 à |m1|−1 faire

si m2[p+ i] 6= m1[i] alorsRésultat : False

Résultat : True◮ Complexité : |m1| dans le pire des cas.

Page 189: tous Informatique pour tous Plan généralblog.psi945.fr/public/info-commune/sup/cours-sup-imprimable-python.pdfDichotomie et Newton Méthode d’Euler Bases de données Stocker intelligemment

Recherche d’unsous-mot

Stéphane Gonnord

Plan

Retour sur ladichotomie

Recherche d’unsous-motLe problème

Avec slicing

Sans slicing

Crible d’ÉratosthèneRecherche de tous lesnombres premiers

Le crible

Le problème... et une solution◮ On veut compter/déterminer les nombres premiers

majorés par N.

◮ Solution naïve : N√

N divisions euclidiennes.

◮ Avec le crible : N ln lnN... mais de l’ordre de N enespace... Qu’on peut réduire à

√N.

N 102 104 106 108

N√

N 103 106 109 1012

N ln(ln(N))≃ 1,5×102 2,2×104 2,6×106 2,9×108

Page 190: tous Informatique pour tous Plan généralblog.psi945.fr/public/info-commune/sup/cours-sup-imprimable-python.pdfDichotomie et Newton Méthode d’Euler Bases de données Stocker intelligemment

Recherche d’unsous-mot

Stéphane Gonnord

Plan

Retour sur ladichotomie

Recherche d’unsous-motLe problème

Avec slicing

Sans slicing

Crible d’ÉratosthèneRecherche de tous lesnombres premiers

Le crible

La solution naïve◮ 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

◮ Comptons :cpt = 0

for n in range(1001):

if est_premier(n):

cpt += 1

◮ Complexité : au plus N√

N divisions euclidiennes.

Page 191: tous Informatique pour tous Plan généralblog.psi945.fr/public/info-commune/sup/cours-sup-imprimable-python.pdfDichotomie et Newton Méthode d’Euler Bases de données Stocker intelligemment

Recherche d’unsous-mot

Stéphane Gonnord

Plan

Retour sur ladichotomie

Recherche d’unsous-motLe problème

Avec slicing

Sans slicing

Crible d’ÉratosthèneRecherche de tous lesnombres premiers

Le crible

Principe et complexité

0

10

20

30

40

50

60

70

80

90

1

11

21

31

41

51

61

71

81

91

2

12

22

32

42

52

62

72

82

92

3

13

23

33

43

53

63

73

83

93

4

14

24

34

44

54

64

74

84

94

5

15

25

35

45

55

65

75

85

95

6

16

26

36

46

56

66

76

86

96

7

17

27

37

47

57

67

77

87

97

8

18

28

38

48

58

68

78

88

98

9

19

29

39

49

59

69

79

89

99

0

10

20

30

40

50

60

1

11

21

31

41

51

61

2

12

22

32

42

52

62

3

13

23

33

43

53

63

4

14

24

34

44

54

64

5

15

25

35

45

55

65

6

16

26

36

46

56

66

7

17

27

37

47

57

67

8

18

28

38

48

58

68

9

19

29

39

49

59

69

Page 192: tous Informatique pour tous Plan généralblog.psi945.fr/public/info-commune/sup/cours-sup-imprimable-python.pdfDichotomie et Newton Méthode d’Euler Bases de données Stocker intelligemment

Recherche d’unsous-mot

Stéphane Gonnord

Plan

Retour sur ladichotomie

Recherche d’unsous-motLe problème

Avec slicing

Sans slicing

Crible d’ÉratosthèneRecherche de tous lesnombres premiers

Le crible

Algorithme du crible◮ Principe :

◮ 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.

◮ Plus formellement :Entrées : N

T ← [False,False]+ [True]∗ (N−1)pour k allant de 2 à ⌊

√N⌋ faire

si T[k] alors# k est premier : on va « rayer » ses multiplespour i allant de k à ⌊N/k⌋ faire

T [k ∗ i]←False

Résultat : T

Page 193: tous Informatique pour tous Plan généralblog.psi945.fr/public/info-commune/sup/cours-sup-imprimable-python.pdfDichotomie et Newton Méthode d’Euler Bases de données Stocker intelligemment

Recherche d’unsous-mot

Stéphane Gonnord

Plan

Retour sur ladichotomie

Recherche d’unsous-motLe problème

Avec slicing

Sans slicing

Crible d’ÉratosthèneRecherche de tous lesnombres premiers

Le crible

Le code◮ 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

◮ C’est tout ? Ben oui !

◮ 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]

Page 194: tous Informatique pour tous Plan généralblog.psi945.fr/public/info-commune/sup/cours-sup-imprimable-python.pdfDichotomie et Newton Méthode d’Euler Bases de données Stocker intelligemment

Recherche d’unsous-mot

Stéphane Gonnord

Plan

Retour sur ladichotomie

Recherche d’unsous-motLe problème

Avec slicing

Sans slicing

Crible d’ÉratosthèneRecherche de tous lesnombres premiers

Le crible

C’est fini

Merci de votre attention !

Page 195: tous Informatique pour tous Plan généralblog.psi945.fr/public/info-commune/sup/cours-sup-imprimable-python.pdfDichotomie et Newton Méthode d’Euler Bases de données Stocker intelligemment

Complexité desalgorithmes

Stéphane Gonnord

Plan

Ordres de grandeur

CatalogueCalculs de tous les jours

Recherches

Tris

Calculs approchés

MéthodesgénériquesUne boucle

Deux boucles

Plus compliqué...

Dans le détailPreviously

Un tri

Algorithme d’Euclide

Complexité des algorithmes

Stéphane Gonnord

[email protected]

www.mp933.fr

Lycée du parc - Lyon

Vendredi 13 et 20 décembre 2013Lycée du parc - PCSI 841

Page 196: tous Informatique pour tous Plan généralblog.psi945.fr/public/info-commune/sup/cours-sup-imprimable-python.pdfDichotomie et Newton Méthode d’Euler Bases de données Stocker intelligemment

Complexité desalgorithmes

Stéphane Gonnord

Plan

Ordres de grandeur

CatalogueCalculs de tous les jours

Recherches

Tris

Calculs approchés

MéthodesgénériquesUne boucle

Deux boucles

Plus compliqué...

Dans le détailPreviously

Un tri

Algorithme d’Euclide

Plan1. Ordres de grandeur

2. Un catalogue◮ Les calculs de tous les jours ;◮ des recherches ;◮ des tris ;◮ des calculs approchés.

3. Méthodes génériques◮ Une boucles...◮ puis deux.◮ mais aussi...

4. Dans le détail◮ Déjà vu dans les épisodes précédents.◮ Un tri.◮ L’algorithme d’Euclide.

Page 197: tous Informatique pour tous Plan généralblog.psi945.fr/public/info-commune/sup/cours-sup-imprimable-python.pdfDichotomie et Newton Méthode d’Euler Bases de données Stocker intelligemment

Complexité desalgorithmes

Stéphane Gonnord

Plan

Ordres de grandeur

CatalogueCalculs de tous les jours

Recherches

Tris

Calculs approchés

MéthodesgénériquesUne boucle

Deux boucles

Plus compliqué...

Dans le détailPreviously

Un tri

Algorithme d’Euclide

Ordres de grandeur

Rappel : 109 = 230 = une minute = une seconde !

N 102 104 106 108

√N 10 102 103 104

N√

N 103 106 109 1012

N ln(N)≃ 4,6×102 9,2×104 1,4×107 1,8×109

N2 104 108 1012 1016

N3 106 1012 1018 1024

Page 198: tous Informatique pour tous Plan généralblog.psi945.fr/public/info-commune/sup/cours-sup-imprimable-python.pdfDichotomie et Newton Méthode d’Euler Bases de données Stocker intelligemment

Complexité desalgorithmes

Stéphane Gonnord

Plan

Ordres de grandeur

CatalogueCalculs de tous les jours

Recherches

Tris

Calculs approchés

MéthodesgénériquesUne boucle

Deux boucles

Plus compliqué...

Dans le détailPreviously

Un tri

Algorithme d’Euclide

Les calculs de tous les jours◮ Addition sur p décimales/bits : O(p).◮ Multiplications :

◮ O(p2)...◮ ou O(pα) avec α = ln3

ln2 ≃ 1,6...◮ voire O(p lnp).

◮ Division euclidienne : idem.

◮ Calcul de xn : n−1 = n multiplications... ou lnn.

◮ calcul de pgcd, pour p décimales/bits : O(ln3 p)opérations élémentaires... et même O(ln2 p) enfinassant.

◮ Calcul matriciel : tout en n3 (pivot) !

◮ Primalité :√

n(lnn)2... puis (lnn)2 en versionprobabiliste... puis déterministe en (lnn)12 (2002 ;probablement (lnn)6).

Page 199: tous Informatique pour tous Plan généralblog.psi945.fr/public/info-commune/sup/cours-sup-imprimable-python.pdfDichotomie et Newton Méthode d’Euler Bases de données Stocker intelligemment

Complexité desalgorithmes

Stéphane Gonnord

Plan

Ordres de grandeur

CatalogueCalculs de tous les jours

Recherches

Tris

Calculs approchés

MéthodesgénériquesUne boucle

Deux boucles

Plus compliqué...

Dans le détailPreviously

Un tri

Algorithme d’Euclide

Diverses recherches◮ Recherche d’un maximum/minimum :

◮ n−1 = n comparaisons pour l’algorithe naïf...◮ Et combien pour un algorithme «Roland Garros» ?

n−1 aussi !◮ On peut faire mieux ? Ben non ! Mais ce n’est pas si

clair...

◮ Appartenance à...◮ un tableau de taille n : n ou lnn ;◮ d’autres structures de données (arbre, table de

hash...) : lnn si possible !

◮ Un mot m1 dans un mot m2 :◮ |m1|× |m2| en naïf...◮ mais |m1|+ |m2| en finassant (KMP).

Page 200: tous Informatique pour tous Plan généralblog.psi945.fr/public/info-commune/sup/cours-sup-imprimable-python.pdfDichotomie et Newton Méthode d’Euler Bases de données Stocker intelligemment

Complexité desalgorithmes

Stéphane Gonnord

Plan

Ordres de grandeur

CatalogueCalculs de tous les jours

Recherches

Tris

Calculs approchés

MéthodesgénériquesUne boucle

Deux boucles

Plus compliqué...

Dans le détailPreviously

Un tri

Algorithme d’Euclide

Algorithme de tri◮ Les basiques (sélection - dont bulles - ou insertion).

Exécution en temps n2

◮ Un peu mieux : tri fusion (dichotomique) et rapide

Exécution en temps n. ln(n) (moyenne)

donc utilisable pour n = 106. Mais pire des cas en n2

pour le tri rapide.

◮ Plus exotiques : tri par tas, tri shell, ...

Exécution en temps n. ln(n)... ou n.p sur p décimales

Page 201: tous Informatique pour tous Plan généralblog.psi945.fr/public/info-commune/sup/cours-sup-imprimable-python.pdfDichotomie et Newton Méthode d’Euler Bases de données Stocker intelligemment

Complexité desalgorithmes

Stéphane Gonnord

Plan

Ordres de grandeur

CatalogueCalculs de tous les jours

Recherches

Tris

Calculs approchés

MéthodesgénériquesUne boucle

Deux boucles

Plus compliqué...

Dans le détailPreviously

Un tri

Algorithme d’Euclide

Calculs approchés◮ Résolution numérique de f (x) = 0 :

◮ n décimales en O(n) évaluations (dichotomie) : bien !◮ n décimales en O(lnn) évaluations (Newton,

sécante) : encore mieux !

◮ Calcul approché d’une intégrale :◮ Avec n évaluations, approximation à K

navec des

rectangles...◮ mais K

n2 avec des trapèzes...◮ et même K

n4 avec des paraboles.

◮ Résolution approchée d’une équation différentielle :◮ Approximation en 1

navec n itérations (Euler)...

◮ ou 1n2 (Heun)...

◮ ou même 1n4 (RK4).

Page 202: tous Informatique pour tous Plan généralblog.psi945.fr/public/info-commune/sup/cours-sup-imprimable-python.pdfDichotomie et Newton Méthode d’Euler Bases de données Stocker intelligemment

Complexité desalgorithmes

Stéphane Gonnord

Plan

Ordres de grandeur

CatalogueCalculs de tous les jours

Recherches

Tris

Calculs approchés

MéthodesgénériquesUne boucle

Deux boucles

Plus compliqué...

Dans le détailPreviously

Un tri

Algorithme d’Euclide

HS - juste pour frimer

σ0 =a σ1... σn−1 σn =b

y=f(x)

∫ b

a

f

Rn (rectangles)

σ0 =a σ1... σn−1 σn =b

y=f(x)

∫ b

a

f

Tn (trapèzes)

σ0 =a σ1... σn−1 σn =b

y=f(x)

∫ b

a

f

Pn (paraboles)

Page 203: tous Informatique pour tous Plan généralblog.psi945.fr/public/info-commune/sup/cours-sup-imprimable-python.pdfDichotomie et Newton Méthode d’Euler Bases de données Stocker intelligemment

Complexité desalgorithmes

Stéphane Gonnord

Plan

Ordres de grandeur

CatalogueCalculs de tous les jours

Recherches

Tris

Calculs approchés

MéthodesgénériquesUne boucle

Deux boucles

Plus compliqué...

Dans le détailPreviously

Un tri

Algorithme d’Euclide

Une boucle◮ Situation typique :

for i in <un range, ou un ensemble, une liste>:

<faire des

trucs...>

◮ Complexité : autant de trucs qu’il y en a à faire !◮ Exemples :

◮ for i in range(10):

print("Allo, non mais allo numéro "+str(i))

◮ u = 0

for _ in range(100):

u = cos(u)

◮ maxi = t[0]

for x in t:

if x > maxi:

maxi = t

Page 204: tous Informatique pour tous Plan généralblog.psi945.fr/public/info-commune/sup/cours-sup-imprimable-python.pdfDichotomie et Newton Méthode d’Euler Bases de données Stocker intelligemment

Complexité desalgorithmes

Stéphane Gonnord

Plan

Ordres de grandeur

CatalogueCalculs de tous les jours

Recherches

Tris

Calculs approchés

MéthodesgénériquesUne boucle

Deux boucles

Plus compliqué...

Dans le détailPreviously

Un tri

Algorithme d’Euclide

Cas des sorties prématurées◮ break (sortie de boucle ; alternative au return/while)def appartient(x, t):

est_present = False

for y in t:

print(y)

if y == x:

est_present = True

break

print("paf")

return est_present◮ Ce qui donne :

>>> appartient(42, [12, 42, 1515])

12

42

paf

True

◮ Pire des cas, meileur des cas, cas moyen...

Page 205: tous Informatique pour tous Plan généralblog.psi945.fr/public/info-commune/sup/cours-sup-imprimable-python.pdfDichotomie et Newton Méthode d’Euler Bases de données Stocker intelligemment

Complexité desalgorithmes

Stéphane Gonnord

Plan

Ordres de grandeur

CatalogueCalculs de tous les jours

Recherches

Tris

Calculs approchés

MéthodesgénériquesUne boucle

Deux boucles

Plus compliqué...

Dans le détailPreviously

Un tri

Algorithme d’Euclide

Deux boucles◮ Cas générique :

for x in foo:

for y in bar:

<faire_tel_truc>

◮ Si foo et bar sont constant : |foo|× |bar | exécutionsde tel_truc

◮ Cas typique ou bar dépend de foo :

for i in range(1, 1+n):

for j in range(i):

<whatever>

◮ Complexité : 1+2+ · · ·+n exécutions de whatever,

soit n(n+1)2 = n2

2 = n2 ! Terme non standard parfoisrencontré : « complexité triangulaire ».

Page 206: tous Informatique pour tous Plan généralblog.psi945.fr/public/info-commune/sup/cours-sup-imprimable-python.pdfDichotomie et Newton Méthode d’Euler Bases de données Stocker intelligemment

Complexité desalgorithmes

Stéphane Gonnord

Plan

Ordres de grandeur

CatalogueCalculs de tous les jours

Recherches

Tris

Calculs approchés

MéthodesgénériquesUne boucle

Deux boucles

Plus compliqué...

Dans le détailPreviously

Un tri

Algorithme d’Euclide

Exercice

Évaluer le nombre d’exécutions de pif, paf et pouf lorsde l’exécution des trois programmes suivants :

◮ for i in range(n):

pif

for j in range(n):

paf

for k in range(n):

pouf

◮ for i in range(n):

pif

for j in range(n):

paf

for k in range(n):

pouf

◮ for i in range(n):

pif

for j in range(n):

paf

for k in range(n):

pouf

Hum... bon exercice de DS, vous ne trouvez pas ?

Page 207: tous Informatique pour tous Plan généralblog.psi945.fr/public/info-commune/sup/cours-sup-imprimable-python.pdfDichotomie et Newton Méthode d’Euler Bases de données Stocker intelligemment

Complexité desalgorithmes

Stéphane Gonnord

Plan

Ordres de grandeur

CatalogueCalculs de tous les jours

Recherches

Tris

Calculs approchés

MéthodesgénériquesUne boucle

Deux boucles

Plus compliqué...

Dans le détailPreviously

Un tri

Algorithme d’Euclide

Les boucles while◮ Cas générique :

while <condition qui porte sur un truc>:

faire des machins

◮ Si les machins ne touchent pas aux trucs, c’est(probablement) la catastrophe... sauf en cas de sortievia un break

◮ Complexité et terminaison fortement liées.◮ Exemples de couples conditions/actions :

◮ while n>0 n = n-1

◮ while n>0 n = n//2

◮ while n<M n = n*2

◮ while g<d g++ ou d-- ou d-g est divisé par 2◮ while n>0 n = n//2 ou n = 3*n+1

Page 208: tous Informatique pour tous Plan généralblog.psi945.fr/public/info-commune/sup/cours-sup-imprimable-python.pdfDichotomie et Newton Méthode d’Euler Bases de données Stocker intelligemment

Complexité desalgorithmes

Stéphane Gonnord

Plan

Ordres de grandeur

CatalogueCalculs de tous les jours

Recherches

Tris

Calculs approchés

MéthodesgénériquesUne boucle

Deux boucles

Plus compliqué...

Dans le détailPreviously

Un tri

Algorithme d’Euclide

Algorithmes déjà rencontrés◮ Calcul de xn.

r ← x

pour i allant de 1 à n fairer ← r × x

Résultat : r

◮ Calcul de n! en n.r ← 1pour i allant de 2 à n faire

r ← r × i

Résultat : r

◮ Déterminer le plus petit entier n tel que n!≥ 1010

n← 1f ← 1 # f vaudra n! à (presque) tout momenttant que f < 1010 faire

n← n+1f ← f ×n

Résultat : n

Page 209: tous Informatique pour tous Plan généralblog.psi945.fr/public/info-commune/sup/cours-sup-imprimable-python.pdfDichotomie et Newton Méthode d’Euler Bases de données Stocker intelligemment

Complexité desalgorithmes

Stéphane Gonnord

Plan

Ordres de grandeur

CatalogueCalculs de tous les jours

Recherches

Tris

Calculs approchés

MéthodesgénériquesUne boucle

Deux boucles

Plus compliqué...

Dans le détailPreviously

Un tri

Algorithme d’Euclide

Algorithmes/programmes déjà rencontrés◮ Addition de deux entiers (tableaux de décimales)

def somme(t1, t2): # on les suppose de même longueur

resultat, retenue = [], 0

for i in range(len(t1)):

somme = t1[i] + t2[i] + retenue

resultat.append(somme % 10)

retenue = somme // 10

return resultat

« C’est linéaire »◮ Multiplication de deux entiers :

◮ faire le produit de t1 par chaque élément de t2 ;◮ additionner les listes obtenues (avec décalages, et

éventuellement à la volée).◮ Il y a |t1|× |t2| multiplications/additions.

Page 210: tous Informatique pour tous Plan généralblog.psi945.fr/public/info-commune/sup/cours-sup-imprimable-python.pdfDichotomie et Newton Méthode d’Euler Bases de données Stocker intelligemment

Complexité desalgorithmes

Stéphane Gonnord

Plan

Ordres de grandeur

CatalogueCalculs de tous les jours

Recherches

Tris

Calculs approchés

MéthodesgénériquesUne boucle

Deux boucles

Plus compliqué...

Dans le détailPreviously

Un tri

Algorithme d’Euclide

Algorithmes/programmes déjà rencontrés◮ Calcul de 2-valuation

cpt = 0

while n % 2 == 0:

cpt = cpt+1

n = n // 2

◮ Calcul de xn (exponentiation rapide itérative)

def expo_rapide(x, n0):

r, p, n = 1, x, n0

while n > 0:

if n%2 == 1:

r = r * p

p = p * p

n = n // 2

return r

Page 211: tous Informatique pour tous Plan généralblog.psi945.fr/public/info-commune/sup/cours-sup-imprimable-python.pdfDichotomie et Newton Méthode d’Euler Bases de données Stocker intelligemment

Complexité desalgorithmes

Stéphane Gonnord

Plan

Ordres de grandeur

CatalogueCalculs de tous les jours

Recherches

Tris

Calculs approchés

MéthodesgénériquesUne boucle

Deux boucles

Plus compliqué...

Dans le détailPreviously

Un tri

Algorithme d’Euclide

Algorithmes/programmes déjà rencontrés◮ Appartenance à un tableau

def appartient(x, t):

for y in t:

if y == x:

return True

return False

◮ Positionsdef positions(x, t):

pos = []

for i in range(len(t)):

if t[i] == x:

pos.append(i)

return pos

◮ Syracusewhile n>1:

if n%2 ==0:

n = n/2

else:

n = 3*n+1

Page 212: tous Informatique pour tous Plan généralblog.psi945.fr/public/info-commune/sup/cours-sup-imprimable-python.pdfDichotomie et Newton Méthode d’Euler Bases de données Stocker intelligemment

Complexité desalgorithmes

Stéphane Gonnord

Plan

Ordres de grandeur

CatalogueCalculs de tous les jours

Recherches

Tris

Calculs approchés

MéthodesgénériquesUne boucle

Deux boucles

Plus compliqué...

Dans le détailPreviously

Un tri

Algorithme d’Euclide

Algorithmes/programmes déjà rencontrés◮ Dichotomie

def recherche_dichotomique(b, t):

d, f = 0, len(t)-1

while f > d:

m = (d+f+1)//2

if t[m] == b:

return True

if t[m] >b:

f = m-1

else:

d = m+1

if d == f and t[d] == b:

return True

return False

◮ Cribledef 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

Page 213: tous Informatique pour tous Plan généralblog.psi945.fr/public/info-commune/sup/cours-sup-imprimable-python.pdfDichotomie et Newton Méthode d’Euler Bases de données Stocker intelligemment

Complexité desalgorithmes

Stéphane Gonnord

Plan

Ordres de grandeur

CatalogueCalculs de tous les jours

Recherches

Tris

Calculs approchés

MéthodesgénériquesUne boucle

Deux boucles

Plus compliqué...

Dans le détailPreviously

Un tri

Algorithme d’Euclide

Un tri par sélection◮ Algorithme principal :

Entrées : T

pour j allant de n−1 à 1 faireTrouver un indice i0 tel que T[i0] soit maximal dansT[0:j+1] # donc jusqu’à j inclus...Échanger T[i0] et T[j]

Résultat : T

◮ Algorithme secondaire (trouver l’indice...)Entrées : T , j

p← 0 # la position du maximum provisoire pour i allant

de 1 à j faire

si T [i]> T [p] alorsp← i

Résultat : p

Page 214: tous Informatique pour tous Plan généralblog.psi945.fr/public/info-commune/sup/cours-sup-imprimable-python.pdfDichotomie et Newton Méthode d’Euler Bases de données Stocker intelligemment

Complexité desalgorithmes

Stéphane Gonnord

Plan

Ordres de grandeur

CatalogueCalculs de tous les jours

Recherches

Tris

Calculs approchés

MéthodesgénériquesUne boucle

Deux boucles

Plus compliqué...

Dans le détailPreviously

Un tri

Algorithme d’Euclide

Un tri par sélection◮ Code principal :

def trier(t): # Destructif : t est modifié

for j in range(len(t)-1, 0, -1):

i0 = pos_maxi_up_to(t, j)

t[j], t[i0] = t[i0], t[j]

◮ Code secondaire (trouver l’indice...)

def pos_maxi_up_to(t, j): # jusqu’à j inclus

pmp = 0

for i in range(1, 1+j):

if t[i] > t[pmp]:

pmp = i

return pmp

◮ Complexité ? Triangulaire !

Page 215: tous Informatique pour tous Plan généralblog.psi945.fr/public/info-commune/sup/cours-sup-imprimable-python.pdfDichotomie et Newton Méthode d’Euler Bases de données Stocker intelligemment

Complexité desalgorithmes

Stéphane Gonnord

Plan

Ordres de grandeur

CatalogueCalculs de tous les jours

Recherches

Tris

Calculs approchés

MéthodesgénériquesUne boucle

Deux boucles

Plus compliqué...

Dans le détailPreviously

Un tri

Algorithme d’Euclide

L’algorithme d’Euclide◮ pgcd(a,b) = p

γ11 ...p

γk

k ...◮ Exemple :

pgcd(1386,840)= pgcd(2×32×7×11,23×3×5×7)

= 2×3×7 = 42

◮ Nécessite d’avoir la factorisation en nombrespremiers (hard)

◮ Algorithme d’Euclide :

a≥ b > 0 =⇒ pgcd(a,b) = pgcd(b,a % b)

◮ Exemple :

pgcd(1386,840) = pgcd(840,546) = pgcd(546,294)

= pgcd(294,252)= pgcd(252,42)= pgcd(42,0)= 42

Page 216: tous Informatique pour tous Plan généralblog.psi945.fr/public/info-commune/sup/cours-sup-imprimable-python.pdfDichotomie et Newton Méthode d’Euler Bases de données Stocker intelligemment

Complexité desalgorithmes

Stéphane Gonnord

Plan

Ordres de grandeur

CatalogueCalculs de tous les jours

Recherches

Tris

Calculs approchés

MéthodesgénériquesUne boucle

Deux boucles

Plus compliqué...

Dans le détailPreviously

Un tri

Algorithme d’Euclide

L’algorithme d’Euclide◮ Algorithme :

Entrées : a0,b0

(a,b)← (max(a0,b0),min(a0,b0)) tant que b > 0 faire

(a,b)← (b,a%b)

Résultat : a

◮ Code :

def euclide(a0, b0):

a, b = max(a0,b0), min(a0,b0)

while b>0:

a, b = b, a%b

return a

◮ Complexité : si a,b ≤ 2n, alors il y aura :◮ au plus n divisions euclidiennes, donc O(n3)

opérations élémentaires.◮ au plus 2n opérations l← l−αr dans les divisions

euclidiennes, donc O(n2) opérations élémentaires !

Page 217: tous Informatique pour tous Plan généralblog.psi945.fr/public/info-commune/sup/cours-sup-imprimable-python.pdfDichotomie et Newton Méthode d’Euler Bases de données Stocker intelligemment

Complexité desalgorithmes

Stéphane Gonnord

Plan

Ordres de grandeur

CatalogueCalculs de tous les jours

Recherches

Tris

Calculs approchés

MéthodesgénériquesUne boucle

Deux boucles

Plus compliqué...

Dans le détailPreviously

Un tri

Algorithme d’Euclide

C’est fini

Merci de votre attention !

Page 218: tous Informatique pour tous Plan généralblog.psi945.fr/public/info-commune/sup/cours-sup-imprimable-python.pdfDichotomie et Newton Méthode d’Euler Bases de données Stocker intelligemment

Complexité desalgorithmes

Stéphane Gonnord

Plan

Ordres de grandeur

CatalogueCalculs de tous les jours

Recherches

Tris

Calculs approchés

MéthodesgénériquesUne boucle

Deux boucles

Plus compliqué...

Dans le détailPreviously

Un tri

Algorithme d’Euclide

Désolé, mais...

Impossible de passer à côté !

Page 219: tous Informatique pour tous Plan généralblog.psi945.fr/public/info-commune/sup/cours-sup-imprimable-python.pdfDichotomie et Newton Méthode d’Euler Bases de données Stocker intelligemment

Un peu de récursivité

Stéphane Gonnord

Plan

La fonction factorielle

Itératif

Récursif

Exécution

Principe général

Des exemples

Relations simples

Relations plus complexes

Encore plus compliqué

Exercices

Un peu de récursivitéÉcrire simplement des choses simples

Stéphane Gonnord

[email protected]

www.mp933.fr

Lycée du parc - Lyon

Vendredi 10 janvier 2014 - lycée du parc

Page 220: tous Informatique pour tous Plan généralblog.psi945.fr/public/info-commune/sup/cours-sup-imprimable-python.pdfDichotomie et Newton Méthode d’Euler Bases de données Stocker intelligemment

Un peu de récursivité

Stéphane Gonnord

Plan

La fonction factorielle

Itératif

Récursif

Exécution

Principe général

Des exemples

Relations simples

Relations plus complexes

Encore plus compliqué

Exercices

Plan

1. Le cas de la fonction factorielle.

◮ Itératif

◮ Récursif

◮ Exécution !

2. Principe vaguement général

3. Des exemples plus ou moins standards :

◮ passe à ton voisin de gauche ;

◮ passe à un ou plusieurs voisins éloigné(s) ;

◮ plus compliqué.

4. Exercices

Page 221: tous Informatique pour tous Plan généralblog.psi945.fr/public/info-commune/sup/cours-sup-imprimable-python.pdfDichotomie et Newton Méthode d’Euler Bases de données Stocker intelligemment

Un peu de récursivité

Stéphane Gonnord

Plan

La fonction factorielle

Itératif

Récursif

Exécution

Principe général

Des exemples

Relations simples

Relations plus complexes

Encore plus compliqué

Exercices

Point de vue itératif

◮ 5! =

(1×2)︸ ︷︷ ︸

2

×3

︸ ︷︷ ︸

6

×4

︸ ︷︷ ︸

24

×5 = 120

◮ Algorithme :

Entrées : nres← 1

pour i de 2 à n faireres← res× i

Résultat : res◮ def facto_it(n):

res = 1

for i in range(2, 1+n):

res = res * i

return res

Page 222: tous Informatique pour tous Plan généralblog.psi945.fr/public/info-commune/sup/cours-sup-imprimable-python.pdfDichotomie et Newton Méthode d’Euler Bases de données Stocker intelligemment

Un peu de récursivité

Stéphane Gonnord

Plan

La fonction factorielle

Itératif

Récursif

Exécution

Principe général

Des exemples

Relations simples

Relations plus complexes

Encore plus compliqué

Exercices

Point de vue récursif

◮ 5! = 5×4! Je demande 4! à mon voisin et je

multiplie le résultat par 5 avant de le renvoyer.

◮ Algorithme :

Entrées : nsi n = 0 alors

Résultat : 1

sinon

Résultat : n×F(n−1)

◮ Programme :

def facto_rec(n):

if n == 0:

return 1

else:

return n * facto_rec(n-1)

◮ Complexité : inchangée.

Page 223: tous Informatique pour tous Plan généralblog.psi945.fr/public/info-commune/sup/cours-sup-imprimable-python.pdfDichotomie et Newton Méthode d’Euler Bases de données Stocker intelligemment

Un peu de récursivité

Stéphane Gonnord

Plan

La fonction factorielle

Itératif

Récursif

Exécution

Principe général

Des exemples

Relations simples

Relations plus complexes

Encore plus compliqué

Exercices

Trace de l’exécution

Itératif en maple (même programme) :

> facto_it(5);

{--> enter , facto_it, , args = , 5

res := 1

res := 2

res := 6

res := 24

res := 120

<-- exit , facto_it, (now at top level, ) = , 120, }

120

Page 224: tous Informatique pour tous Plan généralblog.psi945.fr/public/info-commune/sup/cours-sup-imprimable-python.pdfDichotomie et Newton Méthode d’Euler Bases de données Stocker intelligemment

Un peu de récursivité

Stéphane Gonnord

Plan

La fonction factorielle

Itératif

Récursif

Exécution

Principe général

Des exemples

Relations simples

Relations plus complexes

Encore plus compliqué

Exercices

Passe à ton voisinRécursif en maple (même programme) :

> facto_rec(5)

{--> enter , facto_rec, , args = , 5

{--> enter , facto_rec, , args = , 4

{--> enter , facto_rec, , args = , 3

{--> enter , facto_rec, , args = , 2

{--> enter , facto_rec, , args = , 1

{--> enter , facto_rec, , args = , 0

1

<-- exit , facto_rec, (now in , facto_rec, ) = , 1, }

1

<-- exit , facto_rec, (now in , facto_rec, ) = , 1, }

2

<-- exit , facto_rec, (now in , facto_rec, ) = , 2, }

6

<-- exit , facto_rec, (now in , facto_rec, ) = , 6, }

24

<-- exit , facto_rec, (now in , facto_rec, ) = , 24, }

120

<-- exit , facto_rec, (now at top level, ) = , 120, }

120

Page 225: tous Informatique pour tous Plan généralblog.psi945.fr/public/info-commune/sup/cours-sup-imprimable-python.pdfDichotomie et Newton Méthode d’Euler Bases de données Stocker intelligemment

Un peu de récursivité

Stéphane Gonnord

Plan

La fonction factorielle

Itératif

Récursif

Exécution

Principe général

Des exemples

Relations simples

Relations plus complexes

Encore plus compliqué

Exercices

Des relations de récurrence simples

u(n) =

{

b0 si n = 0

Φ(n,u(n−1)) si n > 0

◮ Factorielle : n! =

{

1 si n = 0

n× (n−1)! si n > 0

b0 = 1 Φ(a,b) = a×b

◮ Exponentiation : 42n =

{

1 si n = 0

42×42n−1si n > 0

b0 = 1 Φ(a,b) = 42×b

Page 226: tous Informatique pour tous Plan généralblog.psi945.fr/public/info-commune/sup/cours-sup-imprimable-python.pdfDichotomie et Newton Méthode d’Euler Bases de données Stocker intelligemment

Un peu de récursivité

Stéphane Gonnord

Plan

La fonction factorielle

Itératif

Récursif

Exécution

Principe général

Des exemples

Relations simples

Relations plus complexes

Encore plus compliqué

Exercices

Des relations plus complexes

F(x) =

{

ϕ0(x) si x ∈ B0

Φ(x ,F(x1), ...,F(xk)) sinon

Avec x1, ...,xk « strictement plus petits » que x (pas

forcément entiers).

◮ Exponentiation rapide pour calculer F(n) = yn :

F(n) =

{

1 si n = 0

Calculé à l’aide de yn//2sinon

◮ Tri fusion d’un tableau T :

F(T )=

{

T si |T | ≤ 1

Calculé à l’aide de F(T ′) et F(T ′′) sinon

Page 227: tous Informatique pour tous Plan généralblog.psi945.fr/public/info-commune/sup/cours-sup-imprimable-python.pdfDichotomie et Newton Méthode d’Euler Bases de données Stocker intelligemment

Un peu de récursivité

Stéphane Gonnord

Plan

La fonction factorielle

Itératif

Récursif

Exécution

Principe général

Des exemples

Relations simples

Relations plus complexes

Encore plus compliqué

Exercices

Le voisin de gauche

◮ n!, an, un+1 = cos(un)...

◮ Facile à écrire... mais à éviter si n dépasse quelques

centaines/milliers.

◮ Il faut savoir l’écrire aussi en itératif.

◮ Complexité linéaire en itératif ou récursif.

◮ Attention :

un+1 = (n−2)un +n2−1...

def u(n):

if n == 0:

return <whatever>

return (n-3)*u(n-1)+(n-1)^2-1

Page 228: tous Informatique pour tous Plan généralblog.psi945.fr/public/info-commune/sup/cours-sup-imprimable-python.pdfDichotomie et Newton Méthode d’Euler Bases de données Stocker intelligemment

Un peu de récursivité

Stéphane Gonnord

Plan

La fonction factorielle

Itératif

Récursif

Exécution

Principe général

Des exemples

Relations simples

Relations plus complexes

Encore plus compliqué

Exercices

Tours de Hanoï

◮ Le problème :

◮ Le code :

def hanoi(n, a, b):

c = 6-(a+b) # le piquet intermédiaire

if n > 0:

hanoi(n-1, a, c)

print("Déplacer une pièce de "+str(a)+" vers "\

+str(b))

hanoi(n-1, c, b)

Page 229: tous Informatique pour tous Plan généralblog.psi945.fr/public/info-commune/sup/cours-sup-imprimable-python.pdfDichotomie et Newton Méthode d’Euler Bases de données Stocker intelligemment

Un peu de récursivité

Stéphane Gonnord

Plan

La fonction factorielle

Itératif

Récursif

Exécution

Principe général

Des exemples

Relations simples

Relations plus complexes

Encore plus compliqué

Exercices

Tours de Hanoï : le résultat

>>> hanoi(4, 1, 3)

Déplacer une pièce de 1 vers 2

Déplacer une pièce de 1 vers 3

Déplacer une pièce de 2 vers 3

Déplacer une pièce de 1 vers 2

Déplacer une pièce de 3 vers 1

Déplacer une pièce de 3 vers 2

Déplacer une pièce de 1 vers 2

Déplacer une pièce de 1 vers 3

Déplacer une pièce de 2 vers 3

Déplacer une pièce de 2 vers 1

Déplacer une pièce de 3 vers 1

Déplacer une pièce de 2 vers 3

Déplacer une pièce de 1 vers 2

Déplacer une pièce de 1 vers 3

Déplacer une pièce de 2 vers 3

Page 230: tous Informatique pour tous Plan généralblog.psi945.fr/public/info-commune/sup/cours-sup-imprimable-python.pdfDichotomie et Newton Méthode d’Euler Bases de données Stocker intelligemment

Un peu de récursivité

Stéphane Gonnord

Plan

La fonction factorielle

Itératif

Récursif

Exécution

Principe général

Des exemples

Relations simples

Relations plus complexes

Encore plus compliqué

Exercices

Tours de Hanoï : le résultat en plus joli !

Page 231: tous Informatique pour tous Plan généralblog.psi945.fr/public/info-commune/sup/cours-sup-imprimable-python.pdfDichotomie et Newton Méthode d’Euler Bases de données Stocker intelligemment

Un peu de récursivité

Stéphane Gonnord

Plan

La fonction factorielle

Itératif

Récursif

Exécution

Principe général

Des exemples

Relations simples

Relations plus complexes

Encore plus compliqué

Exercices

Plus complexe : appel en n/2

◮ xn =

{

1 si n = 0

xn%2× (xn//2)2sinon

Complexité : lnn mutiplications ; facile à écrire.

◮ Tri fusion :

◮ Trier récursivement les deux moitiés du tableau.

◮ Fusionner ces deux moitiés triées.

Complexité : n lnn.

◮ Tri rapide :

◮ Préparer finement le tableau, en le cassant en deux

morceaux...

◮ et trier récursivement ces deux morceaux.

Complexité : n2 dans le pire des cas... et n lnn en

moyenne.

Page 232: tous Informatique pour tous Plan généralblog.psi945.fr/public/info-commune/sup/cours-sup-imprimable-python.pdfDichotomie et Newton Méthode d’Euler Bases de données Stocker intelligemment

Un peu de récursivité

Stéphane Gonnord

Plan

La fonction factorielle

Itératif

Récursif

Exécution

Principe général

Des exemples

Relations simples

Relations plus complexes

Encore plus compliqué

Exercices

Plus compliqué... ou moins pertinent

Dans les deux premiers exemples, le calcul récursif est en

fait à éviter !

◮ fn =

{

n si n ≤ 1

fn−1 + fn−2 sinon

(nk

)=

{

1 si n = 0 ou k = 0 ou k = n(n−1

k−1

)+(n−1

k

)sinon

◮ Ack(n,m) =

m+1 si m = 0

Ack(n−1,1) si n > 0 et m = 0

Ack(n−1,Ack(n,m−1)) sinon

◮ Suite de Syracuse : terminaison non assurée !

Page 233: tous Informatique pour tous Plan généralblog.psi945.fr/public/info-commune/sup/cours-sup-imprimable-python.pdfDichotomie et Newton Méthode d’Euler Bases de données Stocker intelligemment

Un peu de récursivité

Stéphane Gonnord

Plan

La fonction factorielle

Itératif

Récursif

Exécution

Principe général

Des exemples

Relations simples

Relations plus complexes

Encore plus compliqué

Exercices

Exercices

◮ Comment programmer récursivement le calcul de un,

avec u0 donné, et la relation un+1 =12(un +2/un) ?

◮ Comment calculer récursivement les coefficients de

Bezout de deux entiers naturels a et b (u et v tels

que au+bv = pgcd(a,b) ) ?

◮ Complexité du calcul de(

2nn

):

◮ en récursif bête...

◮ avec un calcul récursif des lignes.

◮ Concevoir un tri récursif, où l’on insère le dernier

élément du tableau dans ce qui précède... et qui a

été trié. Complexité ?

◮ Prouver la terminaison dans le calcul naïf de

Ack(n,m).

◮ Comment résoudre le problème du serpent-cube ?

Page 234: tous Informatique pour tous Plan généralblog.psi945.fr/public/info-commune/sup/cours-sup-imprimable-python.pdfDichotomie et Newton Méthode d’Euler Bases de données Stocker intelligemment

Un peu de récursivité

Stéphane Gonnord

Plan

La fonction factorielle

Itératif

Récursif

Exécution

Principe général

Des exemples

Relations simples

Relations plus complexes

Encore plus compliqué

Exercices

C’est fini

Merci de votre attention !

Page 235: tous Informatique pour tous Plan généralblog.psi945.fr/public/info-commune/sup/cours-sup-imprimable-python.pdfDichotomie et Newton Méthode d’Euler Bases de données Stocker intelligemment

Représentationmachine des entiers

et (de quelques)réels

Stéphane Gonnord

Plan

Décomposition enbase b

La base dix

La base 2

Quelques exercices

Petits et grandsentiers en machine32 vs. 64 bits

Et au delà

FlottantsDes nombres à virgules

Rationnels, décimaux etdyadiques

Quelques exercices

Représentationmachine des flottantsDes phénomènes inévitables

La norme IEE754

Quelques exercices

Représentation machine des entierset (de quelques) réels

Stéphane Gonnord

[email protected]

www.mp933.fr

Lycée du parc - Lyon

Vendredi 24 et 31 janvier 2014 - Lycée du parc

Page 236: tous Informatique pour tous Plan généralblog.psi945.fr/public/info-commune/sup/cours-sup-imprimable-python.pdfDichotomie et Newton Méthode d’Euler Bases de données Stocker intelligemment

Représentationmachine des entiers

et (de quelques)réels

Stéphane Gonnord

Plan

Décomposition enbase b

La base dix

La base 2

Quelques exercices

Petits et grandsentiers en machine32 vs. 64 bits

Et au delà

FlottantsDes nombres à virgules

Rationnels, décimaux etdyadiques

Quelques exercices

Représentationmachine des flottantsDes phénomènes inévitables

La norme IEE754

Quelques exercices

Plan1. Décomposition des entiers en base b :

◮ la base 10 ;◮ la base 2 ;◮ quelques exercices.

2. Petits et grands entiers en machine◮ 32 vs. 64 bits ;◮ et au delà.

3. Quelques rationnels◮ Décimaux, dyadiques.◮ Flottant = mantisse + exposant

4. Les « nombres à virgule » en machine◮ Des phénomènes un peu pénibles... et inévitables.◮ Principe de la représentation machine.◮ Autour de la norme IEEE754.

Page 237: tous Informatique pour tous Plan généralblog.psi945.fr/public/info-commune/sup/cours-sup-imprimable-python.pdfDichotomie et Newton Méthode d’Euler Bases de données Stocker intelligemment

Représentationmachine des entiers

et (de quelques)réels

Stéphane Gonnord

Plan

Décomposition enbase b

La base dix

La base 2

Quelques exercices

Petits et grandsentiers en machine32 vs. 64 bits

Et au delà

FlottantsDes nombres à virgules

Rationnels, décimaux etdyadiques

Quelques exercices

Représentationmachine des flottantsDes phénomènes inévitables

La norme IEE754

Quelques exercices

À 10 balles

Il existe 10 sortes de personnes :

◮ ceux qui comptent en binaire ;

◮ et les autres.

Page 238: tous Informatique pour tous Plan généralblog.psi945.fr/public/info-commune/sup/cours-sup-imprimable-python.pdfDichotomie et Newton Méthode d’Euler Bases de données Stocker intelligemment

Représentationmachine des entiers

et (de quelques)réels

Stéphane Gonnord

Plan

Décomposition enbase b

La base dix

La base 2

Quelques exercices

Petits et grandsentiers en machine32 vs. 64 bits

Et au delà

FlottantsDes nombres à virgules

Rationnels, décimaux etdyadiques

Quelques exercices

Représentationmachine des flottantsDes phénomènes inévitables

La norme IEE754

Quelques exercices

La base 10◮ Quel entier représente (le « mot ») 342 ?

342→ 3×100+4×10+2

◮ Et en base b ? (b > 4 ; par défaut, c’est 10)

342→ 3×b2 +4×b+2

◮ D’une manière générale :

bd−1...b1b0→ b0 +b1×10+ · · ·+bd−1×10d−1

◮ Est-ce que tout entier peut se décomposer ainsi ? defaçon unique ?

Page 239: tous Informatique pour tous Plan généralblog.psi945.fr/public/info-commune/sup/cours-sup-imprimable-python.pdfDichotomie et Newton Méthode d’Euler Bases de données Stocker intelligemment

Représentationmachine des entiers

et (de quelques)réels

Stéphane Gonnord

Plan

Décomposition enbase b

La base dix

La base 2

Quelques exercices

Petits et grandsentiers en machine32 vs. 64 bits

Et au delà

FlottantsDes nombres à virgules

Rationnels, décimaux etdyadiques

Quelques exercices

Représentationmachine des flottantsDes phénomènes inévitables

La norme IEE754

Quelques exercices

Décomposition en base 10◮ Théorème : si on fixe une base b ≥ 2, alors tout

entier naturel n ∈ N se décompose sous la formeα0 +α1×b+ · · ·+αk ×bk , avec 0≤ αi < b pourtout i . De plus, si n > 0 et on impose αk > 0, alorscette écriture est unique.

◮ Preuves constructives :◮ par récurrence simple (décomposition de 1789 à

l’aide de celle de 1788) ;◮ par récurrence forte (décomposition de 1789 à l’aide

de celle de 178... ou 789).

◮ Calcul effectif d’une décomposition :◮ en trouvant la décimale de poids fort (1 pour 1789)

puis en continuant sur le reste (789) ;◮ en trouvant celle de poids faible (9 pour 1789) et en

continuant sur le reste (178).

Page 240: tous Informatique pour tous Plan généralblog.psi945.fr/public/info-commune/sup/cours-sup-imprimable-python.pdfDichotomie et Newton Méthode d’Euler Bases de données Stocker intelligemment

Représentationmachine des entiers

et (de quelques)réels

Stéphane Gonnord

Plan

Décomposition enbase b

La base dix

La base 2

Quelques exercices

Petits et grandsentiers en machine32 vs. 64 bits

Et au delà

FlottantsDes nombres à virgules

Rationnels, décimaux etdyadiques

Quelques exercices

Représentationmachine des flottantsDes phénomènes inévitables

La norme IEE754

Quelques exercices

Calcul effectif de la décomposition◮ But : 2014→ [2;0;1;4]... ou 2014→ [4;1;0;2]

◮ Bottom-up : la décimale de poids faible est n % 10.◮ Python récursif

def decompose_base_10(n):

if n<10:

return [n]

res = decompose_base_10( n // 10 )

res.append( n%10 )

return res

◮ Python itératif

def decompose_base_10_it(n):

resultat, reste = [], n

while reste > 0:

resultat = [reste % 10]+resultat

# ou resultat.append(reste%10) ...

reste = reste // 10

return resultat

Page 241: tous Informatique pour tous Plan généralblog.psi945.fr/public/info-commune/sup/cours-sup-imprimable-python.pdfDichotomie et Newton Méthode d’Euler Bases de données Stocker intelligemment

Représentationmachine des entiers

et (de quelques)réels

Stéphane Gonnord

Plan

Décomposition enbase b

La base dix

La base 2

Quelques exercices

Petits et grandsentiers en machine32 vs. 64 bits

Et au delà

FlottantsDes nombres à virgules

Rationnels, décimaux etdyadiques

Quelques exercices

Représentationmachine des flottantsDes phénomènes inévitables

La norme IEE754

Quelques exercices

De la décomposition vers l’entier (1/2)But : passer de [4;1;0;2] (ou [2;0;1;4]) à 2014.

◮ Principe : [4;1;0;2] : la décimale de poids faible estconnue ; on continue avec le reste.

◮ Python récursif

def reconstituer(t):

if t == []:

return 0

return t[0] + 10*reconstituer(t[1:])

Coût « quadratique » (slicing)... Mais bon...

◮ Python itératif

def reconstituer_iter(t):

res = 0

for i in range(len(t)):

res = res + 10**i * t[i]

return res

Page 242: tous Informatique pour tous Plan généralblog.psi945.fr/public/info-commune/sup/cours-sup-imprimable-python.pdfDichotomie et Newton Méthode d’Euler Bases de données Stocker intelligemment

Représentationmachine des entiers

et (de quelques)réels

Stéphane Gonnord

Plan

Décomposition enbase b

La base dix

La base 2

Quelques exercices

Petits et grandsentiers en machine32 vs. 64 bits

Et au delà

FlottantsDes nombres à virgules

Rationnels, décimaux etdyadiques

Quelques exercices

Représentationmachine des flottantsDes phénomènes inévitables

La norme IEE754

Quelques exercices

De la décomposition vers l’entier (2/2)« À la Hörner »

◮ Principe : 2148 = P(10) avec

P(t) = 2t3+ t2+4t+8...= 8+ t×(4+ t×(1+ t×2))

◮ Algorithme :Entrées : T

res← 0 # le résultat qui va grandirpour d dans T faire

res← res×10+d

Résultat : p

◮ En Python :

def recompose(t):

res = 0

for d in t:

res = res*10 + d

return res

Page 243: tous Informatique pour tous Plan généralblog.psi945.fr/public/info-commune/sup/cours-sup-imprimable-python.pdfDichotomie et Newton Méthode d’Euler Bases de données Stocker intelligemment

Représentationmachine des entiers

et (de quelques)réels

Stéphane Gonnord

Plan

Décomposition enbase b

La base dix

La base 2

Quelques exercices

Petits et grandsentiers en machine32 vs. 64 bits

Et au delà

FlottantsDes nombres à virgules

Rationnels, décimaux etdyadiques

Quelques exercices

Représentationmachine des flottantsDes phénomènes inévitables

La norme IEE754

Quelques exercices

Décomposition en base 2◮ Combien ai-je de doigts ?

10 = 8+2 = 1×23+0×22+1×21+0×20→ 1010

◮ Et si je compte les doigts de pied ? Directement enbase 2... Fastoche !

10100→ 24 +22 = 20

◮ Décomposition : « top-down vs. bottom-up »

43 = 32+11 43 = 1+2×21

43→ 101011

Page 244: tous Informatique pour tous Plan généralblog.psi945.fr/public/info-commune/sup/cours-sup-imprimable-python.pdfDichotomie et Newton Méthode d’Euler Bases de données Stocker intelligemment

Représentationmachine des entiers

et (de quelques)réels

Stéphane Gonnord

Plan

Décomposition enbase b

La base dix

La base 2

Quelques exercices

Petits et grandsentiers en machine32 vs. 64 bits

Et au delà

FlottantsDes nombres à virgules

Rationnels, décimaux etdyadiques

Quelques exercices

Représentationmachine des flottantsDes phénomènes inévitables

La norme IEE754

Quelques exercices

Quelques exercices◮ Quel entier possède comme écriture binaire 11...111

(n « 1 » consécutifs) ?

◮ Quel entier possède comme écriture binaire10101010 ?

◮ Quel entier possède s’écrit 120120 en base 3 ?

◮ Décomposer 840 en base 2. Puis en base 4. Et enfinen base 16.

◮ Décomposer 42 en base 16.

◮ Quel entier s’écrit A1 en base 16 ?

◮ Écrire un programme calculant la décomposition enbase 2 d’un entier... sans regarder les pagesprécédentes ! Réciproquement...

Page 245: tous Informatique pour tous Plan généralblog.psi945.fr/public/info-commune/sup/cours-sup-imprimable-python.pdfDichotomie et Newton Méthode d’Euler Bases de données Stocker intelligemment

Représentationmachine des entiers

et (de quelques)réels

Stéphane Gonnord

Plan

Décomposition enbase b

La base dix

La base 2

Quelques exercices

Petits et grandsentiers en machine32 vs. 64 bits

Et au delà

FlottantsDes nombres à virgules

Rationnels, décimaux etdyadiques

Quelques exercices

Représentationmachine des flottantsDes phénomènes inévitables

La norme IEE754

Quelques exercices

Représentations de taille fixée◮ Représentation de 10 sur 32 bits... 0|00...001010︸ ︷︷ ︸

31

◮ Et −10 : 1|00...001010︸ ︷︷ ︸31

?

◮ En fait non : s = 1, mais la « mantisse » vaut−10+231

◮ Entiers représentables : de 1|00...00 =−231 à0|11...11 = 231−1

◮ Et PAF l’Ariane.

◮ 106−101217 = 898783 = 898782+1...

◮ Exercice : quelle est effectivement la représentationbinaire de −10 ?

1|00...01010 ou 1|11...110101 ou 1|11...110110 ?

Page 246: tous Informatique pour tous Plan généralblog.psi945.fr/public/info-commune/sup/cours-sup-imprimable-python.pdfDichotomie et Newton Méthode d’Euler Bases de données Stocker intelligemment

Représentationmachine des entiers

et (de quelques)réels

Stéphane Gonnord

Plan

Décomposition enbase b

La base dix

La base 2

Quelques exercices

Petits et grandsentiers en machine32 vs. 64 bits

Et au delà

FlottantsDes nombres à virgules

Rationnels, décimaux etdyadiques

Quelques exercices

Représentationmachine des flottantsDes phénomènes inévitables

La norme IEE754

Quelques exercices

Entiers «arbitrairement longs»Sur une architecture 64 bits :

◮ En première approximation... représentation de263 +261 +231 +22 +21 :

+ | 00...0010︸ ︷︷ ︸31

10...0001︸ ︷︷ ︸31

00...0110︸ ︷︷ ︸31

◮ Pourquoi 31 et pas 64 ?

Suspens...

◮ Comment faire une somme, une multiplication ?

◮ IRL... c’est un peu plus compliqué (comme toujours) !

Page 247: tous Informatique pour tous Plan généralblog.psi945.fr/public/info-commune/sup/cours-sup-imprimable-python.pdfDichotomie et Newton Méthode d’Euler Bases de données Stocker intelligemment

Représentationmachine des entiers

et (de quelques)réels

Stéphane Gonnord

Plan

Décomposition enbase b

La base dix

La base 2

Quelques exercices

Petits et grandsentiers en machine32 vs. 64 bits

Et au delà

FlottantsDes nombres à virgules

Rationnels, décimaux etdyadiques

Quelques exercices

Représentationmachine des flottantsDes phénomènes inévitables

La norme IEE754

Quelques exercices

Pi◮ Que vaut

1

3?

1

3◮ Et à peu près ?

Disons1

3≃ 0,3333 =

3333

104

◮ Que vaut π ?

Pfiou...

◮ Et à peu près ?

Disons 3,14159465

◮ Un peu mieux SVP ?

3,1415938

◮ Plus précisément ?

|π−3,141593| ≤ 10−6

Page 248: tous Informatique pour tous Plan généralblog.psi945.fr/public/info-commune/sup/cours-sup-imprimable-python.pdfDichotomie et Newton Méthode d’Euler Bases de données Stocker intelligemment

Représentationmachine des entiers

et (de quelques)réels

Stéphane Gonnord

Plan

Décomposition enbase b

La base dix

La base 2

Quelques exercices

Petits et grandsentiers en machine32 vs. 64 bits

Et au delà

FlottantsDes nombres à virgules

Rationnels, décimaux etdyadiques

Quelques exercices

Représentationmachine des flottantsDes phénomènes inévitables

La norme IEE754

Quelques exercices

Haitche-Pi◮ Comment écrire 9 3/4 en base 10 ?

9,75

◮ Comment écrire 9 3/4 en base 2 ?

1001,112

◮ Comment écrire 9 3/4 en base 4 ?

21,34

◮ Comment écrire 9 3/4 en base 16 ?

9,C16

◮ Comment dire 9 3/4 en anglais ?

Pfiou...

Page 249: tous Informatique pour tous Plan généralblog.psi945.fr/public/info-commune/sup/cours-sup-imprimable-python.pdfDichotomie et Newton Méthode d’Euler Bases de données Stocker intelligemment

Représentationmachine des entiers

et (de quelques)réels

Stéphane Gonnord

Plan

Décomposition enbase b

La base dix

La base 2

Quelques exercices

Petits et grandsentiers en machine32 vs. 64 bits

Et au delà

FlottantsDes nombres à virgules

Rationnels, décimaux etdyadiques

Quelques exercices

Représentationmachine des flottantsDes phénomènes inévitables

La norme IEE754

Quelques exercices

Rationnels, décimaux et dyadiques◮ Rationnel = réel de la forme

p

q, p ∈ Z, q ∈ N∗.

2

3∈Q ;

√2 ∈ R\Q

◮ Décimal = rationnel de la formep

10d, p ∈ Z, d ∈ N.

3

5∈ D ;

2

3∈Q\D

◮ Dyadique = rationnel de la formep

2b, p ∈ Z, b ∈ N.

3

2∈D ;

3

5∈ D\D

◮ Inclusions strictes :

D (D(Q(R

Page 250: tous Informatique pour tous Plan généralblog.psi945.fr/public/info-commune/sup/cours-sup-imprimable-python.pdfDichotomie et Newton Méthode d’Euler Bases de données Stocker intelligemment

Représentationmachine des entiers

et (de quelques)réels

Stéphane Gonnord

Plan

Décomposition enbase b

La base dix

La base 2

Quelques exercices

Petits et grandsentiers en machine32 vs. 64 bits

Et au delà

FlottantsDes nombres à virgules

Rationnels, décimaux etdyadiques

Quelques exercices

Représentationmachine des flottantsDes phénomènes inévitables

La norme IEE754

Quelques exercices

Un peu de maths

1

3= lim

N→∞

N

∑n=1

3

10n=

+∞

∑n=1

3

10n= 0,33333...

◮ Il existe (dk)k∈N∗ suite d’éléments de {0, ...,9} telle

que π = 3++∞

∑n=1

dn

10n ·

◮ Si x ∈ R, alors on peut trouver des dn ∈ {0, ...,9} et

E ∈ Z tels que x = E ++∞

∑n=1

dn

10n ·

◮ 1 =+∞

∑n=1

(910

)n= 0,999... mais il y a unicité, pour peu

que...

◮ Ça marche pareil dans les autres bases.

Page 251: tous Informatique pour tous Plan généralblog.psi945.fr/public/info-commune/sup/cours-sup-imprimable-python.pdfDichotomie et Newton Méthode d’Euler Bases de données Stocker intelligemment

Représentationmachine des entiers

et (de quelques)réels

Stéphane Gonnord

Plan

Décomposition enbase b

La base dix

La base 2

Quelques exercices

Petits et grandsentiers en machine32 vs. 64 bits

Et au delà

FlottantsDes nombres à virgules

Rationnels, décimaux etdyadiques

Quelques exercices

Représentationmachine des flottantsDes phénomènes inévitables

La norme IEE754

Quelques exercices

Exemples de troncatures◮

1

3−→ 0,333 =

333

103

◮ π−→ 3,14 =314

102

◮ π−→ 3,141592654 =3141592654

109

◮ NA −→ 6,0221×1023

◮ La mantisse contient « les chiffres significatifs » ;l’exposant est... l’exposant !

◮ En base 2 : 9,75→ 1001,11 = 1,00111×23

◮ x ∈ R approché par d ∈D tel que |x−d | ≤ ε ? Non,

plutôt

∣∣∣∣x−d

x

∣∣∣∣≤ 2−N .

Page 252: tous Informatique pour tous Plan généralblog.psi945.fr/public/info-commune/sup/cours-sup-imprimable-python.pdfDichotomie et Newton Méthode d’Euler Bases de données Stocker intelligemment

Représentationmachine des entiers

et (de quelques)réels

Stéphane Gonnord

Plan

Décomposition enbase b

La base dix

La base 2

Quelques exercices

Petits et grandsentiers en machine32 vs. 64 bits

Et au delà

FlottantsDes nombres à virgules

Rationnels, décimaux etdyadiques

Quelques exercices

Représentationmachine des flottantsDes phénomènes inévitables

La norme IEE754

Quelques exercices

Le cas de la base 60 - récréation

>>> 1+24./60+51./60**2+10./60**3

1.414212962962963

>>> sqrt(2)

1.4142135623730951

Page 253: tous Informatique pour tous Plan généralblog.psi945.fr/public/info-commune/sup/cours-sup-imprimable-python.pdfDichotomie et Newton Méthode d’Euler Bases de données Stocker intelligemment

Représentationmachine des entiers

et (de quelques)réels

Stéphane Gonnord

Plan

Décomposition enbase b

La base dix

La base 2

Quelques exercices

Petits et grandsentiers en machine32 vs. 64 bits

Et au delà

FlottantsDes nombres à virgules

Rationnels, décimaux etdyadiques

Quelques exercices

Représentationmachine des flottantsDes phénomènes inévitables

La norme IEE754

Quelques exercices

Quelques exercices◮ Donner l’écriture exacte en base 2 du dyadique

165

16·

◮ Quel dyadique possède pour écriture binaire11011,1101 ?

◮ Donner l’écriture en base 10 de1

kpour 2≤ k ≤ 7.

◮ Donner l’écriture en base 2 de1

◮ Rejouer avec1

5!

◮ Pour quels N le décimalN

100est-il un dyadique ? Et

N

10k?

Page 254: tous Informatique pour tous Plan généralblog.psi945.fr/public/info-commune/sup/cours-sup-imprimable-python.pdfDichotomie et Newton Méthode d’Euler Bases de données Stocker intelligemment

Représentationmachine des entiers

et (de quelques)réels

Stéphane Gonnord

Plan

Décomposition enbase b

La base dix

La base 2

Quelques exercices

Petits et grandsentiers en machine32 vs. 64 bits

Et au delà

FlottantsDes nombres à virgules

Rationnels, décimaux etdyadiques

Quelques exercices

Représentationmachine des flottantsDes phénomènes inévitables

La norme IEE754

Quelques exercices

Python...

>>> 1. / 3**6

0.0013717421124828531

>>> (1. / 3**6) * 3**6

0.9999999999999999

Alors que...

>>> for i in range(1000):

if (1./2**i) * 2**i <> 1. : print(i)

>>>

Python « travaille en base 2 ».

Page 255: tous Informatique pour tous Plan généralblog.psi945.fr/public/info-commune/sup/cours-sup-imprimable-python.pdfDichotomie et Newton Méthode d’Euler Bases de données Stocker intelligemment

Représentationmachine des entiers

et (de quelques)réels

Stéphane Gonnord

Plan

Décomposition enbase b

La base dix

La base 2

Quelques exercices

Petits et grandsentiers en machine32 vs. 64 bits

Et au delà

FlottantsDes nombres à virgules

Rationnels, décimaux etdyadiques

Quelques exercices

Représentationmachine des flottantsDes phénomènes inévitables

La norme IEE754

Quelques exercices

vs. mapleUn peu de maple...

> for i to 40 do if 2**i*(1./2**i) <> 1.

then print(i) fi od;

34

38

>

Alors que...

> for i to 1000 do if 10**i*(1./10**i) <> 1.

then print(i) fi od;

>

Conclusion ?

Page 256: tous Informatique pour tous Plan généralblog.psi945.fr/public/info-commune/sup/cours-sup-imprimable-python.pdfDichotomie et Newton Méthode d’Euler Bases de données Stocker intelligemment

Représentationmachine des entiers

et (de quelques)réels

Stéphane Gonnord

Plan

Décomposition enbase b

La base dix

La base 2

Quelques exercices

Petits et grandsentiers en machine32 vs. 64 bits

Et au delà

FlottantsDes nombres à virgules

Rationnels, décimaux etdyadiques

Quelques exercices

Représentationmachine des flottantsDes phénomènes inévitables

La norme IEE754

Quelques exercices

D’autres blagues◮ Non-associativité :

>>> x=1

>>> y=-1

>>> z=2**(-55)

>>> (x+y)+z

2.7755575615628914e-17

>>> x+(y+z)

0.0

◮ Grumf...

>>> 0.1+0.1

0.2

>>> 0.1+0.1 == 0.2

True

>>> print(0.1+0.1+0.1)

0.3

>>> 0.1+0.1+0.1 == 0.3

False

>>> 0.1+0.1+0.1

0.30000000000000004

Bref : méfions-nous de tout...et particulièrement del’égalité des flottants.

Page 257: tous Informatique pour tous Plan généralblog.psi945.fr/public/info-commune/sup/cours-sup-imprimable-python.pdfDichotomie et Newton Méthode d’Euler Bases de données Stocker intelligemment

Représentationmachine des entiers

et (de quelques)réels

Stéphane Gonnord

Plan

Décomposition enbase b

La base dix

La base 2

Quelques exercices

Petits et grandsentiers en machine32 vs. 64 bits

Et au delà

FlottantsDes nombres à virgules

Rationnels, décimaux etdyadiques

Quelques exercices

Représentationmachine des flottantsDes phénomènes inévitables

La norme IEE754

Quelques exercices

Principe de la représentation en machine◮ On approche x ∈ R par un flottant x = N×2k , avec

N impair (pourquoi ?) majoré par 2T , et a≤ k ≤ b.

◮ T est la taille de la mantisse (23, 52...), et parexemple −126≤ k ≤ 127 ou encore−1023≤ k ≤ 1024.

◮ Les flottants sont plus ou moins denses selon leszones...

◮ Ne pas espérer une précision absolue |x− x | ≤ ε0 :penser à

x = 2K

(1+

1

2T

), (K ,T ) = (512,52)

◮ On peut espérer :

∣∣∣∣x− x

x

∣∣∣∣≤ 2−T .

Page 258: tous Informatique pour tous Plan généralblog.psi945.fr/public/info-commune/sup/cours-sup-imprimable-python.pdfDichotomie et Newton Méthode d’Euler Bases de données Stocker intelligemment

Représentationmachine des entiers

et (de quelques)réels

Stéphane Gonnord

Plan

Décomposition enbase b

La base dix

La base 2

Quelques exercices

Petits et grandsentiers en machine32 vs. 64 bits

Et au delà

FlottantsDes nombres à virgules

Rationnels, décimaux etdyadiques

Quelques exercices

Représentationmachine des flottantsDes phénomènes inévitables

La norme IEE754

Quelques exercices

La norme IEEE754 (sur 64 bits)◮ Un bit de signe, 52 de mantisse, et 11 d’exposant.

◮ m×2e : on code m ∈ [1,2[, et e+1023, ce quiautorise −1022≤ e ≤ 1023. Pfiou...

◮ Exemple :1

3= 0,0101010101010101...

>>> (1./3).hex()

’0x1.5555555555555p-2’

◮ Il y a les infinis, et « Not A Number »...

◮ Le bit de poids fort de la mantisse est implicite.

◮ La gestion des arrondis est normalisée.

◮ C’est abominablement technique !

Page 259: tous Informatique pour tous Plan généralblog.psi945.fr/public/info-commune/sup/cours-sup-imprimable-python.pdfDichotomie et Newton Méthode d’Euler Bases de données Stocker intelligemment

Représentationmachine des entiers

et (de quelques)réels

Stéphane Gonnord

Plan

Décomposition enbase b

La base dix

La base 2

Quelques exercices

Petits et grandsentiers en machine32 vs. 64 bits

Et au delà

FlottantsDes nombres à virgules

Rationnels, décimaux etdyadiques

Quelques exercices

Représentationmachine des flottantsDes phénomènes inévitables

La norme IEE754

Quelques exercices

Exercices◮ Prévoir ce qui va se passer :

s0, s1 = 0, 1

for i in range(16):

s0 += 2**(-55)

s1 += 2**(-55)

s0 += 1

>>> s0,s1

(1.0000000000000004, 1.0)

◮ (HARD) Expliquer :

>>> 0.1.hex()

’0x1.999999999999ap-4’

>>> 0.2.hex()

’0x1.999999999999ap-3’

>>> 0.3.hex()

’0x1.3333333333333p-2’

>>> (3*0.1).hex()

’0x1.3333333333334p-2’

Page 260: tous Informatique pour tous Plan généralblog.psi945.fr/public/info-commune/sup/cours-sup-imprimable-python.pdfDichotomie et Newton Méthode d’Euler Bases de données Stocker intelligemment

Représentationmachine des entiers

et (de quelques)réels

Stéphane Gonnord

Plan

Décomposition enbase b

La base dix

La base 2

Quelques exercices

Petits et grandsentiers en machine32 vs. 64 bits

Et au delà

FlottantsDes nombres à virgules

Rationnels, décimaux etdyadiques

Quelques exercices

Représentationmachine des flottantsDes phénomènes inévitables

La norme IEE754

Quelques exercices

C’est fini

Merci de votre attention !

Page 261: tous Informatique pour tous Plan généralblog.psi945.fr/public/info-commune/sup/cours-sup-imprimable-python.pdfDichotomie et Newton Méthode d’Euler Bases de données Stocker intelligemment

Tableaux/listes enPython (2/2)

Stéphane Gonnord

Plan

Tableaux et listes enPython

Tableauxbidimensionnels

Un peu denumpy.array

Tableaux/listes en Python (2/2)Matrices, et sombres histoires de pointeurs

Stéphane Gonnord

[email protected]

www.mp933.fr

Lycée du parc - Lyon

Vendredi 7 février 2014

Page 262: tous Informatique pour tous Plan généralblog.psi945.fr/public/info-commune/sup/cours-sup-imprimable-python.pdfDichotomie et Newton Méthode d’Euler Bases de données Stocker intelligemment

Tableaux/listes enPython (2/2)

Stéphane Gonnord

Plan

Tableaux et listes enPython

Tableauxbidimensionnels

Un peu denumpy.array

Plan1. Quelques rappels :

◮ Création, indexation◮ Slicing◮ Copie◮ Passage en paramètre◮ Parcours

2. Tableaux bidimensionnels :◮ Création basique, indexation◮ Création-bis : le drame◮ Recopie

3. Un peu de numpy◮ Les tableaux array◮ Matrices◮ Slicing multidimensionnel.

Page 263: tous Informatique pour tous Plan généralblog.psi945.fr/public/info-commune/sup/cours-sup-imprimable-python.pdfDichotomie et Newton Méthode d’Euler Bases de données Stocker intelligemment

Tableaux/listes enPython (2/2)

Stéphane Gonnord

Plan

Tableaux et listes enPython

Tableauxbidimensionnels

Un peu denumpy.array

Création, indexation◮ Basique :

>>> t = [10, 12, 15, 7]

>>> len(t)

4

>>> t[2]

15

>>> t[4]

Traceback (most recent call last):

File "<stdin>", line 1, in <module>

IndexError: list index out of range

>>> t[-1]

7

◮ Mais aussi :>>> [0] * 5

[0, 0, 0, 0, 0]

>>> [1 for i in range(3)]

[1, 1, 1]

>>> [i**2 for i in range(3)]

[0, 1, 4]

>>> [2 for _ in range(3)]

[2, 2, 2]

Page 264: tous Informatique pour tous Plan généralblog.psi945.fr/public/info-commune/sup/cours-sup-imprimable-python.pdfDichotomie et Newton Méthode d’Euler Bases de données Stocker intelligemment

Tableaux/listes enPython (2/2)

Stéphane Gonnord

Plan

Tableaux et listes enPython

Tableauxbidimensionnels

Un peu denumpy.array

SlicingPlein de découpages !

◮ De base :>>> t = [3, 5, 12, 15, 42]

>>> t[1: 3]

[5, 12]

◮ Depuis/jusqu’au bout>>> t[ : 3]

[3, 5, 12]

>>> t[2: ]

[12, 15, 42]

◮ Avec un pas (6= 1)>>> t[0: 4: 2]

[3, 12]

>>> t[4: 0: -2]

[42, 12]

Page 265: tous Informatique pour tous Plan généralblog.psi945.fr/public/info-commune/sup/cours-sup-imprimable-python.pdfDichotomie et Newton Méthode d’Euler Bases de données Stocker intelligemment

Tableaux/listes enPython (2/2)

Stéphane Gonnord

Plan

Tableaux et listes enPython

Tableauxbidimensionnels

Un peu denumpy.array

Recopie◮ Surtout pas :

>>> t = [3, 5, 12, 15]

>>> t1 = t

>>> t1[1] = -1000

>>> t, t1

([3, -1000, 12, 15], [3, -1000, 12, 15])

◮ Mais plutôt :>>> t2 = t[ : ]

>>> t2[2] = 19

>>> t [1] = 1

>>> t, t1, t2

([3, 1, 12, 15], [3, 1, 12, 15], [3, -1000, 19, 15])

◮ Ou encore :>>> t3 = [t[i] for i in range(len(t))]

>>> t4 = [ x for x in t]

>>> import copy

>>> t5 = copy.copy(t)

>>> t6 = copy.deepcopy(t)

Page 266: tous Informatique pour tous Plan généralblog.psi945.fr/public/info-commune/sup/cours-sup-imprimable-python.pdfDichotomie et Newton Méthode d’Euler Bases de données Stocker intelligemment

Tableaux/listes enPython (2/2)

Stéphane Gonnord

Plan

Tableaux et listes enPython

Tableauxbidimensionnels

Un peu denumpy.array

Passage en paramètre : « rappel »◮ Si on définit...

def foo(x):

y = x+10

return y+1

◮ Alors à l’exécution :>>> foo(1)

12

>>> x = 2

>>> foo(x)

13

>>> x

2

>>> y = 3

>>> foo(y)

14

>>> y

3

Page 267: tous Informatique pour tous Plan généralblog.psi945.fr/public/info-commune/sup/cours-sup-imprimable-python.pdfDichotomie et Newton Méthode d’Euler Bases de données Stocker intelligemment

Tableaux/listes enPython (2/2)

Stéphane Gonnord

Plan

Tableaux et listes enPython

Tableauxbidimensionnels

Un peu denumpy.array

Passage en paramètre : cas des tableaux◮ Si on définit...

def bar(t):

t.append(42)

return t

◮ Alors à l’exécution :>>> bar([1, 2, 3])

[1, 2, 3, 42]

>>> t = [1, 2, 3]

>>> bar(t)

[1, 2, 3, 42]

>>> t

[1, 2, 3, 42]

◮ C’est en fait l’adresse du tableau qui est donnée enparamètre...

◮ C’est dangereux... et utile !def echange(t, i, j):

t[i], t[j] = t[j], t[i]

>>> echange(t, 0, 2)

>>>

>>> t

[3, 2, 1, 42]

Page 268: tous Informatique pour tous Plan généralblog.psi945.fr/public/info-commune/sup/cours-sup-imprimable-python.pdfDichotomie et Newton Méthode d’Euler Bases de données Stocker intelligemment

Tableaux/listes enPython (2/2)

Stéphane Gonnord

Plan

Tableaux et listes enPython

Tableauxbidimensionnels

Un peu denumpy.array

Parcours◮ À l’ancienne :

def maxi1(t):

m = t[0]

for i in range(len(t)):

if t[i] > m:

m = t[i]

return m

◮ À la Python :def maxi2(t):

m = t[0]

for x in t:

if x > m:

m = x

return m

◮ Mais aussi :def pos_maxi(t):

imaxi = 0

for i, x in enumerate(t):

if x > t[imaxi]:

imaxi = i

return imaxi

>>> pos_maxi([10, 42, 84, 10])

2

Page 269: tous Informatique pour tous Plan généralblog.psi945.fr/public/info-commune/sup/cours-sup-imprimable-python.pdfDichotomie et Newton Méthode d’Euler Bases de données Stocker intelligemment

Tableaux/listes enPython (2/2)

Stéphane Gonnord

Plan

Tableaux et listes enPython

Tableauxbidimensionnels

Un peu denumpy.array

Création basique :

(

1 2 34 5 6

)

◮ Des tableaux de tableaux :>>> t1 = [[1, 2, 3], [4, 5, 6]]

>>> t1[1]

[4, 5, 6]

>>> t1[0][2]

3

>>> t1[0,2]

Traceback (most recent call last):

File "<stdin>", line 1, in <module>

TypeError: list indices must be integers, not tuple

◮ À la numpy :>>> from numpy import *

>>> t2 = array([[1, 2, 3], [4, 5, 6]])

>>> t2

array([[1, 2, 3],

[4, 5, 6]])

>>> t2[1]

array([4, 5, 6])

>>> t2[0][2]

3

>>> t2[0,2]

3

Page 270: tous Informatique pour tous Plan généralblog.psi945.fr/public/info-commune/sup/cours-sup-imprimable-python.pdfDichotomie et Newton Méthode d’Euler Bases de données Stocker intelligemment

Tableaux/listes enPython (2/2)

Stéphane Gonnord

Plan

Tableaux et listes enPython

Tableauxbidimensionnels

Un peu denumpy.array

Créer une matrice (n,p)◮ Premier essai

>>> t1 = [[0] * 3] * 2

>>> t1

[[0, 0, 0], [0, 0, 0]]

>>> t1[0][1] = 42

>>> t1

[[0, 42, 0], [0, 42, 0]]

◮ Saletés de pointeurs...◮ Deuxième essai

>>> t2 = [[0] * 3 for _ in range(2)]

>>> t2

[[0, 0, 0], [0, 0, 0]]

>>> t2[0][1] = 42

>>> t2

[[0, 42, 0], [0, 0, 0]]

Page 271: tous Informatique pour tous Plan généralblog.psi945.fr/public/info-commune/sup/cours-sup-imprimable-python.pdfDichotomie et Newton Méthode d’Euler Bases de données Stocker intelligemment

Tableaux/listes enPython (2/2)

Stéphane Gonnord

Plan

Tableaux et listes enPython

Tableauxbidimensionnels

Un peu denumpy.array

Recopie de tableaux bidimensionnels◮ Première blague :

>>> t2 = t1

◮ Deuxième blague (beaucoup plus subtile) :

>>> t3 = t1[ : ]

◮ Troisième essai (identique à ce qui précède) :

>>> from copy import *

>>> t4 = copy(t1)

◮ Et enfin :

>>> t5 = deepcopy(t1)

◮ Ou encore (pour deux niveaux) :

>>> t6 = [l[ : ] for l in t1]

Page 272: tous Informatique pour tous Plan généralblog.psi945.fr/public/info-commune/sup/cours-sup-imprimable-python.pdfDichotomie et Newton Méthode d’Euler Bases de données Stocker intelligemment

Tableaux/listes enPython (2/2)

Stéphane Gonnord

Plan

Tableaux et listes enPython

Tableauxbidimensionnels

Un peu denumpy.array

Arrays (1/2)

>>> from numpy import *

>>> t0 = array([10, 2, 30])

◮ Des tableaux spéciaux (array) homogènes (int32,float64... ; pas de mélange).

◮ Indexation et slicing : comme les listes.◮ Méthodes propres (sum, copy, resize...) ; pas deappend.

◮ Somme et multiplication par un scalaire :>>> [1, 2] + [3, 4]

[1, 2, 3, 4]

>>> 2 * [1, 2]

[1, 2, 1, 2]

>>> array([1, 2]) + array([3, 4])

array([4, 6])

>>> 2*array([1, 2])

array([2, 4])

Page 273: tous Informatique pour tous Plan généralblog.psi945.fr/public/info-commune/sup/cours-sup-imprimable-python.pdfDichotomie et Newton Méthode d’Euler Bases de données Stocker intelligemment

Tableaux/listes enPython (2/2)

Stéphane Gonnord

Plan

Tableaux et listes enPython

Tableauxbidimensionnels

Un peu denumpy.array

Arrays (2/2)◮ Pratique :

>>> arange(1, 2, 0.2)

array([ 1. , 1.2, 1.4, 1.6, 1.8])

>>> linspace(1, 2, 5)

array([ 1. , 1.25, 1.5 , 1.75, 2. ])

◮ Appliquer une fonction :>>> map(math.cos, [1, 2])

[0.5403023058681398, -0.4161468365471424]

>>> map(numpy.cos, [1, 2])

[0.54030230586813977, -0.41614683654714241]

>>> math.cos([1,2])

Traceback (most recent call last):

File "<stdin>", line 1, in <module>

TypeError: a float is required

>>> numpy.cos(array([1,2]))

array([ 0.54030231, -0.41614684])

>>> numpy.cos([1,2])

array([ 0.54030231, -0.41614684])

Page 274: tous Informatique pour tous Plan généralblog.psi945.fr/public/info-commune/sup/cours-sup-imprimable-python.pdfDichotomie et Newton Méthode d’Euler Bases de données Stocker intelligemment

Tableaux/listes enPython (2/2)

Stéphane Gonnord

Plan

Tableaux et listes enPython

Tableauxbidimensionnels

Un peu denumpy.array

Matrices◮ Exemple :

>>> hilbert = array([[1/(i+j+1) for j in range(3)] for i in range(3)])

>>> hilbert

array([[ 1. , 0.5 , 0.33333333],

[ 0.5 , 0.33333333, 0.25 ],

[ 0.33333333, 0.25 , 0.2 ]])

◮ Attention, piège à c...>>> hilbert*hilbert

array([[ 1. , 0.25 , 0.11111111],

[ 0.25 , 0.11111111, 0.0625 ],

[ 0.11111111, 0.0625 , 0.04 ]])

>>> linalg.dot(hilbert,hilbert)

array([[ 1.36111111, 0.75 , 0.525 ],

[ 0.75 , 0.42361111, 0.3 ],

[ 0.525 , 0.3 , 0.21361111]])

◮ zeros, identity, solve...

Page 275: tous Informatique pour tous Plan généralblog.psi945.fr/public/info-commune/sup/cours-sup-imprimable-python.pdfDichotomie et Newton Méthode d’Euler Bases de données Stocker intelligemment

Tableaux/listes enPython (2/2)

Stéphane Gonnord

Plan

Tableaux et listes enPython

Tableauxbidimensionnels

Un peu denumpy.array

Slicing multidimensionnel◮ Récupérer une ligne...

>>> hilbert[1]

array([ 0.5 , 0.33333333, 0.25 ])

◮ Ou une colonne

>>> hilbert[2, : ]

array([ 0.33333333, 0.25 , 0.2 ])

◮ Ou une sous-matrice :

>>> hilbert[:2 , 1:]

array([[ 0.5 , 0.33333333],

[ 0.33333333, 0.25 ]])

Page 276: tous Informatique pour tous Plan généralblog.psi945.fr/public/info-commune/sup/cours-sup-imprimable-python.pdfDichotomie et Newton Méthode d’Euler Bases de données Stocker intelligemment

Tableaux/listes enPython (2/2)

Stéphane Gonnord

Plan

Tableaux et listes enPython

Tableauxbidimensionnels

Un peu denumpy.array

C’est finiMerci de votre attention !

Page 277: tous Informatique pour tous Plan généralblog.psi945.fr/public/info-commune/sup/cours-sup-imprimable-python.pdfDichotomie et Newton Méthode d’Euler Bases de données Stocker intelligemment

Autour du pivot deGauss

Stéphane Gonnord

Plan

Résolution d’unsystèmeNimpe

Pivotons

Mise en œuvreAlgorithme précis

Code

Analyse del’algorithmeComplexité

Validité

Questions de précision

Bonus

Autour du pivot de GaussRésolution de systèmes linéaires... et autres bricoles

Stéphane Gonnord

[email protected]

www.mp933.fr

Lycée du parc - Lyon

Vendredi (14,) 21 et 28 février 2014Lycée du parc

Page 278: tous Informatique pour tous Plan généralblog.psi945.fr/public/info-commune/sup/cours-sup-imprimable-python.pdfDichotomie et Newton Méthode d’Euler Bases de données Stocker intelligemment

Autour du pivot deGauss

Stéphane Gonnord

Plan

Résolution d’unsystèmeNimpe

Pivotons

Mise en œuvreAlgorithme précis

Code

Analyse del’algorithmeComplexité

Validité

Questions de précision

Bonus

Plan1. Résoudre un système :

◮ ne pas faire n’importe quoi ;◮ l’algorithme du pivot.

2. Mise en œuvre :◮ algorithme finalisé ;◮ code.

3. Analyse de l’algorithme :◮ complexité ;◮ correction ;◮ erreurs, précision.

4. Bonus :◮ inversion de matrice ;◮ déterminant, PJr Q...◮ autres résolutions de sytème.

Page 279: tous Informatique pour tous Plan généralblog.psi945.fr/public/info-commune/sup/cours-sup-imprimable-python.pdfDichotomie et Newton Méthode d’Euler Bases de données Stocker intelligemment

Autour du pivot deGauss

Stéphane Gonnord

Plan

Résolution d’unsystèmeNimpe

Pivotons

Mise en œuvreAlgorithme précis

Code

Analyse del’algorithmeComplexité

Validité

Questions de précision

Bonus

Nimp de chez nimp...◮ Soyons malins :

2x + 2y − 3z = 2−2x − y − 3z = −56x + 4y + 4z = 16

=⇒ y =−2x−3z +5

donc 2x +2(−2x−3z +5)−3z = 2; −9z = 2−10+2x

=⇒ z =−2x +8

9

6x +4

(−2x−3

−2x +8

9+5

)+4−2x +8

9= 16

donc (...)x = ...

Et donc (x ,y ,z) = (−14,21,4)...

◮ Au fait, quelle était la question ?

◮ Au fait que signifie le symbole «⇒ » ? Et le mot« donc » ?

Page 280: tous Informatique pour tous Plan généralblog.psi945.fr/public/info-commune/sup/cours-sup-imprimable-python.pdfDichotomie et Newton Méthode d’Euler Bases de données Stocker intelligemment

Autour du pivot deGauss

Stéphane Gonnord

Plan

Résolution d’unsystèmeNimpe

Pivotons

Mise en œuvreAlgorithme précis

Code

Analyse del’algorithmeComplexité

Validité

Questions de précision

Bonus

Qu’est-ce qui ne va pas ?

TOUT !

◮ Pas/mal formalisé (on prend quelle inconnue ? On faitquoi si «ça se passe mal» ?)

◮ Conclusions peu claires (CN ? CS ? CNS ?)

◮ Équivalences fausses...mais implicites...mais pasvraiment...mais enfin on va faire comme si... Et detoute façon, on sait bien que nécessaire = suffisant !

◮ Pénible à programmer.

◮ « Ben oui mais jusqu’au bac inclus, on avait le droit».Ben oui...

Page 281: tous Informatique pour tous Plan généralblog.psi945.fr/public/info-commune/sup/cours-sup-imprimable-python.pdfDichotomie et Newton Méthode d’Euler Bases de données Stocker intelligemment

Autour du pivot deGauss

Stéphane Gonnord

Plan

Résolution d’unsystèmeNimpe

Pivotons

Mise en œuvreAlgorithme précis

Code

Analyse del’algorithmeComplexité

Validité

Questions de précision

Bonus

Pivotons !◮ Un peu de méthode !

2x + 2y − 3z = 2−2x − y − 3z = −56x + 4y + 4z = 16

L2←L2+L1⇐⇒L3←L3−3L1

2x + 2y − 3z = 21y − 6z = −3

− 2y + 13z = 10

L3←L3+2L2⇐⇒

2x + 2y − 3z = 2y − 6z = −3

z = 4

L2←L2+6L3⇐⇒

2x + 2y − 3z = 2y = 21

z = 4

L1←L1−2L2+3L3⇐⇒

2x = −28y = 21z = 4

Ainsi, le système initial possède une unique solution :

S = {(−14,21,4)}.

◮ Équivalences préservées

◮ Conclusion claire

◮ Ça se passe dans une matrice

Page 282: tous Informatique pour tous Plan généralblog.psi945.fr/public/info-commune/sup/cours-sup-imprimable-python.pdfDichotomie et Newton Méthode d’Euler Bases de données Stocker intelligemment

Autour du pivot deGauss

Stéphane Gonnord

Plan

Résolution d’unsystèmeNimpe

Pivotons

Mise en œuvreAlgorithme précis

Code

Analyse del’algorithmeComplexité

Validité

Questions de précision

Bonus

Schéma global de résolution◮ Mettre sous forme triangulaire, par des transvections ;

◮ « remonter » via des transvections/substitutions ;

◮ conclure !

Exemples : Résoudre à la main les systèmes suivants :

{2x +3y = 55x−2y = −16

x − y + z = 8−x + 2y + z = −12x − 4y − z = 6

Page 283: tous Informatique pour tous Plan généralblog.psi945.fr/public/info-commune/sup/cours-sup-imprimable-python.pdfDichotomie et Newton Méthode d’Euler Bases de données Stocker intelligemment

Autour du pivot deGauss

Stéphane Gonnord

Plan

Résolution d’unsystèmeNimpe

Pivotons

Mise en œuvreAlgorithme précis

Code

Analyse del’algorithmeComplexité

Validité

Questions de précision

Bonus

Borderline◮ Système de Cramer ? Résoudre les systèmes

suivants :{

x +2y = 12x +4y = 1

{x +2y = 12x +4y = 2

La conservation des équivalences est cruciale.◮ Apparition/disparition de 0... Résoudre les systèmes

suivants, et anticiper le résultat de la résolutioninformatique :

x + 1/4y + z = 0x + 1/3y + 2z = 0

y + 12z = 1

x + (1015 +1)y + z = 1x + (1+10−15)y + 2z = 0

1015y − z = 0

Page 284: tous Informatique pour tous Plan généralblog.psi945.fr/public/info-commune/sup/cours-sup-imprimable-python.pdfDichotomie et Newton Méthode d’Euler Bases de données Stocker intelligemment

Autour du pivot deGauss

Stéphane Gonnord

Plan

Résolution d’unsystèmeNimpe

Pivotons

Mise en œuvreAlgorithme précis

Code

Analyse del’algorithmeComplexité

Validité

Questions de précision

Bonus

Algorithme du pivot (partiel)◮ Mise sous forme triangulaire :

pour j de 0 à n−2 faire

Trouver i entre j et n−1 tel que |ai,j | soit maximale.Échanger Li et Lj (coefficients de la matrice et membres de

droite).

pour k de j +1 à n−1 faire

Lk ← Lk −ak ,j

aj,jLj

◮ Remontée :pour i de n−1 à 0 faire

pour k de i +1 à n−1 faireyi ← yi −ai,k xk

xi ←yi

ai,i

En fait, on fera plus rapide !

Page 285: tous Informatique pour tous Plan généralblog.psi945.fr/public/info-commune/sup/cours-sup-imprimable-python.pdfDichotomie et Newton Méthode d’Euler Bases de données Stocker intelligemment

Autour du pivot deGauss

Stéphane Gonnord

Plan

Résolution d’unsystèmeNimpe

Pivotons

Mise en œuvreAlgorithme précis

Code

Analyse del’algorithmeComplexité

Validité

Questions de précision

Bonus

WARNING : problèmes rencontrés◮ Pas (d’essai) de compréhension de l’algorithme ;

◮ lecture partielle, avec changements astucieux etpartiels d’indices ;

◮ toujours range(...) : le hasard fait mal les choses...

◮ (non-copie de A ;)

◮ recherche du pivot maximal : confusion entre positionet valeur ;

◮ travailler sur A ET y dans les opérations (et dans lebon ordre) ;

◮ choisir entre [a, b, c] et [[a], [b], [c]]...

Page 286: tous Informatique pour tous Plan généralblog.psi945.fr/public/info-commune/sup/cours-sup-imprimable-python.pdfDichotomie et Newton Méthode d’Euler Bases de données Stocker intelligemment

Autour du pivot deGauss

Stéphane Gonnord

Plan

Résolution d’unsystèmeNimpe

Pivotons

Mise en œuvreAlgorithme précis

Code

Analyse del’algorithmeComplexité

Validité

Questions de précision

Bonus

Pythonisation◮ Recherche du pivot :

def pivot_partiel(A, j0):

i = j0 # le vainqueur provisoire

for k in range(i+1, len(A)):

if abs(A[k][j0]) > abs(A[i][j0]):

i = k

return i

◮ Échange de lignes :def echange_ligne(A, i, j):

for k in range(len(A[i])):

A[i][k], A[j][k] = A[j][k], A[i][k]

◮ Transvection :def transvection(A, i, j, mu):

for k in range(len(A[i])):

A[i][k] += mu*A[j][k]

Page 287: tous Informatique pour tous Plan généralblog.psi945.fr/public/info-commune/sup/cours-sup-imprimable-python.pdfDichotomie et Newton Méthode d’Euler Bases de données Stocker intelligemment

Autour du pivot deGauss

Stéphane Gonnord

Plan

Résolution d’unsystèmeNimpe

Pivotons

Mise en œuvreAlgorithme précis

Code

Analyse del’algorithmeComplexité

Validité

Questions de précision

Bonus

Code global

def resolution_systeme(A, y):

B = copie(A)

n = len(A)

for i in range(n-1):

j = pivot_partiel(B, i)

echange_ligne(B, i, j)

y[i], y[j] = y[j], y[i]

for k in range(i+1, n):

mu = B[k][i]/float(B[i][i])

transvection(B, k, i, -mu)

y[k] -= y[i]*mu

# B est maintenant triangulaire

x = [0]*n

for i in range(n-1, -1, -1):

x[i] = (y[i]-sum(B[i][k]*x[k] for k in range(i+1,n)))

/float(B[i][i])

return x

Page 288: tous Informatique pour tous Plan généralblog.psi945.fr/public/info-commune/sup/cours-sup-imprimable-python.pdfDichotomie et Newton Méthode d’Euler Bases de données Stocker intelligemment

Autour du pivot deGauss

Stéphane Gonnord

Plan

Résolution d’unsystèmeNimpe

Pivotons

Mise en œuvreAlgorithme précis

Code

Analyse del’algorithmeComplexité

Validité

Questions de précision

Bonus

Analyse de la complexité◮ Mise sous forme triangulaire :

◮ (n−1)+(n−2)+ · · ·+1 transvections...◮ soit n2 transvections, soit n3 opérations flottantes

x ← λx +µ.◮ Et les recherches de maximum ? n2 tests |a|< |b|.

◮ Remontée : n2 additions, soustractions,multiplications ou quotients de flottants.

◮ Bilan :

Le pivot a une complexité de l’ordre de n3

opérations sur les flottants.

Page 289: tous Informatique pour tous Plan généralblog.psi945.fr/public/info-commune/sup/cours-sup-imprimable-python.pdfDichotomie et Newton Méthode d’Euler Bases de données Stocker intelligemment

Autour du pivot deGauss

Stéphane Gonnord

Plan

Résolution d’unsystèmeNimpe

Pivotons

Mise en œuvreAlgorithme précis

Code

Analyse del’algorithmeComplexité

Validité

Questions de précision

Bonus

Validité de l’algorithme◮ Invariant global :

À chaque étape de la triangularisation, le systèmeAX = Y est équivalent au système initial A0X = Y .

◮ Invariant local :

Après k étapes du pivot, alors pour tout j < k ,aj,j 6= 0, et ai,j = 0 pour tout i > j .

◮ Et donc, si le système initial est de Cramer, on arriveà un système triangulaire, et le système initialpossède une unique solution... qui est bien celleretournée.

Page 290: tous Informatique pour tous Plan généralblog.psi945.fr/public/info-commune/sup/cours-sup-imprimable-python.pdfDichotomie et Newton Méthode d’Euler Bases de données Stocker intelligemment

Autour du pivot deGauss

Stéphane Gonnord

Plan

Résolution d’unsystèmeNimpe

Pivotons

Mise en œuvreAlgorithme précis

Code

Analyse del’algorithmeComplexité

Validité

Questions de précision

Bonus

Des erreurs... et leur propagationRésolution de AX = Y ...

◮ approximations sur A ;

◮ mais aussi sur Y ;

◮ et parfois dans la méthode de résolution ;

◮ et très certainement dans les calculs sur flottants...

Quelle misère !

◮ Pour résoudre A1X1 = X0 puis A2X2 = X1 puis... puisANXN = XN−1, accumulation d’approximations.

A1X1 = X0→ A2X2 = X1→ ·· ·

◮ Est-ce que XN ressemble à XN ?

Page 291: tous Informatique pour tous Plan généralblog.psi945.fr/public/info-commune/sup/cours-sup-imprimable-python.pdfDichotomie et Newton Méthode d’Euler Bases de données Stocker intelligemment

Autour du pivot deGauss

Stéphane Gonnord

Plan

Résolution d’unsystèmeNimpe

Pivotons

Mise en œuvreAlgorithme précis

Code

Analyse del’algorithmeComplexité

Validité

Questions de précision

Bonus

Propagation des erreurs◮ Oula !

>>> hilbert5 = array([[1./(i+j+1) for j in range(5)] for i in range(5)])

>>> y1=array([-7.7,-6,-2.1,-.5,0])

>>> y2=array([-7.7,-6,-2.1,-.4,0])

>>> solve(hilbert5, y1)

array([ 102.5, -240. , -2583. , 6860. , -4221. ])

>>> solve(hilbert5, y2)

array([ -37.5 , 2448. , -14342.99999999, 24779.99999999,

-13040.99999999])

◮ AX = Y et A(X +δX) = Y +δY : contrôle de δX àl’aide de δY .

‖δX‖

‖X‖≤ κ(A)

‖δY‖

‖Y‖·

◮ Pour hilbert5 : κ≃ 3×105...

Page 292: tous Informatique pour tous Plan généralblog.psi945.fr/public/info-commune/sup/cours-sup-imprimable-python.pdfDichotomie et Newton Méthode d’Euler Bases de données Stocker intelligemment

Autour du pivot deGauss

Stéphane Gonnord

Plan

Résolution d’unsystèmeNimpe

Pivotons

Mise en œuvreAlgorithme précis

Code

Analyse del’algorithmeComplexité

Validité

Questions de précision

Bonus

Mieux que n3 ?◮ Comment faire si n = 105 ?

Acheter un plus gros ordinateur !

◮ Et si n = 107 et/ou il faut aller vite ? changer deméthode.

◮ Systèmes particuliers (Virginie...) : n3→ n2.

◮ Méthodes itératives : n2 voire n pour uneapproximation des solutions.

◮ Théoriquement, inverser/résoudre a la mêmecomplexité que multiplier les matrices... On descenddessous n3 !

Page 293: tous Informatique pour tous Plan généralblog.psi945.fr/public/info-commune/sup/cours-sup-imprimable-python.pdfDichotomie et Newton Méthode d’Euler Bases de données Stocker intelligemment

Autour du pivot deGauss

Stéphane Gonnord

Plan

Résolution d’unsystèmeNimpe

Pivotons

Mise en œuvreAlgorithme précis

Code

Analyse del’algorithmeComplexité

Validité

Questions de précision

Bonus

Inversion de matrice◮ On va de A à In par opérations sur les lignes :

A0 = A→ A1→ ·· · → AN = In.

◮ On fait les mêmes opérations sur In :

B0 = In→ B1→ ·· · → BN .

◮ Magique : BN = A−1 !

◮ En fait, Ak+1 = Pk Ak et Bk+1 = Pk Bk ... donc

AN = PN−1PN−2...P0A

etBN = PN−1PN−2...P0I

Page 294: tous Informatique pour tous Plan généralblog.psi945.fr/public/info-commune/sup/cours-sup-imprimable-python.pdfDichotomie et Newton Méthode d’Euler Bases de données Stocker intelligemment

Autour du pivot deGauss

Stéphane Gonnord

Plan

Résolution d’unsystèmeNimpe

Pivotons

Mise en œuvreAlgorithme précis

Code

Analyse del’algorithmeComplexité

Validité

Questions de précision

Bonus

Déterminant, LU, PJrQ...◮ Calcul de déterminant : facile pour une triangulaire.

A0 = A→ A1→ ·· · → AN ∈ T+

n (K)

Les opérations multiplient le déterminant par λk ...donc λ1...λk detA = detAN .

◮ « En général », si A est inversible, alors il existeL ∈ T −n (K) et U ∈ T +

n (K) telles que A = LU : on lestrouve par pivot.

◮ Il existe P et Q inversibles telles que PAQ = Jr :encore du pivot !

Page 295: tous Informatique pour tous Plan généralblog.psi945.fr/public/info-commune/sup/cours-sup-imprimable-python.pdfDichotomie et Newton Méthode d’Euler Bases de données Stocker intelligemment

Autour du pivot deGauss

Stéphane Gonnord

Plan

Résolution d’unsystèmeNimpe

Pivotons

Mise en œuvreAlgorithme précis

Code

Analyse del’algorithmeComplexité

Validité

Questions de précision

Bonus

C’est fini

Merci de votre attention !

Page 296: tous Informatique pour tous Plan généralblog.psi945.fr/public/info-commune/sup/cours-sup-imprimable-python.pdfDichotomie et Newton Méthode d’Euler Bases de données Stocker intelligemment

Résolution

numérique

d’équations

différentielles

Stéphane Gonnord

Plan

Résoudre une

équation

différentielle

Différents niveaux de

résolution

Schémas numériques

Qualité de l’approximation

Méthode d’Euler

Mise en place

Vectorialisation

Représentation des solutions

Résolution numérique d’équations

différentiellesMéthode d’Euler... et un peu mieux

Stéphane Gonnord

[email protected]

www.mp933.fr

Lycée du parc - Lyon

Vendredi 21 et 28 mars 2014

Lycée du parc

Page 297: tous Informatique pour tous Plan généralblog.psi945.fr/public/info-commune/sup/cours-sup-imprimable-python.pdfDichotomie et Newton Méthode d’Euler Bases de données Stocker intelligemment

Résolution

numérique

d’équations

différentielles

Stéphane Gonnord

Plan

Résoudre une

équation

différentielle

Différents niveaux de

résolution

Schémas numériques

Qualité de l’approximation

Méthode d’Euler

Mise en place

Vectorialisation

Représentation des solutions

Plan

Résoudre une équation différentielle

Différents niveaux de résolution

Schémas numériques

Qualité de l’approximation

Méthode d’Euler

Mise en place

Vectorialisation

Représentation des solutions

Page 298: tous Informatique pour tous Plan généralblog.psi945.fr/public/info-commune/sup/cours-sup-imprimable-python.pdfDichotomie et Newton Méthode d’Euler Bases de données Stocker intelligemment

Résolution

numérique

d’équations

différentielles

Stéphane Gonnord

Plan

Résoudre une

équation

différentielle

Différents niveaux de

résolution

Schémas numériques

Qualité de l’approximation

Méthode d’Euler

Mise en place

Vectorialisation

Représentation des solutions

Résoudre une équation différentielle...

◮ fastoche

y ′ = 2y

y ′ =−3y + sin t

y ′′−4y ′+3y = t2 cos te3t

◮ Plus difficile :

y ′ =−3y +et2

Calcul d’une intégrale :

∫ t

αe3ses2

ds

◮ Ça se gâte :

y ′(t)+a(t)y(t) = b(t)

Calcul/évaluation de deux intégrales

Page 299: tous Informatique pour tous Plan généralblog.psi945.fr/public/info-commune/sup/cours-sup-imprimable-python.pdfDichotomie et Newton Méthode d’Euler Bases de données Stocker intelligemment

Résolution

numérique

d’équations

différentielles

Stéphane Gonnord

Plan

Résoudre une

équation

différentielle

Différents niveaux de

résolution

Schémas numériques

Qualité de l’approximation

Méthode d’Euler

Mise en place

Vectorialisation

Représentation des solutions

Résoudre une équation différentielle...

◮ Encore plus difficile :

y ′′−4y ′+3y =et

1+ t2

Deux intégrales, mais encore des « formules

exactes ».

◮ Pire :

y ′(t) = cos(t + y(t))y ′′ =−sin(y)

◮ Et même...

∂u

∂t+(u ·∇)u =−

1

ρ∇p+ γ∇2

u+1

ρF

Les FORMULES, c’est fini

Page 300: tous Informatique pour tous Plan généralblog.psi945.fr/public/info-commune/sup/cours-sup-imprimable-python.pdfDichotomie et Newton Méthode d’Euler Bases de données Stocker intelligemment

Résolution

numérique

d’équations

différentielles

Stéphane Gonnord

Plan

Résoudre une

équation

différentielle

Différents niveaux de

résolution

Schémas numériques

Qualité de l’approximation

Méthode d’Euler

Mise en place

Vectorialisation

Représentation des solutions

So what ?

◮ Problèmes de Cauchy

{

y ′ = f (t,y(t))y(a) = α

y ′′ = f (t,y(t),y ′(t))y(a) = αy ′(a) = β

◮ Maths : Il existe une unique solution.

◮ Vraie vie : OK... mais à quoi ressemble y(b) ?

Page 301: tous Informatique pour tous Plan généralblog.psi945.fr/public/info-commune/sup/cours-sup-imprimable-python.pdfDichotomie et Newton Méthode d’Euler Bases de données Stocker intelligemment

Résolution

numérique

d’équations

différentielles

Stéphane Gonnord

Plan

Résoudre une

équation

différentielle

Différents niveaux de

résolution

Schémas numériques

Qualité de l’approximation

Méthode d’Euler

Mise en place

Vectorialisation

Représentation des solutions

Schémas d’approximation

◮ Principe général : a = t0 < t1 < · · ·< tn = b ;

approximation des y(tk).

◮ Pas constant h =b−a

n: tk = a+ k ×h.

◮ Cas d’Euler :

y(tk+1)− y(tk)

tk+1 − tk≃ y ′(tk) = f (tk ,y(tk))

yk+1 = yk +h× f (tk ,yk)

◮ Autre point de vue :

y(tk+1)− y(tk) =∫ tk+1

tk

y ′(t)dt ≃ (tk+1 − tk)f (tk ,yk)

Page 302: tous Informatique pour tous Plan généralblog.psi945.fr/public/info-commune/sup/cours-sup-imprimable-python.pdfDichotomie et Newton Méthode d’Euler Bases de données Stocker intelligemment

Résolution

numérique

d’équations

différentielles

Stéphane Gonnord

Plan

Résoudre une

équation

différentielle

Différents niveaux de

résolution

Schémas numériques

Qualité de l’approximation

Méthode d’Euler

Mise en place

Vectorialisation

Représentation des solutions

Schéma d’Euler

tk tk+1

hF(tk ,y(tk ))y(tk )

y(tk+1)

y(tk ) +hF(tk ,y(tk ))

0.0 0.2 0.4 0.6 0.8 1.0t

0.5

1.0

1.5

2.0

2.5

3.0

y

La vraie solution : y=exp(t)

Méthode d'Euler, h=1/3

Page 303: tous Informatique pour tous Plan généralblog.psi945.fr/public/info-commune/sup/cours-sup-imprimable-python.pdfDichotomie et Newton Méthode d’Euler Bases de données Stocker intelligemment

Résolution

numérique

d’équations

différentielles

Stéphane Gonnord

Plan

Résoudre une

équation

différentielle

Différents niveaux de

résolution

Schémas numériques

Qualité de l’approximation

Méthode d’Euler

Mise en place

Vectorialisation

Représentation des solutions

Schémas d’approximation

◮ Heun :

yk+1 = yk +h

2(f (tk ,yk)+ f (tk+1,yk +hf (tk ,yk)))

◮ RK4 :

αk = yk +h

2f (tk ,yk ), βk = yk +

h

2f (tk +h/2,αk ), γk = yk +hf (tk +h/2,βk )

yk+1 = yk +h

6(f (tk ,yk )+2f (tk +h/2,αk )+2f (tk +h/2,βk )+ f (tk+1,γk )) .

Page 304: tous Informatique pour tous Plan généralblog.psi945.fr/public/info-commune/sup/cours-sup-imprimable-python.pdfDichotomie et Newton Méthode d’Euler Bases de données Stocker intelligemment

Résolution

numérique

d’équations

différentielles

Stéphane Gonnord

Plan

Résoudre une

équation

différentielle

Différents niveaux de

résolution

Schémas numériques

Qualité de l’approximation

Méthode d’Euler

Mise en place

Vectorialisation

Représentation des solutions

Différentes mesures de la qualité

◮ Schéma stable, consistant...

◮ Schéma convergeant : quand le pas tend vers 0, la

solution calculée tend (uniformément) vers la solution

mathématique.

◮ Schéma d’ordre p lorsque (grosso-modo) : la somme

des petites erreurs cumulées est en O(hp)

10-6 10-5 10-4 10-3 10-2 10-1

h

10-1410-1310-1210-1110-1010-910-810-710-610-510-410-310-210-1

e(h)

EulerHeunRK4

Page 305: tous Informatique pour tous Plan généralblog.psi945.fr/public/info-commune/sup/cours-sup-imprimable-python.pdfDichotomie et Newton Méthode d’Euler Bases de données Stocker intelligemment

Résolution

numérique

d’équations

différentielles

Stéphane Gonnord

Plan

Résoudre une

équation

différentielle

Différents niveaux de

résolution

Schémas numériques

Qualité de l’approximation

Méthode d’Euler

Mise en place

Vectorialisation

Représentation des solutions

Mise en œuvre d’Euler : fastoche

◮ Entrées (paramètres) ? sortie (résultat) ?

◮ Variables locales ?

◮ Code :

def euler(F, a, y0, b, n):

les_yk = [y0] # la liste des valeurs calculées

t = a # le temps du dernier calcul

h = float(b-a) / n # le pas

dernier = y0 # la dernière valeur calculée

for i in range(n):

suivant = dernier + h*F(t, dernier) # nouveau terme

les_yk.append(suivant) # on le place à la fin

t = t+h # le nouveau temps

dernier = suivant # mise à jour du dernier terme

return les_yk # c’est fini

Page 306: tous Informatique pour tous Plan généralblog.psi945.fr/public/info-commune/sup/cours-sup-imprimable-python.pdfDichotomie et Newton Méthode d’Euler Bases de données Stocker intelligemment

Résolution

numérique

d’équations

différentielles

Stéphane Gonnord

Plan

Résoudre une

équation

différentielle

Différents niveaux de

résolution

Schémas numériques

Qualité de l’approximation

Méthode d’Euler

Mise en place

Vectorialisation

Représentation des solutions

Et ça marche, ça ?

◮ Passer de l’équation concrète à la formalisation

générique :

y ′(t) = 2y(t)+ t −→ f (t,z) = 2z + t

◮ Mettre les arguments dans le bon ordre !

◮ Exemple : y ′ = y , avec y(0) = 1

>>> def f0(t, z):

return z

>>> euler(f0, 0, 1, 1, 3)

[1, 1.3333333333333333, 1.7777777777777777, 2.3703703703703702]

Page 307: tous Informatique pour tous Plan généralblog.psi945.fr/public/info-commune/sup/cours-sup-imprimable-python.pdfDichotomie et Newton Méthode d’Euler Bases de données Stocker intelligemment

Résolution

numérique

d’équations

différentielles

Stéphane Gonnord

Plan

Résoudre une

équation

différentielle

Différents niveaux de

résolution

Schémas numériques

Qualité de l’approximation

Méthode d’Euler

Mise en place

Vectorialisation

Représentation des solutions

Choix du pas

{

y ′ = −3y

y(0) = 1

◮ Vraie solution : y(t) = e−3t .

◮ Différents pas :

0 2 4 6 8 10t

2.0

1.5

1.0

0.5

0.0

0.5

1.0

1.5

2.0

y(t)

h=0.68

h=0.6

h=0.1

exp(−3t)

Page 308: tous Informatique pour tous Plan généralblog.psi945.fr/public/info-commune/sup/cours-sup-imprimable-python.pdfDichotomie et Newton Méthode d’Euler Bases de données Stocker intelligemment

Résolution

numérique

d’équations

différentielles

Stéphane Gonnord

Plan

Résoudre une

équation

différentielle

Différents niveaux de

résolution

Schémas numériques

Qualité de l’approximation

Méthode d’Euler

Mise en place

Vectorialisation

Représentation des solutions

Choix du pas

{

y ′ = y2

y(1) = 1

◮ Vraie solution : y(t) =1

2− t◮ Différents pas :

1.0 1.1 1.2 1.3 1.4 1.5 1.6 1.7 1.8t

1.0

1.5

2.0

2.5

3.0

3.5

4.0

4.5

5.0

y(t)

h=0.1

h=0.01

h=0.001

h=0.0001

Page 309: tous Informatique pour tous Plan généralblog.psi945.fr/public/info-commune/sup/cours-sup-imprimable-python.pdfDichotomie et Newton Méthode d’Euler Bases de données Stocker intelligemment

Résolution

numérique

d’équations

différentielles

Stéphane Gonnord

Plan

Résoudre une

équation

différentielle

Différents niveaux de

résolution

Schémas numériques

Qualité de l’approximation

Méthode d’Euler

Mise en place

Vectorialisation

Représentation des solutions

Deux scalaires : un vecteur

◮ Proies/prédateurs :{

x ′ = (A−By)xy ′ = (Cx −D)y

Avec F : (α,β) 7→ ((A−Bβ)α,(Cα−D)β) et

X = (x ,y) : X ′(t) = F(X(t)).

◮ Cas général : X ′(t) = F(t,X(t))

◮ Même schéma : Xk+1 = Xk +h×F(tk ,Xk)... mais

dans R2.

◮ Modification du code : remplacer y0 par (x0, y0),

dernier par (dernierx, derniery), etc.

◮ Version numpy : rien à changer dans le code d’Euler !

numpy.array([x0, y0])

Page 310: tous Informatique pour tous Plan généralblog.psi945.fr/public/info-commune/sup/cours-sup-imprimable-python.pdfDichotomie et Newton Méthode d’Euler Bases de données Stocker intelligemment

Résolution

numérique

d’équations

différentielles

Stéphane Gonnord

Plan

Résoudre une

équation

différentielle

Différents niveaux de

résolution

Schémas numériques

Qualité de l’approximation

Méthode d’Euler

Mise en place

Vectorialisation

Représentation des solutions

Ordre deux : égal ordre un !

◮ Pendule simple non amorti : θ′′ =−sinθ.

◮ X = (θ,θ′) ; X ′(t) = ? Exhiber F telle que

X ′(t) = F(X(t)).

◮ Cas général : idem !

◮ Ça vaut le coup !

0 2 4 6 8 1010

8

6

4

2

0

2

4Pendule non amorti : n=20

EulerHeunRK4

Page 311: tous Informatique pour tous Plan généralblog.psi945.fr/public/info-commune/sup/cours-sup-imprimable-python.pdfDichotomie et Newton Méthode d’Euler Bases de données Stocker intelligemment

Résolution

numérique

d’équations

différentielles

Stéphane Gonnord

Plan

Résoudre une

équation

différentielle

Différents niveaux de

résolution

Schémas numériques

Qualité de l’approximation

Méthode d’Euler

Mise en place

Vectorialisation

Représentation des solutions

Représentation des solutions◮ Liste des abscisses :

>>> np.linspace(0, 1, 5)

array([ 0. , 0.25, 0.5 , 0.75, 1. ])

>>> np.arange(0, 1.25, 0.25)

array([ 0. , 0.25, 0.5 , 0.75, 1. ])

◮ Exemple :

t = np.linspace(0, 1, 5)

yeuler = euler(f1, 0, 1, 1, 4)

np.plot(t, yeuler)

...

0.0 0.2 0.4 0.6 0.8 1.01.0

1.2

1.4

1.6

1.8

2.0

2.2

2.4

2.6

2.8Comparaison (avec un pas de 1/4) des methodes pour y′=y

EulerHeunRK4odeint

Page 312: tous Informatique pour tous Plan généralblog.psi945.fr/public/info-commune/sup/cours-sup-imprimable-python.pdfDichotomie et Newton Méthode d’Euler Bases de données Stocker intelligemment

Résolution

numérique

d’équations

différentielles

Stéphane Gonnord

Plan

Résoudre une

équation

différentielle

Différents niveaux de

résolution

Schémas numériques

Qualité de l’approximation

Méthode d’Euler

Mise en place

Vectorialisation

Représentation des solutions

Vectoriel et ordre 2◮ Choix de ce qu’on représente.

◮ Extraction des données : compréhension ou slicing.

>>> t = [ [1, 2], [3, 4], [5, 6] ]

>>> list( t[k][0] for k in range(len(t)))

[1, 3, 5]

>>> t = np.array([ [1, 2], [3, 4], [5, 6] ])

>>> t[ : , 0]

array([1, 3, 5])

◮ Proies-prédateurs :

0.0 0.5 1.0 1.5 2.0 2.5 3.00.0

0.5

1.0

1.5

2.0

2.5

3.0

Page 313: tous Informatique pour tous Plan généralblog.psi945.fr/public/info-commune/sup/cours-sup-imprimable-python.pdfDichotomie et Newton Méthode d’Euler Bases de données Stocker intelligemment

Résolution

numérique

d’équations

différentielles

Stéphane Gonnord

Plan

Résoudre une

équation

différentielle

Différents niveaux de

résolution

Schémas numériques

Qualité de l’approximation

Méthode d’Euler

Mise en place

Vectorialisation

Représentation des solutions

Ordre deux (pendule amorti)◮ Choix de ce qu’on représente : θ en fonction de t ...

0 2 4 6 8 10 12t

0

π

θ(t)

θ′(0)=1

θ′(0)=2

θ′(0)=5

θ′(0)=8

◮ Ou portrait de phase (θ(t),θ′(t))

0 π 2π 3πθ(t)

1

0

1

2

3

4

5

6

7

8

θ′ (t)

θ′(0)=1

θ′(0)=2

θ′(0)=5

θ′(0)=8

Page 314: tous Informatique pour tous Plan généralblog.psi945.fr/public/info-commune/sup/cours-sup-imprimable-python.pdfDichotomie et Newton Méthode d’Euler Bases de données Stocker intelligemment

Résolution

numérique

d’équations

différentielles

Stéphane Gonnord

Plan

Résoudre une

équation

différentielle

Différents niveaux de

résolution

Schémas numériques

Qualité de l’approximation

Méthode d’Euler

Mise en place

Vectorialisation

Représentation des solutions

Euler vs. Heun et RK4

◮ Test : y ′ = y avec y(0) = 1 ; évaluation de |y(1)−e|

◮ Euler :

n 103 104 105 106 107

Temps 6.7×10−4 6.9×10−3 6.8×10−2 6.7×10−1 6.7

Erreur 1.36×10−3 1.36×10−4 1.36×10−5 1.36×10−6 1.36×10−7

◮ Heun :n 103 104 105 106

Temps 1.4×10−3 1.3×10−2 1.3×10−1 1.4

Erreur 4.5×10−7 4.5×10−9 4.5×10−11 4.1×10−13

◮ RK4 :n 102 103 104

Temps 5.9×10−5 3.9×10−4 3.4×10−3

Erreur 2.1×10−6 2.2×10−10 2.0×10−14

◮ Commenter !

Page 315: tous Informatique pour tous Plan généralblog.psi945.fr/public/info-commune/sup/cours-sup-imprimable-python.pdfDichotomie et Newton Méthode d’Euler Bases de données Stocker intelligemment

Résolution

numérique

d’équations

différentielles

Stéphane Gonnord

Plan

Résoudre une

équation

différentielle

Différents niveaux de

résolution

Schémas numériques

Qualité de l’approximation

Méthode d’Euler

Mise en place

Vectorialisation

Représentation des solutions

C’est fini

Ça ne vous parle pas ? Alors n’essayez pas de savoir...

Page 316: tous Informatique pour tous Plan généralblog.psi945.fr/public/info-commune/sup/cours-sup-imprimable-python.pdfDichotomie et Newton Méthode d’Euler Bases de données Stocker intelligemment

Résolutiond’équations sur les

réels

Stéphane Gonnord

Plan

RecherchedichotomiquePrincipe

Mise en place

Analyse de l’algorithme

Méthode de NewtonPrincipe

Mise en place

Problèmes pratiques

BonusAvec numpy

Autour de Newton

Résolution d’équations sur les réelsAlgorithme dichotomique et méthode de Newton

Stéphane Gonnord

[email protected]

www.mp933.fr

Lycée du parc - Lyon

Vendredi 4 avril 2014Lycée du parc

Page 317: tous Informatique pour tous Plan généralblog.psi945.fr/public/info-commune/sup/cours-sup-imprimable-python.pdfDichotomie et Newton Méthode d’Euler Bases de données Stocker intelligemment

Résolutiond’équations sur les

réels

Stéphane Gonnord

Plan

RecherchedichotomiquePrincipe

Mise en place

Analyse de l’algorithme

Méthode de NewtonPrincipe

Mise en place

Problèmes pratiques

BonusAvec numpy

Autour de Newton

Plan

Recherche dichotomiquePrincipeMise en placeAnalyse de l’algorithme

Méthode de NewtonPrincipeMise en placeProblèmes pratiques

BonusAvec numpyAutour de Newton

Page 318: tous Informatique pour tous Plan généralblog.psi945.fr/public/info-commune/sup/cours-sup-imprimable-python.pdfDichotomie et Newton Méthode d’Euler Bases de données Stocker intelligemment

Résolutiond’équations sur les

réels

Stéphane Gonnord

Plan

RecherchedichotomiquePrincipe

Mise en place

Analyse de l’algorithme

Méthode de NewtonPrincipe

Mise en place

Problèmes pratiques

BonusAvec numpy

Autour de Newton

Position du problème

En maths, on résout des équations... genre, encore plus

compliqué que ax2 +bx + c = 0.

...Ben non. Enfin oui, mais non !

◮ ax = b ; AX = B...

◮ ax2 +bx + c = 0 ; P(x) = 0.

◮ sin t = cos t , sin3 t +3cos5 t = 1/840...

◮ La solution ? Une solution ? Les solutions ?

◮ Précision ? Nombre de bits/décimales ?

◮ Temps de calcul ?

Page 319: tous Informatique pour tous Plan généralblog.psi945.fr/public/info-commune/sup/cours-sup-imprimable-python.pdfDichotomie et Newton Méthode d’Euler Bases de données Stocker intelligemment

Résolutiond’équations sur les

réels

Stéphane Gonnord

Plan

RecherchedichotomiquePrincipe

Mise en place

Analyse de l’algorithme

Méthode de NewtonPrincipe

Mise en place

Problèmes pratiques

BonusAvec numpy

Autour de Newton

Dichotomie : principe◮ Si f (a)< 0 < f (b) avec f continue, alors...

◮ Ou encore : si f (b)< 0 < f (a)... ou encoref (a)f (b)≤ 0... voire f (a)f (b)≤ 0 !

◮ Principe : localiser la (une) racine vis à vis dea+b

◮ Exemple : f (x) = x2 −2, a = 1, b = 2.

f (1) =−1 < 0 < 2 = f (2).f (3/2) = 1/4 > 0 > f (1)

f (5/4) =−7/16 < 0 < f (3/2)

Page 320: tous Informatique pour tous Plan généralblog.psi945.fr/public/info-commune/sup/cours-sup-imprimable-python.pdfDichotomie et Newton Méthode d’Euler Bases de données Stocker intelligemment

Résolutiond’équations sur les

réels

Stéphane Gonnord

Plan

RecherchedichotomiquePrincipe

Mise en place

Analyse de l’algorithme

Méthode de NewtonPrincipe

Mise en place

Problèmes pratiques

BonusAvec numpy

Autour de Newton

Un exemple standardÀ chaque étape, f (ak)≤ 0 ≤ f (bk).

y=x2 −2

a0 b0

a1 b1

a2 b2

a3 b3

a4 b4

a5 b5

1 21.51.25

1.375

1.43751.40625

√2

Page 321: tous Informatique pour tous Plan généralblog.psi945.fr/public/info-commune/sup/cours-sup-imprimable-python.pdfDichotomie et Newton Méthode d’Euler Bases de données Stocker intelligemment

Résolutiond’équations sur les

réels

Stéphane Gonnord

Plan

RecherchedichotomiquePrincipe

Mise en place

Analyse de l’algorithme

Méthode de NewtonPrincipe

Mise en place

Problèmes pratiques

BonusAvec numpy

Autour de Newton

Dichotomie : code◮ On maintient l’invariant f (g)× f (d)≤ 0 ;

◮ On casse [g,d ] en deux à chaque étape...jusqu’àavoir g−d ≤ 2ε.

◮ Et ça donne :

def dichotomie(f, a, b, epsilon):

g, d = a, b

fg, fd = f(g), f(d)

while d - g > 2*epsilon:

m = (g + d) / 2.

fm = f(m)

if fg * fm <= 0:

d, fd = m, fm

else:

g, fg = m, fm

return (g+d)/2

Page 322: tous Informatique pour tous Plan généralblog.psi945.fr/public/info-commune/sup/cours-sup-imprimable-python.pdfDichotomie et Newton Méthode d’Euler Bases de données Stocker intelligemment

Résolutiond’équations sur les

réels

Stéphane Gonnord

Plan

RecherchedichotomiquePrincipe

Mise en place

Analyse de l’algorithme

Méthode de NewtonPrincipe

Mise en place

Problèmes pratiques

BonusAvec numpy

Autour de Newton

Dichotomie : résultatsDistance à la racine, en fonction du nombre d’itérations :

0 10 20 30 40 50n

10-16

10-14

10-12

10-10

10-8

10-6

10-4

10-2

100

|x 0−r

|

MilieuMeilleur bord

Page 323: tous Informatique pour tous Plan généralblog.psi945.fr/public/info-commune/sup/cours-sup-imprimable-python.pdfDichotomie et Newton Méthode d’Euler Bases de données Stocker intelligemment

Résolutiond’équations sur les

réels

Stéphane Gonnord

Plan

RecherchedichotomiquePrincipe

Mise en place

Analyse de l’algorithme

Méthode de NewtonPrincipe

Mise en place

Problèmes pratiques

BonusAvec numpy

Autour de Newton

Terminaison, validité, complexité◮ Invariant : f (g)× f (d)≤ 0 (par récurrence) ; permet

de prouver la validité.

◮ Variant : d −g =b−a

2kaprès k passages dans la

boucle ; preuve de la terminaison.◮ Complexité ?

◮ d −g ≤ 2ε dès que...

◮ Après k itérations, |r − x0| ≤b−a

2k

◮ |r − x0| ≤1

10daprès combien d’itérations ?

◮ Exercice : après k itérations, combien de décimalesjustes ?

Page 324: tous Informatique pour tous Plan généralblog.psi945.fr/public/info-commune/sup/cours-sup-imprimable-python.pdfDichotomie et Newton Méthode d’Euler Bases de données Stocker intelligemment

Résolutiond’équations sur les

réels

Stéphane Gonnord

Plan

RecherchedichotomiquePrincipe

Mise en place

Analyse de l’algorithme

Méthode de NewtonPrincipe

Mise en place

Problèmes pratiques

BonusAvec numpy

Autour de Newton

Newton : f (x) = x2−2

y=x2 −2

u0 =2u1 =1.5

u2 ≃1.417√2 ≃1.414

Exercice : établir un+1 =1

2

(

un +2

un

)

Page 325: tous Informatique pour tous Plan généralblog.psi945.fr/public/info-commune/sup/cours-sup-imprimable-python.pdfDichotomie et Newton Méthode d’Euler Bases de données Stocker intelligemment

Résolutiond’équations sur les

réels

Stéphane Gonnord

Plan

RecherchedichotomiquePrincipe

Mise en place

Analyse de l’algorithme

Méthode de NewtonPrincipe

Mise en place

Problèmes pratiques

BonusAvec numpy

Autour de Newton

Convergence vers√

2◮ Classique :

◮ Les un sont ≥√

2 ;

◮ un+1 −√

2 ≤ (un −√

2)2

2;

◮ 0 ≤ un −√

2 ≤ 2−2n

...

◮ C’est ÉNÔÔÔÔÔRME !

◮ Exercice : Combien d’itérations sont suffisantes pouravoir 1000 décimales ?

◮ On obtient d décimales en temps O(lnd).

Page 326: tous Informatique pour tous Plan généralblog.psi945.fr/public/info-commune/sup/cours-sup-imprimable-python.pdfDichotomie et Newton Méthode d’Euler Bases de données Stocker intelligemment

Résolutiond’équations sur les

réels

Stéphane Gonnord

Plan

RecherchedichotomiquePrincipe

Mise en place

Analyse de l’algorithme

Méthode de NewtonPrincipe

Mise en place

Problèmes pratiques

BonusAvec numpy

Autour de Newton

Cas général

y=f(x)

unun+1un−un+1

f(un )

Exercice : établir un+1 = un −f (un)

f ′(un)

Page 327: tous Informatique pour tous Plan généralblog.psi945.fr/public/info-commune/sup/cours-sup-imprimable-python.pdfDichotomie et Newton Méthode d’Euler Bases de données Stocker intelligemment

Résolutiond’équations sur les

réels

Stéphane Gonnord

Plan

RecherchedichotomiquePrincipe

Mise en place

Analyse de l’algorithme

Méthode de NewtonPrincipe

Mise en place

Problèmes pratiques

BonusAvec numpy

Autour de Newton

De la suite vers un algorithme◮ Quand s’arrêter ? |un+1 −un| ≤ ε est raisonnable...

◮ Fastoche !

def Newton(f, fp, x0, epsilon):

u = x0

v = u - f(u)/fp(u)

while abs(v-u) > epsilon:

u, v = v, v - f(v)/fp(v)

return v

◮ Problèmes :◮ il faut connaître f ′ ;◮ la convergence n’est pas assurée ;◮ problème si f ′(v) (ou son évaluation numérique) est

nulle.

Page 328: tous Informatique pour tous Plan généralblog.psi945.fr/public/info-commune/sup/cours-sup-imprimable-python.pdfDichotomie et Newton Méthode d’Euler Bases de données Stocker intelligemment

Résolutiond’équations sur les

réels

Stéphane Gonnord

Plan

RecherchedichotomiquePrincipe

Mise en place

Analyse de l’algorithme

Méthode de NewtonPrincipe

Mise en place

Problèmes pratiques

BonusAvec numpy

Autour de Newton

RésultatsPour x2 = 2 puis sinx = 0 sur [3,4] :

0 1 2 3 4 5 6 7n

10-16

10-14

10-12

10-10

10-8

10-6

10-4

10-2

100|x n

−l|

Newton sur x x2 −2

Newton sur x sinx

Page 329: tous Informatique pour tous Plan généralblog.psi945.fr/public/info-commune/sup/cours-sup-imprimable-python.pdfDichotomie et Newton Méthode d’Euler Bases de données Stocker intelligemment

Résolutiond’équations sur les

réels

Stéphane Gonnord

Plan

RecherchedichotomiquePrincipe

Mise en place

Analyse de l’algorithme

Méthode de NewtonPrincipe

Mise en place

Problèmes pratiques

BonusAvec numpy

Autour de Newton

Deux problèmes

◮ f ′(x0)≃f (x0 +h)− f (x0)

h≃ f (x0 +h)− f (x0 −h)

2h·

10-8 10-7 10-6 10-5 10-4 10-3 10-2 10-1 100

h

10-12

10-11

10-10

10-9

10-8

10-7

10-6

10-5

10-4

10-3

10-2

10-1

100

|∆0(h)−

f′(0)|

Formule basiqueFormule symétrique

◮ Test d’arrêt :◮ |un+1 −un| ≤ ε n’implique pas |un+1 − x0| ≤ ε

◮ |f (un)| ≤ ε est-il mieux ? Pas si f ′(x0) = 0 !

Page 330: tous Informatique pour tous Plan généralblog.psi945.fr/public/info-commune/sup/cours-sup-imprimable-python.pdfDichotomie et Newton Méthode d’Euler Bases de données Stocker intelligemment

Résolutiond’équations sur les

réels

Stéphane Gonnord

Plan

RecherchedichotomiquePrincipe

Mise en place

Analyse de l’algorithme

Méthode de NewtonPrincipe

Mise en place

Problèmes pratiques

BonusAvec numpy

Autour de Newton

Utilisation de numpy/scipyPlusieurs fonctions dédiées :

◮ Racines d’un polynôme (ici X 3 +2X 2 −X −2) :

>>> from numpy import *

>>> roots([1, 2, -1, -2])

array([ 1., -2., -1.])

◮ Dichotomie (« slow but sure ») :

>>> bisect(sin, 3, 4)

3.141592653589214

◮ Newton (ou sécante sans dérivée) :

>>> newton(sin, 3, cos)

3.1415926535897931

◮ Etc : brentq, fsolve...

Page 331: tous Informatique pour tous Plan généralblog.psi945.fr/public/info-commune/sup/cours-sup-imprimable-python.pdfDichotomie et Newton Méthode d’Euler Bases de données Stocker intelligemment

Résolutiond’équations sur les

réels

Stéphane Gonnord

Plan

RecherchedichotomiquePrincipe

Mise en place

Analyse de l’algorithme

Méthode de NewtonPrincipe

Mise en place

Problèmes pratiques

BonusAvec numpy

Autour de Newton

Autour de Newton◮ Newton existe aussi...

◮ sur les complexes : f (z) = z2 −Z0 ; f (z) = z3 −1 ; ...

◮ chez les matrices : Mn+1 =1

2

(

Mn +AM−1n

)

; ...

◮ dans Rn ;

◮ en version cubique si on connaît f ′ et f ′′ : Halley

◮ Méthode de la sécante :◮ Partir de deux points. Couper le graphe : nouveau

point qui remplace l’avant dernier.◮ Couper le graphe avec es deux derniers points ; etc.◮ Un dessin ?◮ Convergence, complexité : assez semblable à

Newton.

Page 332: tous Informatique pour tous Plan généralblog.psi945.fr/public/info-commune/sup/cours-sup-imprimable-python.pdfDichotomie et Newton Méthode d’Euler Bases de données Stocker intelligemment

Bases de données

(1/4)

Stéphane Gonnord

Problématique

Des exemples

Un cahier des charges

SGBDR, SQL :

WTF ?

Architecture

Ça ressemble à quoi ?

Le langage SQL

Modèle relationnel

Des maths un peu fumeuses

Algèbre relationnelle

Bases de données (1/4)Introduction

Stéphane Gonnord

[email protected]

www.mp933.fr

Lycée du parc - Lyon

Vendredi 11 et 18 avril 2014

Lycée du parc

Page 333: tous Informatique pour tous Plan généralblog.psi945.fr/public/info-commune/sup/cours-sup-imprimable-python.pdfDichotomie et Newton Méthode d’Euler Bases de données Stocker intelligemment

Bases de données

(1/4)

Stéphane Gonnord

Problématique

Des exemples

Un cahier des charges

SGBDR, SQL :

WTF ?

Architecture

Ça ressemble à quoi ?

Le langage SQL

Modèle relationnel

Des maths un peu fumeuses

Algèbre relationnelle

Plan

Problématique

Des exemples

Un cahier des charges

SGBDR, SQL : WTF ?

Architecture

Ça ressemble à quoi ?

Le langage SQL

Modèle relationnel

Des maths un peu fumeuses

Algèbre relationnelle

Page 334: tous Informatique pour tous Plan généralblog.psi945.fr/public/info-commune/sup/cours-sup-imprimable-python.pdfDichotomie et Newton Méthode d’Euler Bases de données Stocker intelligemment

Bases de données

(1/4)

Stéphane Gonnord

Problématique

Des exemples

Un cahier des charges

SGBDR, SQL :

WTF ?

Architecture

Ça ressemble à quoi ?

Le langage SQL

Modèle relationnel

Des maths un peu fumeuses

Algèbre relationnelle

Les villes, départements et régions

◮ Ville(Lyon, Rhône, 484344) ; Département(Rhône,

69, Rhône-Alpes) ; Région(Rhône-Alpes).

◮ Comment relier tout cela ? Et si un département

change de nom ?

◮ Quelques questions :

◮ Quelles sont les villes de plus de 100000 habitants ?

◮ Combien y a-t-il de communes en France ?

◮ Quelle est la population vivant dans les villes

française ?

◮ Quelles sont les villes de la Loire ?

◮ Combien de départements/villes/habitants en région

Poitou-Charentes ?

◮ ...

Page 335: tous Informatique pour tous Plan généralblog.psi945.fr/public/info-commune/sup/cours-sup-imprimable-python.pdfDichotomie et Newton Méthode d’Euler Bases de données Stocker intelligemment

Bases de données

(1/4)

Stéphane Gonnord

Problématique

Des exemples

Un cahier des charges

SGBDR, SQL :

WTF ?

Architecture

Ça ressemble à quoi ?

Le langage SQL

Modèle relationnel

Des maths un peu fumeuses

Algèbre relationnelle

Base de notes de colles

◮ Colleurs et collés : nom, prénom, identifiant.

◮ Comment relier tout cela ; qu’est-ce qu’une colle ?

◮ Quelques questions :

◮ Quelles sont les notes de l’élève Ducobu ? Et la

moyenne ?

◮ Quelles ont été les colles avec une note ≤ 5 ?

◮ Quels colleurs ont donné des notes ≥ 17 ?

◮ Problèmes supplémentaires :

◮ Doit pouvoir être consultée par différentes

personnes.

◮ Doit pouvoir être modifiée par différentes personnes ;

pas les mêmes !

Page 336: tous Informatique pour tous Plan généralblog.psi945.fr/public/info-commune/sup/cours-sup-imprimable-python.pdfDichotomie et Newton Méthode d’Euler Bases de données Stocker intelligemment

Bases de données

(1/4)

Stéphane Gonnord

Problématique

Des exemples

Un cahier des charges

SGBDR, SQL :

WTF ?

Architecture

Ça ressemble à quoi ?

Le langage SQL

Modèle relationnel

Des maths un peu fumeuses

Algèbre relationnelle

Un annuaire

◮ « Ensemble » de personnes... nom, prénom,

téléphone, numéro sécu.

◮ Comment stocker ces données (en mémoire et sur le

disque dur) ?

◮ Quelques valeurs/lignes/enregistrements :

Gonnord Stéphane 068655**** 1711179****

Moynot Olivier 06******** 1*****

Garcia Antonio 06******** 1*****

...

◮ Quelques questions :

◮ Quelles sont les personnes ayant comme prénom

“Olivier” ?

◮ Quel est le nom des personnes nées en 1971 ?

◮ Qui a un nom commençant par un ’G’ ?

Page 337: tous Informatique pour tous Plan généralblog.psi945.fr/public/info-commune/sup/cours-sup-imprimable-python.pdfDichotomie et Newton Méthode d’Euler Bases de données Stocker intelligemment

Bases de données

(1/4)

Stéphane Gonnord

Problématique

Des exemples

Un cahier des charges

SGBDR, SQL :

WTF ?

Architecture

Ça ressemble à quoi ?

Le langage SQL

Modèle relationnel

Des maths un peu fumeuses

Algèbre relationnelle

Cahier des charges

◮ Ne pas tripatouiller soi-même des fichiers.

◮ Ne pas s’occuper de la façon dont sont stockées les

informations... ni où.

◮ Pouvoir collecter/fournir des informations sans

programmer. Avoir un langage de description de

requêtes.

◮ Avoir une bonne puissance d’expressivité, gérer des

entités et des relations entre elles.

◮ Autoriser des accès de différents clients.

◮ Garantir une certaine pérennité des données.

Page 338: tous Informatique pour tous Plan généralblog.psi945.fr/public/info-commune/sup/cours-sup-imprimable-python.pdfDichotomie et Newton Méthode d’Euler Bases de données Stocker intelligemment

Bases de données

(1/4)

Stéphane Gonnord

Problématique

Des exemples

Un cahier des charges

SGBDR, SQL :

WTF ?

Architecture

Ça ressemble à quoi ?

Le langage SQL

Modèle relationnel

Des maths un peu fumeuses

Algèbre relationnelle

Systèmes de Gestion de Base de

Données

◮ Un utilisateur ; des données. Et entre les deux ?

◮ Quelques scénarios :

◮ Alice va cherche un livre dans sa bibliothèque.

◮ Alice demande à Bob d’aller chercher un livre dans

sa bibliothèque.

◮ Au téléphone !

◮ Alice va chercher sur google les pages contenant

«Bob» et «coléoptère».

◮ Alice fait une requête SQLite depuis sqliteman

◮ Alice fait une requête SQL depuis Python + sqlite3

◮ Le SGBD est toujours entre l’utilisateur et les

données !

Page 339: tous Informatique pour tous Plan généralblog.psi945.fr/public/info-commune/sup/cours-sup-imprimable-python.pdfDichotomie et Newton Méthode d’Euler Bases de données Stocker intelligemment

Bases de données

(1/4)

Stéphane Gonnord

Problématique

Des exemples

Un cahier des charges

SGBDR, SQL :

WTF ?

Architecture

Ça ressemble à quoi ?

Le langage SQL

Modèle relationnel

Des maths un peu fumeuses

Algèbre relationnelle

Architecture « client-serveur »

◮ Accès direct utilisateur/base de donnée.

◮ Architecture légère.

client

serveur de basede données

client

client

crée une relation

modifie des valeurs

effectue une recherche

Page 340: tous Informatique pour tous Plan généralblog.psi945.fr/public/info-commune/sup/cours-sup-imprimable-python.pdfDichotomie et Newton Méthode d’Euler Bases de données Stocker intelligemment

Bases de données

(1/4)

Stéphane Gonnord

Problématique

Des exemples

Un cahier des charges

SGBDR, SQL :

WTF ?

Architecture

Ça ressemble à quoi ?

Le langage SQL

Modèle relationnel

Des maths un peu fumeuses

Algèbre relationnelle

Architecture « trois tiers »

◮ Tiers applicatif : intermédiaire.

◮ Rôle de gendarme/filtre/traducteur.

serveur de basede données

serveur applicatif

client

client

client

Page 341: tous Informatique pour tous Plan généralblog.psi945.fr/public/info-commune/sup/cours-sup-imprimable-python.pdfDichotomie et Newton Méthode d’Euler Bases de données Stocker intelligemment

Bases de données

(1/4)

Stéphane Gonnord

Problématique

Des exemples

Un cahier des charges

SGBDR, SQL :

WTF ?

Architecture

Ça ressemble à quoi ?

Le langage SQL

Modèle relationnel

Des maths un peu fumeuses

Algèbre relationnelle

Via sqliteman

Page 342: tous Informatique pour tous Plan généralblog.psi945.fr/public/info-commune/sup/cours-sup-imprimable-python.pdfDichotomie et Newton Méthode d’Euler Bases de données Stocker intelligemment

Bases de données

(1/4)

Stéphane Gonnord

Problématique

Des exemples

Un cahier des charges

SGBDR, SQL :

WTF ?

Architecture

Ça ressemble à quoi ?

Le langage SQL

Modèle relationnel

Des maths un peu fumeuses

Algèbre relationnelle

Via la librairie sqlite3

Page 343: tous Informatique pour tous Plan généralblog.psi945.fr/public/info-commune/sup/cours-sup-imprimable-python.pdfDichotomie et Newton Méthode d’Euler Bases de données Stocker intelligemment

Bases de données

(1/4)

Stéphane Gonnord

Problématique

Des exemples

Un cahier des charges

SGBDR, SQL :

WTF ?

Architecture

Ça ressemble à quoi ?

Le langage SQL

Modèle relationnel

Des maths un peu fumeuses

Algèbre relationnelle

Une base de données taupinale

Page 344: tous Informatique pour tous Plan généralblog.psi945.fr/public/info-commune/sup/cours-sup-imprimable-python.pdfDichotomie et Newton Méthode d’Euler Bases de données Stocker intelligemment

Bases de données

(1/4)

Stéphane Gonnord

Problématique

Des exemples

Un cahier des charges

SGBDR, SQL :

WTF ?

Architecture

Ça ressemble à quoi ?

Le langage SQL

Modèle relationnel

Des maths un peu fumeuses

Algèbre relationnelle

Villes, départements et régions◮ Schéma relationnel :

communes(id integer, dep integer, nom text,

pop integer)

◮ Nom des villes de plus de 100000 habitants ?

SELECT nom FROM communes WHERE pop>=100000;

41, dont deux « Saint-Denis »

SELECT DISTINCT nom FROM communes WHERE pop>=100000;

◮ Population vivant dans des villes française ?

SELECT COUNT(pop) FROM communes;

36705... pas bézef ! !

SELECT SUM(pop) FROM communes;

64612967 : mieux !

Page 345: tous Informatique pour tous Plan généralblog.psi945.fr/public/info-commune/sup/cours-sup-imprimable-python.pdfDichotomie et Newton Méthode d’Euler Bases de données Stocker intelligemment

Bases de données

(1/4)

Stéphane Gonnord

Problématique

Des exemples

Un cahier des charges

SGBDR, SQL :

WTF ?

Architecture

Ça ressemble à quoi ?

Le langage SQL

Modèle relationnel

Des maths un peu fumeuses

Algèbre relationnelle

Premières jointures◮ Autres tables :

departements(id integer, reg integer, nom text)

regions(id integer, nom text)

◮ Quels sont les noms des villes de la Loire ?

SELECT communes.nom FROM

communes JOIN departements

ON communes.dep = departements.id

WHERE departements.nom = ’Loire’;

◮ Combien de départements/villes/habitants en région Poitou-Charentes ?

SELECT COUNT(*) FROM

regions JOIN departements

ON regions.id = departements.reg

WHERE regions.nom = ’Poitou-Charentes’;

SELECT COUNT(*) FROM

regions JOIN departements JOIN communes

ON regions.id = departements.reg AND communes.dep = departements.id

WHERE regions.nom = ’Poitou-Charentes’;

SELECT SUM(pop) FROM

regions JOIN departements JOIN communes

ON regions.id = departements.reg AND communes.dep = departements.id

WHERE regions.nom = ’Poitou-Charentes’;

Page 346: tous Informatique pour tous Plan généralblog.psi945.fr/public/info-commune/sup/cours-sup-imprimable-python.pdfDichotomie et Newton Méthode d’Euler Bases de données Stocker intelligemment

Bases de données

(1/4)

Stéphane Gonnord

Problématique

Des exemples

Un cahier des charges

SGBDR, SQL :

WTF ?

Architecture

Ça ressemble à quoi ?

Le langage SQL

Modèle relationnel

Des maths un peu fumeuses

Algèbre relationnelle

Colleurs et collés◮ Schéma relationnel :

colleurs(idc integer, nom tet, prenom text)

eleve(idc integer, nom tet, prenom text)

colle(idc integer, ide integer, date text, note integer)

◮ Quelles sont les notes de l’élève Ducobu ? Et la moyenne ?

SELECT note FROM

colles JOIN eleves

ON colles.ide = eleves.ide

WHERE nom=’Ducobu’;

SELECT AVG(note) from ...

◮ Quels colleurs ont donné des notes ≥ 17 ?

SELECT DISTINCT colleurs.nom from

colles JOIN colleurs

ON colles.idc = colleurs.idc

WHERE colles.note>=18;

Page 347: tous Informatique pour tous Plan généralblog.psi945.fr/public/info-commune/sup/cours-sup-imprimable-python.pdfDichotomie et Newton Méthode d’Euler Bases de données Stocker intelligemment

Bases de données

(1/4)

Stéphane Gonnord

Problématique

Des exemples

Un cahier des charges

SGBDR, SQL :

WTF ?

Architecture

Ça ressemble à quoi ?

Le langage SQL

Modèle relationnel

Des maths un peu fumeuses

Algèbre relationnelle

Annuaire basique◮ Schéma relationnel :

personnes(nom text, prenom text, tel text, num_secu text)

◮ Quelles sont les personnes ayant comme prénom “Olivier” ?

SELECT * FROM personnes

WHERE prenom = ’Olivier’

◮ Quel est le nom des personnes nées en 1971 ? Plus dur,

n’est-ce pas ?

nom_secu = list(curseur.execute(

"""SELECT nom, secu FROM personnes"""))

res = [nom for (nom, secu) in nom_secu if secu[1:3]=’71’]

◮ Qui a un nom commençant par un ’G’ ? Idem

Page 348: tous Informatique pour tous Plan généralblog.psi945.fr/public/info-commune/sup/cours-sup-imprimable-python.pdfDichotomie et Newton Méthode d’Euler Bases de données Stocker intelligemment

Bases de données

(1/4)

Stéphane Gonnord

Problématique

Des exemples

Un cahier des charges

SGBDR, SQL :

WTF ?

Architecture

Ça ressemble à quoi ?

Le langage SQL

Modèle relationnel

Des maths un peu fumeuses

Algèbre relationnelle

Algèbre relationnelle

◮ Cadre mathématique pour être (faire ?) plus

sérieux/rigoureux.

◮ Un vocabulaire spécifique de description de données

(tuples).

◮ Une série d’opérateurs permettant de décrire

formellement les requêtes.

À moins que ce ne soit l’inverse :-)

◮ Attendu du programme : faire le lien entre :

◮ une requête en langage courant ;

◮ sa traduction en algèbre relationnelle ;

◮ sa traduction en langage SQL.

Page 349: tous Informatique pour tous Plan généralblog.psi945.fr/public/info-commune/sup/cours-sup-imprimable-python.pdfDichotomie et Newton Méthode d’Euler Bases de données Stocker intelligemment

Bases de données

(1/4)

Stéphane Gonnord

Problématique

Des exemples

Un cahier des charges

SGBDR, SQL :

WTF ?

Architecture

Ça ressemble à quoi ?

Le langage SQL

Modèle relationnel

Des maths un peu fumeuses

Algèbre relationnelle

Des maths fumeuses

◮ Un schéma relationnel :

S=((nom,texte),(prenom,texte),(classe,entier))

◮ Trois attributs, avec leur domaine (type).

◮ Une valeur (ligne/ un enregistrement) :

(nom:’Gonnord’, prenom:’Stéphane’, classe:841)

◮ Une relation (table) : ensemble de valeurs

R(S) =

{

(nom:’Gonnord’, prenom:’Stéphane’, classe:842)

(nom:’Garcia’, prenom:’Antonio’, classe:841)

(nom:’Moynot’, prenom:’Olivier’, classe:842)

(nom:’Gonnord’, prenom:’Stéphane’, classe:841)

}

(conception mauvaise ; pourquoi ?)

Page 350: tous Informatique pour tous Plan généralblog.psi945.fr/public/info-commune/sup/cours-sup-imprimable-python.pdfDichotomie et Newton Méthode d’Euler Bases de données Stocker intelligemment

Bases de données

(1/4)

Stéphane Gonnord

Problématique

Des exemples

Un cahier des charges

SGBDR, SQL :

WTF ?

Architecture

Ça ressemble à quoi ?

Le langage SQL

Modèle relationnel

Des maths un peu fumeuses

Algèbre relationnelle

Opérateurs de l’algèbre relationnelle

◮ Quel est le nom des département dont l’identifiant est10 ou 11 ?

◮ Sélection σCond selon une condition (valeur d’un

champ, non, et, ou).

◮ Union, intersection de deux tables. Inutile ?

◮ Projection πX d’une table selon un (des) attribut(s) X .

πNom (σId=10 ou Id=11 (departements))

◮ Soit, en SQL :

SELECT nom FROM departements WHERE id in (10, 11)

Ou encore :

SELECT nom FROM departements WHERE id=10 OR id=11

Page 351: tous Informatique pour tous Plan généralblog.psi945.fr/public/info-commune/sup/cours-sup-imprimable-python.pdfDichotomie et Newton Méthode d’Euler Bases de données Stocker intelligemment

Bases de données

(1/4)

Stéphane Gonnord

Problématique

Des exemples

Un cahier des charges

SGBDR, SQL :

WTF ?

Architecture

Ça ressemble à quoi ?

Le langage SQL

Modèle relationnel

Des maths un peu fumeuses

Algèbre relationnelle

C’est fini

Merci de votre attention !

Page 352: tous Informatique pour tous Plan généralblog.psi945.fr/public/info-commune/sup/cours-sup-imprimable-python.pdfDichotomie et Newton Méthode d’Euler Bases de données Stocker intelligemment

Bases de données(2/4)

Stéphane Gonnord

Contexte global

Requêtes SQLFormat général

Sélection, projection

Opérations ensemblistes

Joindre deux tablesProduit cartésien : non !

Jointure

Utilité des clés

Calculs d’agrégatsPrincipe

Formellement

Exercices

Finalement...

Bases de données (2/4)SQL avant la théorie

Stéphane Gonnord

[email protected]

www.mp933.fr

Lycée du parc - Lyon

Vendredi 16 et 23 mai 2014Lycée du parc

Page 353: tous Informatique pour tous Plan généralblog.psi945.fr/public/info-commune/sup/cours-sup-imprimable-python.pdfDichotomie et Newton Méthode d’Euler Bases de données Stocker intelligemment

Bases de données(2/4)

Stéphane Gonnord

Contexte global

Requêtes SQLFormat général

Sélection, projection

Opérations ensemblistes

Joindre deux tablesProduit cartésien : non !

Jointure

Utilité des clés

Calculs d’agrégatsPrincipe

Formellement

Exercices

Finalement...

PlanContexte global

Requêtes SQLFormat généralSélection, projectionOpérations ensemblistes

Joindre deux tablesProduit cartésien : non !JointureUtilité des clés

Calculs d’agrégatsPrincipeFormellementExercices

Finalement...

Page 354: tous Informatique pour tous Plan généralblog.psi945.fr/public/info-commune/sup/cours-sup-imprimable-python.pdfDichotomie et Newton Méthode d’Euler Bases de données Stocker intelligemment

Bases de données(2/4)

Stéphane Gonnord

Contexte global

Requêtes SQLFormat général

Sélection, projection

Opérations ensemblistes

Joindre deux tablesProduit cartésien : non !

Jointure

Utilité des clés

Calculs d’agrégatsPrincipe

Formellement

Exercices

Finalement...

Rappels◮ Base de donnée : ensemble de tables/relations.

◮ Communes◮ Départements◮ Régions

◮ Table/relation : ensemble de n-uplets/lignes/tuplesayant tous la même structure/le même schéma.

... ... ... ...1198 1 Joyeux 223

... ... ... ...69123 69 Lyon 484344

... ... ... ...◮ Schéma relationnel : décrit la structure des tables

d’une basecommune(id:entier, dep:texte, nom:texte, pop:entier)

Page 355: tous Informatique pour tous Plan généralblog.psi945.fr/public/info-commune/sup/cours-sup-imprimable-python.pdfDichotomie et Newton Méthode d’Euler Bases de données Stocker intelligemment

Bases de données(2/4)

Stéphane Gonnord

Contexte global

Requêtes SQLFormat général

Sélection, projection

Opérations ensemblistes

Joindre deux tablesProduit cartésien : non !

Jointure

Utilité des clés

Calculs d’agrégatsPrincipe

Formellement

Exercices

Finalement...

Autres exemples◮ Prénoms

◮ Schéma relationnel :(prenom:texte, nombre:entier, sexe:texte, annee:entier)

◮ Exemples de ligne :

(’Antonio’, 5, ’M’, 2012)(’Stéphane’, 6, ’M’, 2013)

◮ Communes/départements/régions◮ Schéma relationnel :

communes(id:entier,dep:texte,nom:texte,pop:entier)

departements(id:texte, reg:entier, nom:texte)

regions(id:entier, nom:texte)

◮ Exemples de lignes/tuples :

(’2A041’, ’2A’, ’Bonifacio’, 2955)(’2A’, 94, ’Corse-du-Sud’)

(94, ’Corse’)

Page 356: tous Informatique pour tous Plan généralblog.psi945.fr/public/info-commune/sup/cours-sup-imprimable-python.pdfDichotomie et Newton Méthode d’Euler Bases de données Stocker intelligemment

Bases de données(2/4)

Stéphane Gonnord

Contexte global

Requêtes SQLFormat général

Sélection, projection

Opérations ensemblistes

Joindre deux tablesProduit cartésien : non !

Jointure

Utilité des clés

Calculs d’agrégatsPrincipe

Formellement

Exercices

Finalement...

Communes, régions et départements

commune

id dep nom pop

. . . . . . . . . . . .69023 69 Lyon 484344

. . . . . . . . . . . .2BO50 2B Calvi 5394

. . . . . . . . . . . .

departement

id reg nom

. . . . . . . . .69 82 Rhône. . . . . . . . .2B 94 Haute-Corse. . . . . . . . .

region

id nom

. . . . . .82 Rhône-Alpes. . . . . .94 Corse. . . . . .

Page 357: tous Informatique pour tous Plan généralblog.psi945.fr/public/info-commune/sup/cours-sup-imprimable-python.pdfDichotomie et Newton Méthode d’Euler Bases de données Stocker intelligemment

Bases de données(2/4)

Stéphane Gonnord

Contexte global

Requêtes SQLFormat général

Sélection, projection

Opérations ensemblistes

Joindre deux tablesProduit cartésien : non !

Jointure

Utilité des clés

Calculs d’agrégatsPrincipe

Formellement

Exercices

Finalement...

Élèves, colleurs et colles

eleves

id nom prenom

0 Lyons Jacques-Louis1 Laurent Jean

. . . . . . . . .

profs

id nom prenom

0 Théron Pierre1 Brun Jules

. . . . . . . . .

colles

prof eleve semaine note

2 8 1 161 0 6 19

. . . . . . . . . . . .

Page 358: tous Informatique pour tous Plan généralblog.psi945.fr/public/info-commune/sup/cours-sup-imprimable-python.pdfDichotomie et Newton Méthode d’Euler Bases de données Stocker intelligemment

Bases de données(2/4)

Stéphane Gonnord

Contexte global

Requêtes SQLFormat général

Sélection, projection

Opérations ensemblistes

Joindre deux tablesProduit cartésien : non !

Jointure

Utilité des clés

Calculs d’agrégatsPrincipe

Formellement

Exercices

Finalement...

SQL, DDL, DML : WTF ?◮ SQL : Structured Query Language (the name of the

game ; « sequel »).

◮ DDL : Data Definition Language. CREATE, DROP. Pour

créer/supprimer une table dans une BD, selon un

schéma relationnel.

◮ DML : Data Manipulation Language. INSERT,UPDATE, DELETE. Pour alimenter les tables d’une

BD : nouvelle ligne, suppression, modification.

◮ Interrogation des données : SELECT. Pour faire une

requête.

Page 359: tous Informatique pour tous Plan généralblog.psi945.fr/public/info-commune/sup/cours-sup-imprimable-python.pdfDichotomie et Newton Méthode d’Euler Bases de données Stocker intelligemment

Bases de données(2/4)

Stéphane Gonnord

Contexte global

Requêtes SQLFormat général

Sélection, projection

Opérations ensemblistes

Joindre deux tablesProduit cartésien : non !

Jointure

Utilité des clés

Calculs d’agrégatsPrincipe

Formellement

Exercices

Finalement...

Format général

SELECT <expressions>

FROM <tables>

WHERE <conditions>

GROUP BY <attributs>

HAVING <conditions>

ORDER BY <attributs>

Dans telles tables, tu prends les lignes vérifiant tellesconditions ; tu les groupes selon tels critères. Dans lesgroupes, tu va juste prendre ceux dont telle moyenne (parexemple) sur tel attribut vérifie telle condition.Ah et puis tu vas me donner le résultat sous forme triéeselon tels attributs !

Page 360: tous Informatique pour tous Plan généralblog.psi945.fr/public/info-commune/sup/cours-sup-imprimable-python.pdfDichotomie et Newton Méthode d’Euler Bases de données Stocker intelligemment

Bases de données(2/4)

Stéphane Gonnord

Contexte global

Requêtes SQLFormat général

Sélection, projection

Opérations ensemblistes

Joindre deux tablesProduit cartésien : non !

Jointure

Utilité des clés

Calculs d’agrégatsPrincipe

Formellement

Exercices

Finalement...

Un exemple musclé

Wow !SELECT eleve, eleves.nom, COUNT(*) AS plantages

FROM eleves JOIN colles

ON eleve = ide

WHERE note<8

GROUP BY eleve

HAVING plantages>=5

ORDER BY plantages

Alors, que vient-on de demander ?

Don’t panic... on va commencer par des choses plus

simples !

Page 361: tous Informatique pour tous Plan généralblog.psi945.fr/public/info-commune/sup/cours-sup-imprimable-python.pdfDichotomie et Newton Méthode d’Euler Bases de données Stocker intelligemment

Bases de données(2/4)

Stéphane Gonnord

Contexte global

Requêtes SQLFormat général

Sélection, projection

Opérations ensemblistes

Joindre deux tablesProduit cartésien : non !

Jointure

Utilité des clés

Calculs d’agrégatsPrincipe

Formellement

Exercices

Finalement...

Sélection, projection◮ Requête de base :

SELECT <tels attributs>

FROM <telle table>

WHERE <telle(s) condition(s)>

◮ Exemples :◮ SELECT *

FROM communes

◮ SELECT nom,pop

FROM communes

◮ SELECT nom,pop

FROM communes

WHERE pop > 100000

◮ SELECT *

FROM triangles

WHERE ab = bc AND bc = ac

Page 362: tous Informatique pour tous Plan généralblog.psi945.fr/public/info-commune/sup/cours-sup-imprimable-python.pdfDichotomie et Newton Méthode d’Euler Bases de données Stocker intelligemment

Bases de données(2/4)

Stéphane Gonnord

Contexte global

Requêtes SQLFormat général

Sélection, projection

Opérations ensemblistes

Joindre deux tablesProduit cartésien : non !

Jointure

Utilité des clés

Calculs d’agrégatsPrincipe

Formellement

Exercices

Finalement...

Opérations ensemblistes◮ Union, intersection, différence : Bof...

◮ Rarement utile...◮ Souvent déconnant (torchons, serviettes...)

◮ SQL :◮ SELECT ... FROM ... UNION SELECT ... FROM ...◮ SELECT ... FROM ... INTERSECT SELECT ... FROM ...◮ SELECT ... FROM ... EXCEPT SELECT ... FROM ...

◮ Et si les attributs sont différents ? Je ne veux même

pas savoir ce qui se passe !

◮ Produit cartésien :◮ Définition : comme en maths :

A×B = {(a,b) |a ∈ A et b ∈ B}

◮ SQL : pas comme en maths !SELECT * from table1 , table2

Page 363: tous Informatique pour tous Plan généralblog.psi945.fr/public/info-commune/sup/cours-sup-imprimable-python.pdfDichotomie et Newton Méthode d’Euler Bases de données Stocker intelligemment

Bases de données(2/4)

Stéphane Gonnord

Contexte global

Requêtes SQLFormat général

Sélection, projection

Opérations ensemblistes

Joindre deux tablesProduit cartésien : non !

Jointure

Utilité des clés

Calculs d’agrégatsPrincipe

Formellement

Exercices

Finalement...

De l’inutilité du produit cartésien◮ Deux tables :

commune

nom dep

Lyon 69Calvi 2BCorte 2B

departement

id nom

69 Rhône2B Haute-Corse

◮ Et leur produit :commune×departement

nom dep id nom

Lyon 69 69 RhôneLyon 69 2B Haute-CorseCalve 2B 69 RhôneCalvi 2B 2B Haute-CorseCorte 2B 69 RhôneCorte 2B 2B Haute-Corse

Page 364: tous Informatique pour tous Plan généralblog.psi945.fr/public/info-commune/sup/cours-sup-imprimable-python.pdfDichotomie et Newton Méthode d’Euler Bases de données Stocker intelligemment

Bases de données(2/4)

Stéphane Gonnord

Contexte global

Requêtes SQLFormat général

Sélection, projection

Opérations ensemblistes

Joindre deux tablesProduit cartésien : non !

Jointure

Utilité des clés

Calculs d’agrégatsPrincipe

Formellement

Exercices

Finalement...

Jointure◮ Deux tables :

commune

nom dep

Lyon 69Calvi 2BCorte 2B

departement

id nom

69 Rhône2B Haute-Corse

◮ Et leur jointure naturelle :commune⋊⋉departement

nom dep id nom

Lyon 69 69 RhôneCalvi 2B 2B Haute-CorseCorte 2B 2B Haute-Corse

◮ Une base de données est pensée dès le départautour des jointures de tables.

Page 365: tous Informatique pour tous Plan généralblog.psi945.fr/public/info-commune/sup/cours-sup-imprimable-python.pdfDichotomie et Newton Méthode d’Euler Bases de données Stocker intelligemment

Bases de données(2/4)

Stéphane Gonnord

Contexte global

Requêtes SQLFormat général

Sélection, projection

Opérations ensemblistes

Joindre deux tablesProduit cartésien : non !

Jointure

Utilité des clés

Calculs d’agrégatsPrincipe

Formellement

Exercices

Finalement...

Jointure◮ Formellement : R1 ⋊⋉

a=bR2 ⊂ R1 ×R2...

◮ Et si R1 et R2 ont deux attributs de même nom ?

◮ En SQL : deux syntaxes équivalentes :

◮ SELECT ...

FROM table1 JOIN table2

ON condition

WHERE...

◮ SELECT ...

FROM table1 , table2

WHERE condition AND ...

◮ SQL, encore :

◮ WHERE table1.foo = table2.bar

◮ SELECT ...

FROM table1 JOIN table2 JOIN table3

ON condition1 AND condition2

WHERE...

Page 366: tous Informatique pour tous Plan généralblog.psi945.fr/public/info-commune/sup/cours-sup-imprimable-python.pdfDichotomie et Newton Méthode d’Euler Bases de données Stocker intelligemment

Bases de données(2/4)

Stéphane Gonnord

Contexte global

Requêtes SQLFormat général

Sélection, projection

Opérations ensemblistes

Joindre deux tablesProduit cartésien : non !

Jointure

Utilité des clés

Calculs d’agrégatsPrincipe

Formellement

Exercices

Finalement...

Exemples, utilité des clés◮ Clé : ensemble d’attributs caractérisant les éléments

d’une table.

◮ Clé primaire : UN attribut caractérisant les élémentsd’une table.

◮ Bien avoir le schéma relationnel devant les yeux.◮ Exemples :

◮ FROM communes JOIN departements

ON communes.dep = departements.id

◮ FROM eleves JOIN colles

ON ide = eleve

◮ FROM eleves JOIN colles JOIN profs

WHERE ide = eleve AND prof = idp

◮ FROM clubs c1 JOIN matchs JOIN clubs c2

ON c1.idc = eq1 AND c2.idc=eq2

Page 367: tous Informatique pour tous Plan généralblog.psi945.fr/public/info-commune/sup/cours-sup-imprimable-python.pdfDichotomie et Newton Méthode d’Euler Bases de données Stocker intelligemment

Bases de données(2/4)

Stéphane Gonnord

Contexte global

Requêtes SQLFormat général

Sélection, projection

Opérations ensemblistes

Joindre deux tablesProduit cartésien : non !

Jointure

Utilité des clés

Calculs d’agrégatsPrincipe

Formellement

Exercices

Finalement...

Agrégats◮ Principe :

◮ On regroupe (en général) les lignes suivant desattributs ;

◮ on applique une fonction d’agrégation à chacun deces groupes.

◮ Fonctions : MIN, MAX, COUNT(...), AVG, SUM(...)

◮ SQL :

SELECT reg,departements.nom,count(*)

FROM departements JOIN regions

ON reg = regions.id

GROUP BY reg

reg nom count(*)

1 Guadeloupe 111 Seine-et-Marne 8. . . . . . . . .

Page 368: tous Informatique pour tous Plan généralblog.psi945.fr/public/info-commune/sup/cours-sup-imprimable-python.pdfDichotomie et Newton Méthode d’Euler Bases de données Stocker intelligemment

Bases de données(2/4)

Stéphane Gonnord

Contexte global

Requêtes SQLFormat général

Sélection, projection

Opérations ensemblistes

Joindre deux tablesProduit cartésien : non !

Jointure

Utilité des clés

Calculs d’agrégatsPrincipe

Formellement

Exercices

Finalement...

Agrégats◮ Condition en amont (WHERE) et/ou aval (HAVING)

SELECT reg,departements.nom,count(*)

FROM departements JOIN regions

ON reg = regions.id

GROUP BY reg

HAVING count(*)>=5

reg nom count(*)

11 Seine-et-Marne 824 Cher 6. . . . . . . . .

◮ À retenir :

On projette les attributs selon lesquels on a groupé

les lignes.

Page 369: tous Informatique pour tous Plan généralblog.psi945.fr/public/info-commune/sup/cours-sup-imprimable-python.pdfDichotomie et Newton Méthode d’Euler Bases de données Stocker intelligemment

Bases de données(2/4)

Stéphane Gonnord

Contexte global

Requêtes SQLFormat général

Sélection, projection

Opérations ensemblistes

Joindre deux tablesProduit cartésien : non !

Jointure

Utilité des clés

Calculs d’agrégatsPrincipe

Formellement

Exercices

Finalement...

ExercicesAvec les tables aux schémas relationnels déjà vus,déterminer...

◮ la note maximale parmi toutes les colles ;

◮ la note maximale parmi toutes les colles deJaques-Louis Lions ;

◮ la liste des moyennes des élèves ;

◮ la liste des départements avec leur nombre decommunes ;

◮ le département qui a le plus de communes ;

◮ le département qui est le plus peuplé.

Page 370: tous Informatique pour tous Plan généralblog.psi945.fr/public/info-commune/sup/cours-sup-imprimable-python.pdfDichotomie et Newton Méthode d’Euler Bases de données Stocker intelligemment

Bases de données(2/4)

Stéphane Gonnord

Contexte global

Requêtes SQLFormat général

Sélection, projection

Opérations ensemblistes

Joindre deux tablesProduit cartésien : non !

Jointure

Utilité des clés

Calculs d’agrégatsPrincipe

Formellement

Exercices

Finalement...

Un algorithme de conception de requêtesPlusieurs passages sont possibles...

1. SELECT : quels attributs (et/ou agrégats) nousintéressent ?

2. FROM : issus de quelles tables ?

3. JOIN ... ON : si on joint n tables, il y a a priori n−1conditions de jointures.

4. WHERE : quelles conditions/restrictions en amont ?

5. GROUP BY : comment veut-on regrouper les tuples ?ajouter au SELECT.

6. HAVING : restrictions en aval, portant sur lesagrégats.

7. Sous-requètes éventuelles, paramétrées ou non.

Page 371: tous Informatique pour tous Plan généralblog.psi945.fr/public/info-commune/sup/cours-sup-imprimable-python.pdfDichotomie et Newton Méthode d’Euler Bases de données Stocker intelligemment

Bases de données(2/4)

Stéphane Gonnord

Contexte global

Requêtes SQLFormat général

Sélection, projection

Opérations ensemblistes

Joindre deux tablesProduit cartésien : non !

Jointure

Utilité des clés

Calculs d’agrégatsPrincipe

Formellement

Exercices

Finalement...

C’est fini

Merci de votre attention

Page 372: tous Informatique pour tous Plan généralblog.psi945.fr/public/info-commune/sup/cours-sup-imprimable-python.pdfDichotomie et Newton Méthode d’Euler Bases de données Stocker intelligemment

Bases de données

(3/π)

Stéphane Gonnord

L’objet du délit

Projections et

sélections

Jointures

Agrégation

Bases de données (3/π)Algèbre relationnelle

Stéphane Gonnord

[email protected]

www.mp933.fr

Lycée du parc - Lyon

Vendredi 30 mai 2014

Lycée du parc

Page 373: tous Informatique pour tous Plan généralblog.psi945.fr/public/info-commune/sup/cours-sup-imprimable-python.pdfDichotomie et Newton Méthode d’Euler Bases de données Stocker intelligemment

Bases de données

(3/π)

Stéphane Gonnord

L’objet du délit

Projections et

sélections

Jointures

Agrégation

Plan

L’objet du délit

Projections et sélections

Jointures

Agrégation

Page 374: tous Informatique pour tous Plan généralblog.psi945.fr/public/info-commune/sup/cours-sup-imprimable-python.pdfDichotomie et Newton Méthode d’Euler Bases de données Stocker intelligemment

Bases de données

(3/π)

Stéphane Gonnord

L’objet du délit

Projections et

sélections

Jointures

Agrégation

Vous comprenez ça ?

γMAX(c)

(

depγCOMPTAGE:c

(

departements ⋊⋉JCD

(

σpop≥104communes)))

SELECT max(c)

FROM

(SELECT dep, COUNT(*) AS c

FROM departements JOIN communes

ON departements.id=communes.dep

WHERE pop>=10000

GROUP BY dep)

Quel est le nombre maximal de communes de plus de

10000 habitants par département ?

Page 375: tous Informatique pour tous Plan généralblog.psi945.fr/public/info-commune/sup/cours-sup-imprimable-python.pdfDichotomie et Newton Méthode d’Euler Bases de données Stocker intelligemment

Bases de données

(3/π)

Stéphane Gonnord

L’objet du délit

Projections et

sélections

Jointures

Agrégation

L’objet de l’algèbre relationnelle

◮ Manipuler des relations (ensembles de tuples typés).

◮ Des opérateurs pour construire des relations à partir

d’autres relations.

◮ Binaires : union, intersection, ... produit, jointure (et

division).

◮ Unaires : projections, sélections.

◮ Des opérateurs d’agrégation.

Page 376: tous Informatique pour tous Plan généralblog.psi945.fr/public/info-commune/sup/cours-sup-imprimable-python.pdfDichotomie et Newton Méthode d’Euler Bases de données Stocker intelligemment

Bases de données

(3/π)

Stéphane Gonnord

L’objet du délit

Projections et

sélections

Jointures

Agrégation

Exemples

Trois relations différentes

communes

id dep nom pop

. . . . . . . . . . . .

69023 69 Lyon 484344

. . . . . . . . . . . .

2B050 2B Calvi 5394

. . . . . . . . . . . .

departements

id reg nom

. . . . . . . . .

69 82 Rhône

. . . . . . . . .

2B 94 Haute-Corse

. . . . . . . . .

regions

id nom

. . . . . .

82 Rhône-Alpes

. . . . . .

94 Corse

. . . . . .

Page 377: tous Informatique pour tous Plan généralblog.psi945.fr/public/info-commune/sup/cours-sup-imprimable-python.pdfDichotomie et Newton Méthode d’Euler Bases de données Stocker intelligemment

Bases de données

(3/π)

Stéphane Gonnord

L’objet du délit

Projections et

sélections

Jointures

Agrégation

Exemples

Et trois de plus

eleves

ide nom prenom

0 Lions Jacques-Louis

1 Laurent Jean

. . . . . . . . .

profs

idp nom prenom

0 Théron Pierre

1 Brun Jules

. . . . . . . . .

colles

prof eleve semaine note

2 8 1 16

1 0 6 19

. . . . . . . . . . . .

Page 378: tous Informatique pour tous Plan généralblog.psi945.fr/public/info-commune/sup/cours-sup-imprimable-python.pdfDichotomie et Newton Méthode d’Euler Bases de données Stocker intelligemment

Bases de données

(3/π)

Stéphane Gonnord

L’objet du délit

Projections et

sélections

Jointures

Agrégation

Projections

◮ Permet de choisir des colonnes

◮ Analogue de SELECT, attention !

◮ πA1,...,AkR ou πA1,...,Ak

(R) : on ne prend que les

attributs A1, ...,Ak

◮ Exemple :

◮ En français : «Donner les élèves (identifiants) et les

notes pour toutes les colles.»

◮ En SQL : SELECT eleve,note FROM colles.

◮ En algèbre relationnelle : πeleve,notecolles.

colles

prof eleve semaine note

2 8 1 16

1 0 6 19

. . . . . . . . . . . .

πeleve,notecolles

eleve note

8 16

0 19

. . . . . .

Page 379: tous Informatique pour tous Plan généralblog.psi945.fr/public/info-commune/sup/cours-sup-imprimable-python.pdfDichotomie et Newton Méthode d’Euler Bases de données Stocker intelligemment

Bases de données

(3/π)

Stéphane Gonnord

L’objet du délit

Projections et

sélections

Jointures

Agrégation

Sélections/restrictions

◮ Permet de choisir des lignes

◮ Conditions de type WHERE ...

◮ σCR ou σC(R), avec C la condition (formule logique

portant sur les attributs)

◮ Exemple :

◮ En français : «Quelles sont les villes de plus de

10000 habitants ?»

◮ En SQL : SELECT * FROM communes WHERE

pop>=10000

◮ En algèbre relationnelle : σpop≥10000communes.

communes

id dep nom pop

69023 69 Lyon 484344

2B050 2B Calvi 5394

. . . . . . . . . . . .

σpop≥10000(communes)id dep nom pop

69023 69 Lyon 484344

79049 79 Bressuire 18615

. . . . . . . . . . . .

Page 380: tous Informatique pour tous Plan généralblog.psi945.fr/public/info-commune/sup/cours-sup-imprimable-python.pdfDichotomie et Newton Méthode d’Euler Bases de données Stocker intelligemment

Bases de données

(3/π)

Stéphane Gonnord

L’objet du délit

Projections et

sélections

Jointures

Agrégation

On peut composer !

◮ Exemple : nom des villes de plus de 100000

habitants : traduire en SQL et algèbre relationnelle.

◮ SELECT nom FROM communes WHERE

pop>=100000

◮ πnomσpop≥105communes.

Exercice

Est-ce que ça commute ?

πnomσpop≥105communes =?σpop≥105πnomcommunes

πeleve,noteσnote≥19colles =?σnote≥19πeleve,notecolles

Page 381: tous Informatique pour tous Plan généralblog.psi945.fr/public/info-commune/sup/cours-sup-imprimable-python.pdfDichotomie et Newton Méthode d’Euler Bases de données Stocker intelligemment

Bases de données

(3/π)

Stéphane Gonnord

L’objet du délit

Projections et

sélections

Jointures

Agrégation

Produit : beurk◮ Deux tables :

communes

nom dep

Lyon 69

Calvi 2B

Corte 2B

departements

id nom

69 Rhône

2B Haute-Corse

◮ Et leur produit :

communes×departements

nom dep id nom

Lyon 69 69 Rhône

Lyon 69 2B Haute-Corse

Calve 2B 69 Rhône

Calvi 2B 2B Haute-Corse

Corte 2B 69 Rhône

Corte 2B 2B Haute-Corse

Page 382: tous Informatique pour tous Plan généralblog.psi945.fr/public/info-commune/sup/cours-sup-imprimable-python.pdfDichotomie et Newton Méthode d’Euler Bases de données Stocker intelligemment

Bases de données

(3/π)

Stéphane Gonnord

L’objet du délit

Projections et

sélections

Jointures

Agrégation

Jointure : produit avec sélection

◮ Formellement :

R1⋊⋉C

R2 = σC(R1 ×R2)

◮ t1 JOIN t2 ON (C) et t1,t2 WHERE (C) sont

proches... mais différentes !

◮ Par exemple : C = (dep = id)

communes ⋊⋉

Cdepartements

nom dep id nom

Lyon 69 69 Rhône

Calvi 2B 2B Haute-Corse

Corte 2B 2B Haute-Corse

Page 383: tous Informatique pour tous Plan généralblog.psi945.fr/public/info-commune/sup/cours-sup-imprimable-python.pdfDichotomie et Newton Méthode d’Euler Bases de données Stocker intelligemment

Bases de données

(3/π)

Stéphane Gonnord

L’objet du délit

Projections et

sélections

Jointures

Agrégation

Fonctions d’agrégation

◮ But : regrouper des lignes, et évaluer une fonction sur

ces regroupements.

◮ Syntaxe strange :

A1,...,Akγf1(B1),...,fi(Bi)table

◮ « Regroupe selon les attributs Ai , et calcule les

valeurs fi sur les attributs Bi »

◮ SQL :

SELECT A1,..,Ak,f1(B1),...,fi(Bi)

FROM table

GROUP BY A1,...,Ak

◮ Attention, les autres champs sont perdus ! En

particulier lors du calcul du maximum !

Page 384: tous Informatique pour tous Plan généralblog.psi945.fr/public/info-commune/sup/cours-sup-imprimable-python.pdfDichotomie et Newton Méthode d’Euler Bases de données Stocker intelligemment

Bases de données

(3/π)

Stéphane Gonnord

L’objet du délit

Projections et

sélections

Jointures

Agrégation

Exemples

◮ Population des différents départements :

depγSOMME(pop)(communes)

◮ Avec le nom du département ?

σn

(

dep,departements.nom:nγSOMME(pop)(R))

,

où R = communes ⋊⋉ departements

◮ Moyenne des différents élèves ? (sans les noms)

eleve,mγMOYENNE(note):mcolles

◮ Et enfin :

γMAX(c)

(

depγCOMPTAGE:c

(

departements ⋊⋉JCD

(

σpop≥104 communes)))

Page 385: tous Informatique pour tous Plan généralblog.psi945.fr/public/info-commune/sup/cours-sup-imprimable-python.pdfDichotomie et Newton Méthode d’Euler Bases de données Stocker intelligemment

Bases de données

(3/π)

Stéphane Gonnord

L’objet du délit

Projections et

sélections

Jointures

Agrégation

C’est fini

Merci de votre attention