Vous êtes sur la page 1sur 116

Ministère de l’Enseignement Supérieur République de Côte d’Ivoire

et de la Recherche Scientifique Union – Discipline – Travail

Institut National Polytechnique


Félix Houphouët-Boigny

Support de cours
INFORMATIQUE
MP – PC – PSI – PT

Dr Kouamé Abel ASSIELOU


Kouame.assielou@inphb.ci / askab.line@gmail.com
PLAN DE L’EXPOSE

Chapitre 1 : NOTION DE BASES DE DONNÉES


 BASES DE DONNÉES RELATIONNELLES
 LANGAGE SQL

Chapitre 2 : DICTIONNAIRES ET PROGRAMMATION


DYNAMIQUE

Chapitre 3 : ALGORITHMIQUE POUR L’INTELLIGENCE


ARTIFICIELLE
NOTION DE BASE DE DONNÉES Bases de données relationnelles
Langage SQL

Chapitre 1 :
BASES DE DONNÉES RELATIONNELLES

Axes d’étude

 Description applicative des bases de données en langage SQL.


 Interroger une base présentant des données à travers plusieurs relations

3/160
NOTION DE BASE DE DONNÉES Bases de données relationnelles
Langage SQL

Définitions
 Une Base de données est ensemble structuré de données informatiques (chaînes de
caractères, valeurs numériques, . . .) dans lequel
o les données sont enregistrées sur un support permanent
o les données ne figurent qu’une seule fois (pour éviter toute redondance d’informations)
o chaque objet ou entité possède un identifiant unique
 Une Base de données relationnelle est un type de base de données où les données sont
liées à d'autres informations au sein des bases de données. L’information est organisée
dans des tableaux à deux dimensions appelés des relations ou tables
o un attribut est un identificateur (un nom) décrivant une information stockée dans une base
(l'âge d'une personne, le nom d'une personne, le numéro de sécurité sociale),
o Le domaine d'un attribut est l'ensemble, fini ou infini, de ses valeurs possibles
o une occurrence, ou ligne ou enregistrement ou n-uplets, ou tuples, est un élément de
l'ensemble figuré par une relation 4/160
NOTION DE BASE DE DONNÉES Bases de données relationnelles
Langage SQL

Définitions
Exemples de relations

Titre Réalisateur Acteur Attribut


Casablanca M. Curtiz H. Bogart
Casablanca M. Curtiz P. Lorre
Les 400 coups F. Truffaut J.-P. Leaud nom a pour domaine
l'ensemble des
N° Sécu Nom Prénom combinaisons de lettres
354338532195874 Durand Caroline
345353545435811 Dubois Jacques enregistrement
173354684513546 Dupont Lisa
973564213535435 Dubois Rose-Marie
5/160
NOTION DE BASE DE DONNÉES Bases de données relationnelles
Langage SQL

Définitions
o Un schéma de relation précise le nom de la relation ainsi que la liste des attributs avec
leurs domaines
Exemple de relation de schéma :
Personne(N° sécu : Entier, Nom : Chaîne, Prénom : Chaîne)
o Un schéma de relation précise le nom de la relation ainsi que la liste des attributs avec
leurs domaines
o Un schéma relationnel est constitué par l'ensemble des schémas de relation,
o Une base de données relationnelle est constituée par l'ensemble des n-uplets des
différentes relations du schéma relationnel
o La cardinalité d'une relation est son nombre d'occurrences
Cardinalité de la relation Personne :
4
6/160
NOTION DE BASE DE DONNÉES Bases de données relationnelles
Langage SQL

Définitions
o Une clé candidate d'une relation est un ensemble minimal des attributs de la relation
dont les valeurs identifient à coup sûr une occurrence.
o La clé primaire d'une relation est une de ses clés candidates. Pour signaler la clé
primaire, ses attributs sont généralement soulignés.

clé primaire de relation Personne :


Personne(N° sécu : Entier, Nom : Chaîne, Prénom : Chaîne)

o Une clé étrangère dans une relation est formée d'un ou plusieurs attributs qui constituent
une clé primaire dans une autre relation.

7/160
NOTION DE BASE DE DONNÉES Bases de données relationnelles
Langage SQL

Définitions
 Un Système de gestion de Bases de Données (SGBD) est un logiciel qui permet de
décrire, modifier, interroger la base de données ;
Un système de gestion de bases de données doit permettre une plus grande rapidité
d’accès aux données, un mode multi utilisateurs, assurer la sécurité, la confidentialité,
l’intégrité, utiliser un langage "universel", une efficacité dans les mises à jour, etc
Exemples de SGBD :
o Microsoft Access
o Microsoft SQL Server
o MySQL
o Oracle Database
o Db2 (IBM)
8/160
NOTION DE BASE DE DONNÉES Bases de données relationnelles
Langage SQL

Généralités
 L'architecture client-serveur est un modèle de fonctionnement logiciel qui peut se
réaliser sur tout type d'architecture matérielle (petites ou grosses machines), si ces
architectures peuvent être interconnectées. Cette architecture est basée sur
l'utilisation de deux types de logiciels : un logiciel serveur et un logiciel client .
Le client :
o fait une requête (sollicite un service au serveur)
o reçoit une réponse du serveur
le serveur :
o réalise ce service sollicité
o renvoie le résultat au client.

9/160
NOTION DE BASE DE DONNÉES Bases de données relationnelles
Langage SQL

Généralités
 Architecture 3-tiers
Évolution de l’architecture client/serveur dans laquelle on a trois couches
logicielles. Le serveur est scindé en deux:
o Serveur 1 : stockage de données
o Serveur 2 : serveur métier, effectuant la gestion logicielle.

Le client communique avec le


serveur métier qui lui-même
communique avec le serveur de
stockage :
Les bases de données actuelles sont
construites sur ce schéma 10/160
NOTION DE BASE DE DONNÉES Bases de données relationnelles
Langage SQL

Normalisation relationnelle
 Notion de dépendance fonctionnelle (DF)
o Les dépendances fonctionnelles expriment la sémantique entre les attributs d’une relation
o Soit R(A1, A2,… An) un schéma de relation, et X et Y des sous-ensembles de A1, A2,… An. On
dit que X détermine Y ou que Y dépend fonctionnellement de X si, et seulement si, des
valeurs identiques de X impliquent des valeurs identiques de Y. On le note : X → Y
o Autrement dit, il existe une dépendance fonctionnelle entre un ensemble d'attributs X et un
ensemble d'attributs Y, que l'on note X → Y, si connaissant une occurrence de X on ne peut lui
associer qu'une seule occurrence de Y.
Exemple : Soit le schéma de relation suivant : Commande Cours Heure Jour Salle
(Num_Commande, Num_Article, Designation, Qte_Commandée) , Informatique 10h Lundi 1
On a les dépendances fonctionnelles suivantes: Français 10h Lundi 2
Num_Article → Designation Français 16h Mardi 1
Num_Commande → Qte_Commandée Anglais 18h Mercredi 1
{salle, jour, heure} → cours, car dans une salle à un
moment donné il ne peut avoir lieu qu'un cours. 11/160
NOTION DE BASE DE DONNÉES Bases de données relationnelles
Langage SQL

Normalisation relationnelle
 propriétés de la dépendance fonctionnelle

Réflexivité : X  X et X  Y  Y  X
Transitivité : X  Y et Y  Z  X  Z
Projection : X  Y , Z  X  Y et X  Z
Augmentation : X  Y  Z , X , Z  Y
Pseudo  transitivité : X  Y et Y , Z  T  X , Z  T
Additivité : X  Y et X  Z  X  Y , Z

12/160
NOTION DE BASE DE DONNÉES Bases de données relationnelles
Langage SQL

Normalisation relationnelle
 dépendance fonctionnelle élémentaire
o Une dépendance fonctionnelle élémentaire est une dépendance fonctionnelle de la forme
X → A, où A est un attribut unique n'appartenant pas à X et où il n'existe pas X′ inclus au sens
strict dans X (i.e. X′ ⊂ X) tel que X′ → A.
o Autrement dit, une dépendance fonctionnelle est élémentaire si la cible est un attribut unique et
si la source ne comporte pas d'attributs superflus.

 dépendance fonctionnelle directe


o Une dépendance fonctionnelle X → A est une dépendance fonctionnelle directe s'il n'existe
aucun attribut B tel que l'on puisse avoir X → B et B → A.
o En d'autres termes, cela signifie que la dépendance entre X et A ne peut pas être obtenue par
transitivité.

13/160
NOTION DE BASE DE DONNÉES Bases de données relationnelles
Langage SQL

Normalisation relationnelle
 Dépendance multivaluée
o Etant donnée une relation R(A1, A2,… An), si à une valeur de X peuvent correspondre
plusieurs valeurs de Y, on dit qu’il existe une dépendance multivaluée de X vers Y et on note :
X ↠ Y ; ce qui se lit X multidétermine Y.
Exemple : Assuré (N°Assuré, Nom, Sinistre, Véhicule)
N°Assuré ↠ Véhicule , car un assuré peut posséder plusieurs véhicules
o La dépendance fonctionnelle est un cas particulier de la dépendance multivaluée

Travaux Dirigés 1 : Modèle relationnel

14/160
NOTION DE BASE DE DONNÉES Bases de données relationnelles
Langage SQL

Normalisation relationnelle
 Normalisation
o C’est un processus qui consiste à partir d’une table universelle composée de la
totalité des attributs sur laquelle on applique un algorithme de normalisation pour
avoir plusieurs tables,
o cet algorithme dit de normalisation est constitué des étapes qui vérifient si les
tables sont dans des états bien définis. Ces états s’appellent Formes normales

15/160
NOTION DE BASE DE DONNÉES Bases de données relationnelles
Langage SQL

Normalisation relationnelle
Codd (fondateur du modèle relationnel) a proposé 3 formes normales:
o 1NF: 1ère forme normale
o 2NF: 2ème forme normale
o 3NF: 3ème forme normale

D’autres formes normales ont été proposés plutard:


o BCNF: Forme normale de Boyce-Codd
o 4NF: 4ème forme normale
o 5NF: 5ème forme normale

16/160
NOTION DE BASE DE DONNÉES Bases de données relationnelles
Langage SQL

Normalisation relationnelle
 Première forme normale
o Une relation est en première forme normale si tous ses attributs sont en dépendance
fonctionnelle de la clé primaire et ne contiennent qu’une seule information. autrement dit, si tous les
attributs qui la composent sont atomiques c-à-d non sémantiquement décomposables (si aucune
subdivision de l‘information initiale n’apporte une information supplémentaire ou complémentaire)
o l'atomicité est violée si les attributs sont :
- constitués par un ensemble de valeurs énumérées (liste, tableaux...) dont les différentes
valeurs sont sémantiquement indépendantes.
- n'ayant aucune valeur (le "NULL" n'existe pas en algèbre relationnelle)
Exemple : Personnes (idpers, nom prenoms, tel, classe) , Clé primaire : idpers. Ici les attributs sont en
dépendance fonctionnelle de la clé primaire mais l’attribut « nom prenoms" contient deux informations (nom,
prenoms); il faut donc séparer cet attribut en deux attributs :
Emprunteurs( idpers, nom, prenoms, tel, classe)
17/160
NOTION DE BASE DE DONNÉES Bases de données relationnelles
Langage SQL

Normalisation relationnelle
 Deuxième forme normale
o On dit qu’une relation est en deuxième forme Normale si elle est en 1ère Forme Normale et si
tout attribut non clé primaire est dépendant de la clé primaire entièrement.

o Lorsque la clé primaire est constituée de plusieurs attributs, on dit qu’une relation est en
deuxième forme normale si elle est en première forme normale et si tous les attributs sont en
dépendance fonctionnelle de l’intégralité de la clé primaire et pas seulement que d’une partie de
celle-ci.

Exemple : Fournisseur (numFourn, adresse, article, prix)


DFS: numFourn → adresse et (numFourn, article) → prix.
Ce qui donne : Fournisseur (numFourn, adresse) et Produit (numFourn, article, prix) :

18/160
NOTION DE BASE DE DONNÉES Bases de données relationnelles
Langage SQL

Normalisation relationnelle
 Troisième forme normale
o Une relation est en troisième forme normale si elle est en deuxième forme normale et si
tous les attributs sont en dépendance fonctionnelle directe de la clé primaire et uniquement de
la clé primaire.
o autrement dit tout attribut non clé ne dépend pas d’un attribut non clé
Exemple : Eleves (Ideleve, Nom, Prenom, Adresse, CP, Ville, Tel, Classe, Salle)
Cette relation n’est pas en troisième forme normale car l’attribut Salle ne dépend pas de la clé
primaire Ideleve, mais de l’attribut Classe.
Exemple de règles de gestion
1) Un client passe une ou plusieurs commandes alors qu’une commande est passée par un et un seul client
2) Un fournisseur fournit au moins un produit alors qu’un produit peut être fourni par un et un seul fournisseur
3) Une commande porte sur au moins un produit alors qu’un produit peut ou non être l’objet d’une ou de
plusieurs commandes 19/160
NOTION DE BASE DE DONNÉES Bases de données relationnelles
Langage SQL

Modèle Logique de Données : MLD

20/160
NOTION DE BASE DE DONNÉES Bases de données relationnelles
Langage SQL

Modèle Logique de Données : MLD

21/160
NOTION DE BASE DE DONNÉES Bases de données relationnelles
Langage SQL

Modèle Logique de Données : MLD

22/160
NOTION DE BASE DE DONNÉES Bases de données relationnelles
Langage SQL

Modèle Logique de Données : MLD

23/160
NOTION DE BASE DE DONNÉES Bases de données relationnelles
Langage SQL

Langage SQL

24/160
NOTION DE BASE DE DONNÉES Bases de données relationnelles
Langage SQL

Algèbre relationnelle
 Introduction
L'algèbre relationnelle est un support mathématique cohérent sur lequel repose le
modèle relationnel. Elle permet de décrire les opérations qu'il est possible d'appliquer sur
des relations pour produire de nouvelles relations.
On peut distinguer trois familles d'opérateurs relationnels :.
o Les opérateurs unaires (Sélection, Projection) : ce sont les opérateurs les plus simples. Ils
permettent de produire une nouvelle table à partir d'une autre table.
o Les opérateurs binaires ensemblistes (Union, Intersection, Différence) : Ils permettent de
produire une nouvelle relation à partir de deux relations de même degré (nombre d'attributs) et de
même domaine.
o Les opérateurs binaires ou n-aires (Produit cartésien, Jointure, Division) : ils permettent de
produire une nouvelle table à partir de deux ou plusieurs autres tables.
25/160
25/78
NOTION DE BASE DE DONNÉES Bases de données relationnelles
Langage SQL

Algèbre relationnelle
 Sélection
On considère la relation A de schéma A(A1; A2; … ; An)
La sélection (parfois appelée restriction) de la relation A suivant le critère de sélection P est
une relation R de même schéma dont les tuples sont ceux de A satisfaisant le critère P.
o on note R = σP (A) ou R = RESTRICT(A/P) ou R = SELECT (A/P).
o Il s’agit d’extraction de lignes d’une table.

Numéro Nom Prénom Numéro Nom Prénom


5 Durand Caroline 5 Durand Caroline
1 Germain Stan 12 Dupont Lisa
12 Dupont Lisa Exemple de sélection sur la relation
3 Germain Rose-Marie Personne : σ(Numéro≥5)Personne
Exemple de relation Personne
26/160
NOTION DE BASE DE DONNÉES Bases de données relationnelles
Langage SQL

Algèbre relationnelle
 Projection
On considère la relation A de schéma A(A1; A2; … ; An)
La projection consiste à supprimer les attributs autres que A1,… An d'une relation et à
éliminer les n-uplets en double apparaissant dans la nouvelle relation ;
o on note R = π (A1; A2; … ; An )A ou R = PROJECT(A/ A1; A2; … ; An )
o C’est l’extraction de colonnes d’une table

Numéro Nom Prénom Nom


5 Durand Caroline Durand
1 Germain Stan Germain
12 Dupont Lisa Dupont
3 Germain Rose-Marie Exemple de projection sur la relation
Exemple de relation Personne Personne : Π(Nom)Personne
27/160
NOTION DE BASE DE DONNÉES Bases de données relationnelles
Langage SQL

Algèbre relationnelle
 Union
L'union est une opération portant sur deux relations R1 et R2 ayant le même schéma et
construisant une troisième relation constituée des n-uplets appartenant à chacune des deux
relations R1 et R2 sans doublon, on la note R1 ∪ R2.
o on la note R1 ∪ R2.
o Il s'agit une opération binaire ensembliste commutative
Relation R1 Relation R2 Relation R
Nom Prénom Nom Prénom Nom Prénom
Durand Caroline Dupont Lisa Durand Caroline Exemple d'union :
R = R1 ∪ R2
Germain Stan Juny Carole Germain Stan
Dupont Lisa Fourt Lisa Dupont Lisa
Germain Rose-Marie Germain Rose-Marie
Juny Carole
Fourt Lisa 28/160
NOTION DE BASE DE DONNÉES Bases de données relationnelles
Langage SQL

Algèbre relationnelle
 Intersection
L'intersection est une opération portant sur deux relations R1 et R2 ayant le même schéma et
construisant une troisième relation dont les n-uplets sont constitués de ceux appartenant aux
deux relations.
o on la note R1 ∩ R2.
o Il s'agit une opération binaire ensembliste commutative
Relation R1 Relation R2 Relation R
Nom Prénom Nom Prénom Nom Prénom
Exemple
Durand Caroline Dupont Lisa Durand Caroline d'intersection :
Germain Stan Juny Carole Dupont Lisa R = R1 ∩ R2
Dupont Lisa Fourt Lisa Juny Carole
Germain Rose-Marie Durand Caroline
Juny Carole
29/160
NOTION DE BASE DE DONNÉES Bases de données relationnelles
Langage SQL

Algèbre relationnelle
 Différence
La différence est une opération portant sur deux relations R1 et R2 ayant le même schéma et
construisant une troisième relation dont les n-uplets sont constitués de ceux ne se trouvant que
dans la relation R1 ;
o on la note R1 − R2
o Il s'agit une opération binaire ensembliste non commutative

Relation R1 Relation R2 Relation R


Nom Prénom Nom Prénom Nom Prénom
Exemple de
Durand Caroline Dupont Lisa Germain Stan différence :
Germain Stan Juny Carole Germain Rose-Marie R = R1 - R2
Dupont Lisa Fourt Lisa
Germain Rose-Marie Durand Caroline
Juny Carole
30/160
NOTION DE BASE DE DONNÉES Bases de données relationnelles
Langage SQL

Algèbre relationnelle
 Produit cartésien
Le produit cartésien est une opération portant sur deux relations R1 et R2 et qui construit une
troisième relation regroupant exclusivement toutes les possibilités de combinaison des
occurrences des relations R1 et R2.
o on la note R1 × R2.
o Il s'agit une opération binaire commutative
Relation Amie Relation Cadeau Relation R
Nom Prénom Article Prix Nom Prénom Article Prix
Fourt Lisa livre 45 Fourt Lisa livre 45 Exemple de produit
Juny Carole poupée 25 Fourt Lisa poupée 25 cartésien :
R = Amie × Cadeau
montre 87 Fourt Lisa montre 87
Juny Carole livre 45
Juny Carole poupée 25
Juny Carole montre 87 31/160
NOTION DE BASE DE DONNÉES Bases de données relationnelles
Langage SQL

Algèbre relationnelle
 Jointure
La jointure est une opération portant sur deux relations R1 et R2 qui construit une troisième relation
regroupant exclusivement toutes les possibilités de combinaison des occurrences des relations R1 et
R2 qui satisfont l'expression logique E.
o on la note R1 ▷◁ER2. ; Il s'agit une opération binaire commutative
la jointure n'est rien d'autre qu'un produit cartésien suivi d'une sélection : R1 ▷◁E R2 = σE (R1 × R2)
Exemple de jointure : R = Famille ▷◁ ( (Age ≤ AgeC) ∧ (Prix < 50) ) Cadeau
Relation Famille Relation Cadeau Relation R
Nom Prénom Age AgeC Article Prix Nom Prénom Age AgeC Article Prix
Fourt Lisa 6 99 livre 30 Fourt Lisa 6 99 livre 30
Juny Carole 42 6 poupée 60 Fourt Lisa 6 20 baladeur 45
Fidus Laure 16 20 baladeur 45 Fourt Lisa 6 10 montre 15
10 montre 15 Juny Carole 42 99 livre 30
Fidus Laure 16 99 livre 30
Fidus Laure 16 20 baladeur 45 32/160
NOTION DE BASE DE DONNÉES Bases de données relationnelles
Langage SQL

Algèbre relationnelle
 Fonctions de calculs
Expression arithmétique construite à partir d’attributs d’une relation, de constantes,
d’opérateurs arithmétiques et de fonctions simples sur les ensembles

o les opérateurs utilisés sont : + (pour l’addition), - (pour la soustraction), * (pour la multiplication), /
(pour la division).
o Les opérandes peuvent être des attributs de relations comportant les mêmes nombres de lignes ou
des constantes et des attributs de relation.
o Ces opérations portent sur des attributs du domaine de type numérique

33/160
NOTION DE BASE DE DONNÉES Bases de données relationnelles
Langage SQL

Algèbre relationnelle
 Fonctions de calculs
les fonctions sont :
o somme () : pour la somme des éléments d’une colonne ou la somme des éléments composant
chaque regroupement de lignes de la colonne. Les éléments composant les lignes de la colonne
doivent être de types numériques
o moyenne() : pour la moyenne des éléments d’une colonne ou la moyenne des éléments composant
chaque regroupement de lignes de la colonne. Les éléments composant les lignes de la colonne
doivent être de types numériques
o Compte() : pour compter le nombre de lignes composant la colonne ou le nombre de lignes
composant chaque regroupement de lignes de la colonne
o maximum() : pour rechercher le plus grand élément d’une colonne dont les lignes sont comparables
o Minimum() : pour rechercher le plus petit élément d’une colonne dont les lignes sont comparables
34/160
NOTION DE BASE DE DONNÉES Bases de données relationnelles
Langage SQL

Définitions
 SQL (Structured Query Language)
SQL est un langage de « programmation » standardisé qui est utilisé pour gérer des
bases de données relationnelles et effectuer diverses opérations sur les données
qu’elles contiennent. Créé à l’origine dans les années 1970, SQL est régulièrement
utilisé non seulement par les administrateurs de bases de données, mais aussi par les
développeurs qui écrivent des scripts d’intégration de données et les analystes de
données qui cherchent à mettre en place et à exécuter des requêtes analytiques.
Ce langage est commun à tous les SGBD

Il permet
o de construire la base
o d’éditer la base
o d’effectuer des recherches dans la base
35/160
NOTION DE BASE DE DONNÉES Bases de données relationnelles
Langage SQL

Définitions
 SQL (Structured Query Language)
Il est doté d'une syntaxe particulière que l'on doit respecter pour que la communication avec
la base de données se passe au mieux. Pour cela, on utilisera des mots clés spéciaux.

NB :
o La plupart des requêtes portant sur une base de données relationnelle ne peuvent pas être
réalisées à partir d'une seule opération mais en enchaînant successivement plusieurs opérations
o le langage SQL, contrairement à Python, n’est pas sensible à la casse, mais par convention, on
choisit de mettre uniquement en majuscule, les instructions du langage.

36/160
NOTION DE BASE DE DONNÉES Bases de données relationnelles
Langage SQL

Définitions
 SQL (Structured Query Language)
Il est doté d'une syntaxe particulière que l'on doit respecter pour que la communication avec
la base de données se passe au mieux. Pour cela, on utilisera des mots clés spéciaux.

NB :
o La plupart des requêtes portant sur une base de données relationnelle ne peuvent pas être
réalisées à partir d'une seule opération mais en enchaînant successivement plusieurs opérations
o le langage SQL, contrairement à Python, n’est pas sensible à la casse, mais par convention, on
choisit de mettre uniquement en majuscule, les instructions du langage.

37/160
NOTION DE BASE DE DONNÉES Bases de données relationnelles
Langage SQL

Installez le SGBD MySQL sur Windows


Rendez-vous sur https://dev.mysql.com/downloads/installer/ et sélectionnez le programme d’installation à télécharger.
Une fois le programme téléchargé, lancez-le en double-cliquant dessus.
Autorisez le programme à s'installer, et vous devriez arriver sur cette fenêtre

Je vous conseille de choisir la version Serveur only. Puis le cliquez bouton Next. Sur la page suivante, cliquez sur Execute 38/160
NOTION DE BASE DE DONNÉES Bases de données relationnelles
Langage SQL

Installez le SGBD MySQL sur Windows


Le programme va télécharger l'application MySQL. Jusque là, vous aviez
téléchargé le programme d'installation, mais pas MySQL à proprement parler. Une fois cette étape passée, cliquez sur Execute et/ou Next.

39/160
NOTION DE BASE DE DONNÉES Bases de données relationnelles
Langage SQL

Installez le SGBD MySQL sur Windows


Configuration : Bravo ! Vous avez bien installé MySQL. Mais... le travail n'est pas fini! En effet, il
faut maintenant configurer MySQL. Rassurez vous ca va très vite ! Vous devriez être sur cette page
: Cliquez sur simplement sur Next. Puis sur la page suivante,
on sélectionne, bien sur, Use Strong Password, puis Next.
Cela devrait vous amener sur cette page :

Pour info c'est le mot de passe que vous allez taper


c'est celui de l'utilisateur root. 40/160
NOTION DE BASE DE DONNÉES Bases de données relationnelles
Langage SQL

Installez le SGBD MySQL sur Windows


 Utilisateur “root”
o En informatique, et notamment dans le monde des bases de données, l’utilisateur dit
“root” (ou racine) est un utilisateur qui a tous les droits (création, suppression, mise à jour).

o C’est celui qu’on utilise pour installer des logiciels sur notre machine. Mais attention à ne
jamais l’utiliser en production ! En effet, il serait très dangereux qu’un utilisateur puisse
l’utiliser, car il obtiendrait l’accès à toutes nos données.

o Utiliser “en production” désigne l’utilisation de votre base par votre application, depuis
un serveur. Alors que “l’utilisation en local” signifie l’utilisation sur votre ordinateur, à des
fins de développement uniquement.

41/160
NOTION DE BASE DE DONNÉES Bases de données relationnelles
Langage SQL

Installez le SGBD MySQL sur Windows


On clique sur Next, puis Next, on arrive sur cette page et on clique sur Execute :

Une fois que tous les boutons sont


cochés, on clique sur Finish, Next et
Finish, et voila, le programme se ferme.

42/160
NOTION DE BASE DE DONNÉES Bases de données relationnelles
Langage SQL

Lancez MySQL
L'installation de MySQL est terminée, il faut maintenant le lancer. Dans la barre de recherche tapez MySQL :

Sélectionnez MySQL Command Line


Client. Cela va lancer un programme en
ligne de commande.

43/160
NOTION DE BASE DE DONNÉES Bases de données relationnelles
Langage SQL

Connexion
En tant que root
Tapez votre mot de passe et vous devriez avoir ceci :

44/160
NOTION DE BASE DE DONNÉES Bases de données relationnelles
Langage SQL

Sélection ou restriction
SELECT * FROM table WHERE condition ;
o La commande WHERE s’utilise en complément à une requête utilisant SELECT en vue
d’extraire les lignes d’une base de données qui respectent une condition. Les opérateurs :
Opérateurs de
Opérateurs logiques Autres opérateurs
comparaison
= égal AND ET logique IN Liste de plusieurs valeurs possibles
Valeur comprise dans un intervalle donnée (utile pour les
<> Pas égal OR OU logique BETWEEN
nombres ou dates)
!= Pas égal NOT NON LIKE Recherche en spécifiant le début, milieu ou fin d'un mot.
> supérieur IS NULL Valeur est nulle
< inférieur IS NOT NULL Valeur n'est pas nulle
>= Supérieur ou égal
<= Inférieur ou égal
45/160
NOTION DE BASE DE DONNÉES Bases de données relationnelles
Langage SQL

Sélection ou restriction
SELECT * FROM table WHERE condition ;
Exemple : Considérons la table : etudiants (de la base de données mp-d-2022_db) ci-
dessous. Depuis l’invite de commande MySQL exécutez chacune des requêtes qui suivent.
id_etd nom_etd prenoms_etd age_etd tel_etd
mpd01 DUPONT Alain 17 01-45-42-56-63
mpd02 MARTIN Marc 18 01-44-28-52-52
mpd03 BOUVIER Alain 16 01-44-28-52-50
mpd04 DUBOIS Paul 19 06-11-86-78-89
mpd05 DREYFUS Jean 18 02-41-58-89-52
mpd06 FAURE Alain 17 01-51-58-52-50
mpd07 PAUL Marcel 17 01-54-11-43-21
mpd08 DUVAL Arsene 16 06-55-41-42-95
mpd09 PHILIPPE Andre 18 01-48-98-92-21
mpd10 CHABAUD Daniel 17 01-44-22-56-21
mpd11 BAILLY Jean-Atanase 18 01-47-20-16-11
46/160
NOTION DE BASE DE DONNÉES Bases de données relationnelles
Langage SQL

Sélection ou restriction
SELECT * FROM table WHERE condition ;
Exemple : Considérons la table : etudiants (de la base de données mp-d-2022_db)
Req.01 : Sélection de toutes les données de la table etudiants

use mp-d-2022_db;
DESCRIBE etudiants;

47/160
NOTION DE BASE DE DONNÉES Bases de données relationnelles
Langage SQL

Sélection ou restriction
SELECT * FROM table WHERE condition ;
Exemple : Considérons la table : etudiants (de la base de données mp-d-2022_db)
Req.02 : Sélection de toutes les données de la table etudiants Req.03 : sélection des données avec condition ( prénoms est alain)

SELECT * FROM etudiants; SELECT * FROM etudiants WHERE prenoms_etd =


'alain';

48/160
NOTION DE BASE DE DONNÉES Bases de données relationnelles
Langage SQL

Sélection ou restriction
SELECT * FROM table WHERE condition ;
Exemple : Considérons la table : etudiants (de la base de données mp-d-2022_db)
Req.04 : Sélection de toutes les données de la table etudiants Req.05 : sélection des données avec condition ( prénoms est alain)
SELECT * FROM etudiants; SELECT * FROM etudiants WHERE prenoms_etd =
'alain';

49/160
NOTION DE BASE DE DONNÉES Bases de données relationnelles
Langage SQL

Sélection ou restriction
SELECT * FROM table WHERE condition ;
Exemple : Considérons la table : etudiants (de la base de données mp-d-2022_db)
Req.06 : sélection des données avec condition ( age ≥ 18) Req.07 : sélection des données avec condition ( age ≠ 18)
SELECT * FROM etudiants WHERE age_etd >= 18; SELECT * FROM etudiants WHERE age_etd != 18;

50/160
NOTION DE BASE DE DONNÉES Bases de données relationnelles
Langage SQL

Sélection ou restriction
Commande LIKE : SELECT * FROM table WHERE colonne LIKE modele;
o LIKE ‘%a’ : le caractère « % » est un caractère joker qui remplace tous les autres caractères. Ainsi, ce
modèle permet de rechercher toutes les chaines de caractère qui se termine par un « a ».

o LIKE ‘a%’ : ce modèle permet de rechercher toutes les lignes de « colonne » qui commence par un « a ».

o LIKE ‘%a%’ : ce modèle est utilisé pour rechercher tous les enregistrement qui utilisent le caractère « a ».

o LIKE ‘ta%on’ : ce modèle permet de rechercher les chaines qui commence par « ta » et qui se terminent
par « on », comme « talon » ou « tampon » ou « tacheron » ou « tabulation » ou « tarification ».

o LIKE ‘a_c’ : peu utilisé, le caractère « _ » (underscore) peut être remplacé par n’importe quel caractère,
mais un seul caractère uniquement (alors que le symbole pourcentage « % » peut être remplacé par un
nombre incalculable de caractères . Ainsi, ce modèle permet de retourner les lignes « aac », « abc » ou
même « azc ».
51/160
NOTION DE BASE DE DONNÉES Bases de données relationnelles
Langage SQL

Sélection ou restriction
SELECT * FROM table WHERE condition ;
Exemple : Considérons la table : etudiants (de la base de données mp-d-2022_db)
Req.08 : sélection des données avec condition Req.09 : sélection des données avec condition ( nom
( nom commence par ‘D’ ) contenant ‘il’ )
SELECT * FROM etudiants WHERE nom_etd SELECT * FROM etudiants WHERE nom_etd
LIKE 'd%'; LIKE '%il%';

52/160
NOTION DE BASE DE DONNÉES Bases de données relationnelles
Langage SQL

Sélection ou restriction
Commande WHERE avec des exemples utilisant les opérateurs.
Si code_postal, date_naiss et ville y figuraient
o SELECT * FROM etudiants WHERE age_etd IN (15, 16, 17) ;
o SELECT * FROM etudiants WHERE age_etd BETWEEN 16 AND 18 ;
o SELECT * FROM etudiants WHERE CodePostal LIKE '42%' ; // sous Access : LIKE "42*"
o SELECT * FROM etudiants WHERE Ville IS NULL ; // Etudiants pour lesquels la ville n'est pas
renseignée
o SELECT * FROM etudiants WHERE Ville IS NOT NULL ; // Etudiants pour lesquels la ville est
renseignée
o SELECT * FROM etudiants WHERE age_etd >= ALL (SELECT age_etd FROM etudiants) ; //
Etudiant(s) le(s) plus âgé(s)
o SELECT * FROM etudiants WHERE date_naiss BETWEEN ‘2003-04-01’ AND ‘2005-04-20’
53/160
NOTION DE BASE DE DONNÉES Bases de données relationnelles
Langage SQL

Sélection ou restriction
Commande LIMIT : SELECT * FROM table LIMIT nbre_result ;
o En SQL, la commande LIMIT permet de spécifier le nombre maximum de résultats que l’on souhaite
obtenir. Cette clause est souvent associée à un OFFSET permettant d'effectuer un décalage sur
l'ensemble des résultats. Un cas d'utilisation courant consiste à utiliser ces commandes dans le cadre du
développement d'une pagination.

o L'utilisation basique de la commande LIMIT affiche les nbre_result premiers enregistrements.

Commande LIMIT : SELECT * FROM table LIMIT nbre_result OFFSET nbre_start ;


o La commande OFFSET s'utilise uniquement en complément de la commande LIMIT. Elle sélectionne
uniquement les nbre_result premiers résultats sans le tout nbre_start.

54/160
NOTION DE BASE DE DONNÉES Bases de données relationnelles
Langage SQL

Sélection ou restriction
SELECT * FROM table LIMIT nbre_result ;
Exemple : Considérons la table : etudiants (de la base de données mp-d-2022_db)
Req.10 : sélection des 4 premiers enregistrements Req.11 : sélection des 4 premiers enregistrements à partir du 5e
de la table etudiants
SELECT * FROM etudiants limit 4; SELECT * FROM etudiants limit 4 OFFSET 5;

55/160
NOTION DE BASE DE DONNÉES Bases de données relationnelles
Langage SQL

Projection
La commande SELECT peut sélectionner une ou plusieurs colonnes d’une table.
o Obtenir une ou plusieurs colonnes avec doublons
SELECT nom_du_champ1, nom_du_champ2,…. FROM table ;

o Obtenir une ou plusieurs colonnes sans doublons


SELECT DISTINCT nom_du_champ1, nom_du_champ2,…. FROM table ;

Ou sous Oracle :
SELECT UNIQUE nom_du_champ1, nom_du_champ2,…. FROM table ;

56/160
NOTION DE BASE DE DONNÉES Bases de données relationnelles
Langage SQL

Projection
Exemple : Considérons la table : etudiants (de la base de données mp-d-2022_db)
Req.12 : Sélection de tous les prenoms de la table etudiants Req.13 : sélection des données avec condition ( prénoms est alain)
SELECT prenoms_etd FROM etudiants; SELECT DISTINCT prenoms_etd FROM etudiants;

57/160
NOTION DE BASE DE DONNÉES Bases de données relationnelles
Langage SQL

Intersection
SELECT * FROM tableA, tableB ;
Exemple : Considérons les tables : etudiants, livres, consulter de la base de données mp-d-2022_db
SELECT * FROM livres;

SELECT * FROM consulter;

58/160
NOTION DE BASE DE DONNÉES Bases de données relationnelles
Langage SQL

Intersection
SELECT * FROM tableA, tableB ;
Avec SQL de base
SELECT attribut1, attribut2, ... FROM table1 WHERE attribut1 IN (SELECT attribut1 FROM table2) ; ou
SELECT attribut1, attribut2, ... FROM table1 WHERE EXISTS (SELECT * FROM table2 WHERE table1.attribut1 = table2.attribut1) ; ou
SELECT attribut1, attribut2, ... FROM table1 WHERE attribut1 = ANY (SELECT attribut1 FROM table2) ;
Exemple : Considérons les tables : etudiants, livres, consulter de la base de données mp-d-2022_db
Req.14 : Sélection des étudiants (identifiants, noms et prenoms)
ayant consulté des livres
SELECT id_etd, nom_etd, prenoms_etd FROM etudiants
WHERE id_etd IN(SELECT id_etd FROM consulter);

SELECT id_etd, nom_etd, prenoms_etd FROM etudiants


WHERE id_etd = ANY (SELECT id_etd FROM consulter);

59/160
NOTION DE BASE DE DONNÉES Bases de données relationnelles
Langage SQL

Intersection
SELECT * FROM tableA, tableB ;
Avec SQL2 : l’opérateur INTERSECT ou une équi-jointure
SELECT attribut1, attribut2, ... FROM table1 INNER JOIN table2 ON table1.attribut1 = table2.attribut1 ; ou
SELECT attribut1, attribut2, ... FROM table1 INTERSECT SELECT attribut1, attribut2, ... FROM table2 ;

SQL INTERSECT : pour l’utiliser convenablement il faut que les 2 requêtes retourne le même nombre de colonnes, avec les
mêmes types et dans le même ordre. Compatibilité : PostgreSQL, SQL Server, Oracle et SQLite. Pas disponible sous MySQL

Exemple : Considérons les tables : etudiants, livres, consulter de la base de données mp-d-2022_db
Req.15 : Sélection des étudiants (identifiants, noms et prenoms)
ayant consulté des livres
SELECT etudiants.id_etd, nom_etd,
prenoms_etd FROM etudiants INNER JOIN
consulter ON etudiants.id_etd =
consulter.id_etd;

Remarque : Répétition des noms 60/160


NOTION DE BASE DE DONNÉES Bases de données relationnelles
Langage SQL

Différence
En SQL de base, plusieurs possibilités :
SELECT attribut1, attribut2, ... FROM table1 WHERE attribut1 NOT IN (SELECT attribut1 FROM table2); ou
SELECT attribut1, attribut2, ... FROM table1 WHERE NOT EXISTS (SELECT * FROM table2 WHERE table1.attribut1=table2.attribut1); ou
SELECT attribut1, attribut2, ... FROM table1 WHERE attribut1 <> ALL (SELECT attribut1 FROM table2);
Req.16 : Sélection des étudiants (identifiants, noms et prenoms)
n’ayant consulté aucun livres
SELECT id_etd, nom_etd, prenoms_etd FROM etudiants
WHERE id_etd NOT IN (SELECT id_etd FROM consulter);

En SQL2 avec l'opérateur EXCEPT:


SELECT attribut1, attribut2, ... FROM table1 EXCEPT SELECT attribut1, attribut2, ... FROM table2 ;

En SQL2 avec la jointure externe (dans le cas d’une vieille version de MySQL qui ne dispose ni du
EXCEPT, ni de la possibilité de SELECT imbriqués) :
SELECT table1.attribut1, table1.attribut2,... FROM table1 LEFT JOIN table2 ON table1.attribut1 =
table2.attribut1 WHERE table2.attribut1 IS NULL ;
61/160
NOTION DE BASE DE DONNÉES Bases de données relationnelles
Langage SQL

Union
Sans doublons SELECT liste d'attributs FROM table1 UNION SELECT liste d'attributs FROM table 2 ;
Avec doublons SELECT liste d'attributs FROM table1 UNION ALL SELECT liste d'attributs FROM table 2 ;
NB: Les deux requêtes SELECT doivent retourner exactement le même nombre de
colonnes, avec les mêmes types de données et dans le même ordre.
Req.17 : Sélection tous les étudiants (identifiants, noms et prenoms) de la table etudiants et ceux de la table etudiants1, sans doublon
SELECT id_etd, nom_etd, prenoms_etd
FROM etudiants UNION SELECT id_etd,
nom_etd, prenoms_etd FROM etudiants1;

Req.18 : Sélection tous les étudiants (identifiants, noms et


prenoms) de la table etudiants et ceux de la table
etudiants1, avec doublon
SELECT id_etd, nom_etd, prenoms_etd
FROM etudiants UNION ALL SELECT
id_etd, nom_etd, prenoms_etd FROM
etudiants1;
62/160
NOTION DE BASE DE DONNÉES Bases de données relationnelles
Langage SQL

Jointure
SELECT * FROM tableA, tableB, tableC, ... WHERE tableA.key1 = tableB.key1 AND tableB.key2=tableC.key2 AND ...;
Avec la clause INNER JOIN (jointure dite interne) à partir du SQL2: jointure interne pour retourner les
enregistrements quand la condition est vrai dans les 2 tables
SELECT *FROM tableA INNER JOIN tableB ON tableA.key = tableB.key
o Le mot clé INNER est facultatif sur la plupart des SGBDR (sauf MS Access).
o L'oubli d'un ON (et donc de la condition de jointure) empêchera l'exécution de la requête, alors qu'avec l'ancienne notation,
l'oubli d'une condition de jointure derrière WHERE, n'empêche pas l'exécution de la requête, produisant alors un produit
cartésien entre les tables.
o un enregistrement des tables tableA et tableB sont sélectionnés lorsque la donnée de la colonne « key » de tableA est
égal à la donnée de la colonne key de tableB.

Avec la clause NATURAL JOIN (équi-jointure naturelle) à partir du SQL2: joindre les 2 tables sur l'ensemble des
attributs qu'elles ont en commun (portant le même nom), mais en ne gardant qu'une seule colonne pour chaque
attribut joint:
SELECT * FROM tableA NATURAL JOIN tableB;
63/160
NOTION DE BASE DE DONNÉES Bases de données relationnelles
Langage SQL

Jointure
SELECT * FROM tableA, tableB, tableC, ... WHERE tableA.key1 = tableB.key1 AND tableB.key2=tableC.key2 AND ...;
Req.19 : Sélection des différents livres consultés (titre, auteur, date) par les étudiants (identifiants, noms et prenoms)

SELECT etudiants.id_etd, etudiants.nom_etd, etudiants.prenoms_etd, livres.titre_livre,


livres.auteur_livre, consulter.date FROM etudiants, consulter, livres WHERE
etudiants.id_etd=consulter.id_etd AND consulter.id_livre = livres.id_livre;

64/160
NOTION DE BASE DE DONNÉES Bases de données relationnelles
Langage SQL

Jointure
SELECT * FROM tableA, tableB, tableC, ... WHERE tableA.key1 = tableB.key1 AND tableB.key2=tableC.key2 AND ...;
Req.20 : Sélection des différents livres consultés (titre, auteur, date) par les étudiants (identifiants, noms et prenoms)

SELECT etudiants.id_etd, etudiants.nom_etd, etudiants.prenoms_etd, livres.titre_livre,


livres.auteur_livre, consulter.date FROM etudiants INNER JOIN consulter INNER JOIN livres
ON etudiants.id_etd = consulter.id_etd AND consulter.id_livre = livres.id_livre;

65/160
NOTION DE BASE DE DONNÉES Bases de données relationnelles
Langage SQL

Jointure
LEFT JOIN (ou LEFT OUTER JOIN) : jointure externe pour retourner tous les
enregistrements de la table de gauche (LEFT = gauche) même si la condition n’est pas vérifié
dans l’autre table. Le résultat est NULL du côté droit, s'il n'y a pas de correspondance.
SELECT * FROM tableA LEFT JOIN tableB ON tableA.key = tableB.key

RIGHT JOIN (ou RIGHT OUTER JOIN) : jointure externe pour retourner tous les
enregistrements de la table de droite (RIGHT = droite) même si la condition n’est pas vérifié
dans l’autre table. Les colonnes manquantes sont alors complétées par des valeurs NULL.
SELECT * FROM tableA RIGHT JOIN tableB ON tableA.key = tableB.key

FULL JOIN (ou FULL OUTER JOIN) : jointure externe pour retourner les résultats quand la
condition est vrai dans au moins une des 2 tables.
SELECT * FROM tableA FULL JOIN tableB ON tableA.key = tableB.key

La clause WHERE tableA.key IS NULL permet d’obtenir sans intersection les résultats des
jointures LEFT, RIGHT, FULL 66/160
NOTION DE BASE DE DONNÉES Bases de données relationnelles
Langage SQL

Sous requêtes
Dans le langage SQL une sous-requête (aussi appelé « requête imbriquée » ou
« requête en cascade ») consiste à exécuter une requête à l’intérieur d’une autre
requête. Une requête imbriquée est souvent utilisée au sein d’une clause WHERE
ou de HAVING pour remplacer une ou plusieurs constante.
SELECT * FROM nom_table1 WHERE nom_colonne = ( SELECT valeur FROM table2 LIMIT 1 )

67/160
NOTION DE BASE DE DONNÉES Bases de données relationnelles
Langage SQL

Renommage
Alias sur une colonne
SELECT nom_attribut1 AS alias_attribut1, nom_attribut2 FROM nom_table ou
SELECT nom_attribut1 alias_attribut1, nom_attribut2 FROM nom_table
Alias sur une table
SELECT * FROM table1 AS alias_de_table1; Ou SELECT * FROM table1 alias_de_table1
NB : Il est recommandé dans le standard ISO d’utiliser AS pour concevoir une requête SQL
Req.21 : Renommage du l’id_etd, nom_etd et prenom_etd en matricule, nom et prenom

SELECT id_etd AS Matricule, nom_etd


AS Nom, prenoms_etd AS Prenoms FROM
etudiants;

68/160
NOTION DE BASE DE DONNÉES Bases de données relationnelles
Langage SQL

Tri
SELECT attribut1, attribut2, attribut3, ...FROM table ORDER BY attribut1, attribut2
Par défaut les résultats sont classés par ordre ascendant, toutefois il est possible d’inverser
l’ordre en utilisant le suffixe DESC après le nom de la colonne. Par ailleurs, il est possible de
trier sur plusieurs colonnes en les séparant par une virgule.

SELECT attribut1, attribut2, attribut3, ...FROM table ORDER BY attribut1 ASC, attribut2
o ASC : par ordre croissant (Ascending)
o DESC : par ordre décroissant (Descending)
o Le tri s'effectue sur un ou plusieurs attributs, dans l'ordre croissant ou décroissant.
o La relation résultat a la même structure et le même contenu que la relation de départ.

69/160
NOTION DE BASE DE DONNÉES Bases de données relationnelles
Langage SQL

Tri
Req.22 : Sélection des etudiants (identifiant, nom, prenoms et age) du plus petit au plus grand

SELECT id_etd, nom_etd,


prenoms_etd, age_etd FROM etudiants
ORDER BY age_etd;

70/160
NOTION DE BASE DE DONNÉES Bases de données relationnelles
Langage SQL

Tri
Req.23 : Sélection des etudiants (identifiant, nom, prenoms et age) du plus grand au plus petit

SELECT id_etd, nom_etd,


prenoms_etd, age_etd FROM etudiants
ORDER BY age_etd DESC;

71/160
NOTION DE BASE DE DONNÉES Bases de données relationnelles
Langage SQL

Regrouper avec GROUP BY / HAVING


 GROUP BY

SELECT colonne1, fonction(colonne2) FROM table GROUP BY colonne1


NB: cette commande doit toujours s’utiliser après la commande WHERE et avant la
commande HAVING.

 HAVING
Presque similaire à WHERE à la seule différence que HAVING permet de filtrer en utilisant
des fonctions telles que SUM(), COUNT(), AVG(), MIN() ou MAX().
SELECT colonne1, SUM (colonne2) FROM nom_table GROUP BY colonne1
HAVING function (colonne2) operateur valeur

72/160
NOTION DE BASE DE DONNÉES Bases de données relationnelles
Langage SQL

Regrouper avec GROUP BY / HAVING

SELECT Nom, Prenoms, SUM (tarif) FROM


Achat GROUP BY Nom
Exemple : Considérons la table : Achat ci-dessous.
Nom Prenoms SUM(tarif)
id Nom Prenoms tarif date CHABAUD Dalien 262000
1 CHABAUD Dalien 102000 2012-10-23 MARTIN Marc 47000
2 MARTIN Marc 47000 2012-10-27 DREYFUS Marie 38000
3 DREYFUS Marie 18000 2012-11-05
4 DREYFUS Marie 20000 2012-11-14 SELECT Nom, Prenoms, SUM (tarif) FROM Achat
GROUP BY Nom HAVING SUM (tarif) > 40000
5 CHABAUD Dalien 160000 2012-12-03
Nom Prenoms SUM(tarif)
CHABAUD Dalien 262000
MARTIN Marc 47000
73/160
NOTION DE BASE DE DONNÉES Bases de données relationnelles
Langage SQL

Fonctions de calcul en SQL


 Calcul de Moyenne : AVG()
SELECT AVG (nom_colonne) FROM nom_table
permet de calculer la note moyenne de la colonne « nom_colonne » sur tous les enregistrements de la table. Il est possible :
• de filtrer les enregistrements concernés à l’aide de la commande WHERE
• d’utiliser la commande GROUP BY pour regrouper les données appartenant à la même entité

Exemple : Considérons les tables : etudiants, livres, consulter de la base de données mp-d-2022_db
Req.24 : Calcul de la moyenne des prix des livres Req.25 : Calcul de la moyenne des âges des étudiants

SELECT AVG (prix_livre) FROM livres; SELECT AVG (age_etd) FROM etudiants;

74/160
NOTION DE BASE DE DONNÉES Bases de données relationnelles
Langage SQL

Fonctions de calcul en SQL


 Compter avec COUNT()
SELECT COUNT(*) FROM table
Permet de connaître le nombre de lignes totales dans une table
SELECT COUNT(nom_colonne) FROM table
permet de compter les enregistrements sur la colonne « nom_colonne »
SELECT COUNT(DISTINCT nom_colonne) FROM table
permet de compter le nombre de valeur distincte pour la colonne « nom_colonne »
NB: il est plutôt conseillé de filtrer les lignes avec GROUP BY si c’est possible, puis d’effectuer un COUNT(*).

Exemple : Considérons les tables : etudiants de la base de données mp-d-2022_db


Req.26 : Détermine le nombre d’étudiants

SELECT COUNT(id_etd) FROM etudiants;

75/160
NOTION DE BASE DE DONNÉES Bases de données relationnelles
Langage SQL

Fonctions de calcul en SQL


 Trouver le maximum: MAX()
SELECT MAX(nom_colonne) FROM table
Permet de retourner la valeur maximum de la colonne « nom_colonne »
 Trouver le minimum: MIN()
SELECT MIN(nom_colonne) FROM table
Permet de retourner la valeur minimum de la colonne « nom_colonne »
 Calculer la somme: SUM()
SELECT SUM(nom_colonne) FROM table
permet de calculer la somme des valeurs contenu dans la colonne « nom_colonne ».
NB : Il est possible de filtrer les enregistrements avec la commande WHERE pour ne calculer la somme que
des éléments souhaités

76/160
NOTION DE BASE DE DONNÉES Bases de données relationnelles
Langage SQL

Fonctions de calcul en SQL


Exemple : Considérons les tables : etudiants, livres, consulter de la base de données mp-d-2022_db
Req.27 : Déterminer l’âge du/des plus âgé(s) des étudiants Req.28 : Déterminer l’âge du/des moins âgé(s) des étudiants
SELECT MAX(age_etd) FROM etudiants; SELECT MIN(age_etd) FROM etudiants;

Req.29 : Déterminer la somme des prix des livres Req.30 : Déterminer le prix du livre le plus cher de Victor Hugo
SELECT SUM(prix_livre) FROM livres; SELECT MAX(prix_livre) FROM livres
WHERE auteur_livre = 'Victor Hugo';

77/160
NOTION DE BASE DE DONNÉES Bases de données relationnelles
Langage SQL

Comparaison
 SQL ALL
Dans le langage SQL, la commande ALL permet de comparer une valeur dans l’ensemble de valeurs d’une sous-requête. En
d’autres mots, cette commande permet de s’assurer qu’une condition est « égale », « différente », « supérieure »,
« inférieure », « supérieure ou égale » ou « inférieure ou égale » pour tous les résultats retourné par une sous-requête.
SELECT * FROM table1 WHERE condition > ALL ( SELECT * FROM table2 WHERE condition2 )

 SQL ANY / SOME


Dans le langage SQL, la commande ANY (ou SOME) permet de vérifier si une valeur est « égale », « différente »,
« supérieur », « supérieur ou égale », « inférieur » ou « inférieur ou égale » pour au moins une des valeurs de la sous-
requête. A noter : le mot-clé SOME est un alias de ANY, l’un et l’autre des termes peut être utilisé. Cette commande s’utilise
dans une clause conditionnelle juste après un opérateur conditionnel et juste avant une sous-requête.
SELECT * FROM table1 WHERE condition > ANY (SELECT * FROM table2 WHERE condition2 )
Cette requête peut se traduire de la façon suivante : sélectionner toutes les colonnes de
table1, où la condition est supérieure à n’importe quel résultat de la sous-requête.
La commande IN est équivalent à l’opérateur = suivi de ANY.
78/160
NOTION DE BASE DE DONNÉES Bases de données relationnelles
Langage SQL

Travaux Dirigés : Langage SQL

79/160
DICTIONNAIRES & Prog. DYNAMIQUE Généralités
Programmation dynamique

Chapitre 2 :
DICTIONNAIRES ET
PROGRAMMATION DYNAMIQUE
Axes d’étude
Les dictionnaires sont utilisés en boîte noire dès la première année. En deuxième année,

 les principes de leur fonctionnement sont présentés.


 Ils peuvent être utilisés afin de mettre en mémoire des résultats intermédiaires quand
on implémente une stratégie d’optimisation par programmation dynamique.

80/160
DICTIONNAIRES & Prog. DYNAMIQUE Généralités
Programmation dynamique

Généralités
 Principes du hachage
Définition :
o Une table de hachage est une structure de données classique qui permet une association clé-
élément, où chaque élément est associé à une clé et chaque clé correspond à un seul élément.

o Elle consiste en un tableau (la table de hachage), dont les cases sont appelées alvéoles, et une
fonction (la fonction de hachage).

o La fonction de hachage associe à une clé une valeur de hachage. Elle fait donc correspondre la
clé d'un élément à une valeur qui est utilisée comme index dans la table de hachage pour cet
élément
81/160
DICTIONNAIRES & Prog. DYNAMIQUE Généralités
Programmation dynamique

Généralités
 Principes du hachage
But :
o Le but de cette structure de données est d'accéder le plus rapidement possible à un élément à
partir de sa clé.
o Les opérations permises par une table de hachage H sont les suivantes :
• INSÈRE (élt, clé) : insère dans la table de hachage un élément élt dont la clef est clé.
• ÉLÉMENT RECHERCHE (clé) : recherche dans la table de hachage si un élément est associé à la
clef clé et renvoie cet élément ; le cas échéant, renvoie nil.
• BOOLÉEN APPARTIENT (clé) : renvoie vrai si un élément est associé à la clef clé dans la table de
hachage.
Lorsque deux clés distinctes ont la même valeur de hachage, on dit qu'on a une collision.
82/160
DICTIONNAIRES & Prog. DYNAMIQUE Généralités
Programmation dynamique

Dictionnaires
 Rappel
o Un dictionnaire est une collection d'objets non-ordonnées.
o Il est composé d'éléments et chaque élément se compose d'une paire clé : valeur. Dans
certains langages de programmation, on parle de tableaux associatifs ou de hashs.
o Comme les listes, les dictionnaires sont des objets muables et dynamiques. Ils peuvent être
modifiés et s'étendre selon vos besoins.
o Un dictionnaire peut contenir des objets de n'importe quel type et même inclure d'autres
dictionnaires.
o C'est grâce à ces caractéristiques que les dictionnaires sont souvent utilisés pour créer des
structures de données complexes où plusieurs éléments sont imbriqués les uns dans les
autres !
83/160
DICTIONNAIRES & Prog. DYNAMIQUE Généralités
Programmation dynamique

Dictionnaires
 Rappel
o Les clés sont uniques et à chacune de ces clés est associée une valeur.
o Les clés doivent être des objets non mutables - en général on utilise des entiers, des chaînes de
caractères ou des tuples. Les valeurs peuvent être totalement quelconques.
o Un dictionnaire en Python peut s'apparenter à un dictionnaire de français où on accède à une
définition avec un mot.
o Contrairement aux listes qui sont délimitées par des crochets, on utilise des accolades pour les
dictionnaires.

84/160
DICTIONNAIRES & Prog. DYNAMIQUE Généralités
Programmation dynamique

Dictionnaires
 Création et manipulation
dict() ou {} dictionnaire vide
{c1:v1, c2:v2, ...} création d’un dictionnaire avec les clés 𝑐𝑖 et les valeurs 𝑣𝑖
accès à la valeur associée à la clé cle (en lecture et écriture). Lors d’une affectation, la clé
d[cle]
est créée si elle n’existe pas
d.keys() ensemble des clés du dictionnaires (objet itérable)
d.values() les valeurs du dictionnaires (objet itérable)
d.items() les couples clé/valeurs du dictionnaires (objet itérable)
len(d) taille du dictionnaire (nombre de clés)
k in d (ou k not in d) teste si la clé k est présente (absente) dans le dictionnaire
d.copy() réalise une copie superficielle du dictionnaire
d.pop(cle) retire le couple clé/valeur du dictionnaire et renvoie la valeur
d.popitem() retire et renvoie un couple clé/valeur du dictionnaire (le dernier créé)
del d[cle] efface le couple clé/valeur associé à la clé

85/160
DICTIONNAIRES & Prog. DYNAMIQUE Généralités
Programmation dynamique

Dictionnaires
 Création et manipulation
Exemples :

86/160
DICTIONNAIRES & Prog. DYNAMIQUE Généralités
Programmation dynamique

Dictionnaires
 Comparaison listes et dictionnaires
o L’accès aux éléments d’un dictionnaire est très efficace et utilise une fonction de « hachage » qui
associe un entier à chaque élément du dictionnaire.

o Les points à retenir (en simplifiant, notamment la fonction de hachage) et en notant n la taille de
la liste/dictionnaire :
• une liste est intéressante lorsque l’ordre des éléments est important, ou que l’indexation par des entiers est
importante - à l’opposé, un dictionnaire permet d’avoir un ensemble de clés totalement quelconque;
• le test d’appartenance est en 𝑂(1) pour un dictionnaire, alors qu’il peut être en 𝑂(𝑛) pour une liste;
• les temps d’accès à un élément donné est en 𝑂(1) pour les deux (un peu plus rapide pour les listes),
• le temps de suppression d’un élément est en 𝑂(1) pour un dictionnaire et en 𝑂(𝑛) pour une liste (sauf si c’est
le dernier élément qu’on retire avec pop())

87/160
DICTIONNAIRES & Prog. DYNAMIQUE Généralités
Programmation dynamique

Dictionnaires
 Adressage directe vs hachage
L’un des moyens simples de gérer un ensemble de valeurs est la liste dynamique Python. Elles sont
gérées par adressage direct. L’univers des clés est un ensemble d’entiers de 0 à 𝑛 − 1 et on a
directement accès à la case 𝑘, puis à sa donnée correspondante :

88/160
DICTIONNAIRES & Prog. DYNAMIQUE Généralités
Programmation dynamique

Dictionnaires
 Adressage directe vs hachage
On pourrait alors avoir une structure analogue mais « avec des trous », lorsqu’on a un ensemble fini
de clés possibles mais qu’elles ne sont pas toutes utilisées :
On voit l’avantage évident d’une plus grande souplesse
mais également l’inconvénient immédiat : si l’ensemble
des clés possibles est très grand alors on aura réservé
un tableau d’adresse très grand (donc beaucoup de
place mémoire) pour finalement peu de cases utilisées.
Admettons qu’on veuille des clés qui sont des chaînes
de 5 caractères, on aurait 265 (presque 12 millions)
cases à réserver pour n’en utiliser que quelques
centaines/milliers.
89/160
DICTIONNAIRES & Prog. DYNAMIQUE Généralités
Programmation dynamique

Dictionnaires
 Adressage directe vs hachage
L’idée est donc de réduire l’ensemble des clés par une fonction de hachage, c’est-à-dire une
fonction ℎ qui part du domaine des clés et renvoie un entier entre 0 et 𝑛 − 1 de sorte que pour les
clés utilisées, les valeurs de ℎ soient différentes. Cela donne un schéma ci-dessous

90/160
DICTIONNAIRES & Prog. DYNAMIQUE Généralités
Programmation dynamique

Dictionnaires
 Adressage directe vs hachage
Évidemment la fonction ℎ ne sera pas injective... le but est d’avoir une fonction de hachage suffisamment
aléatoire pour qu’il n’y ait pas de collisions sur les valeurs. Tant que la situation reste sous le format du dessin
précédent, le temps nécessaire pour savoir si une clé est présente dans le dictionnaire est en 𝑂(1) (on évalue
la fonction ℎ sur la clé souhaitée et on regarde s’il y a une valeur correspondante).
Plusieurs questions se posent alors :
• Quelle taille choisir pour les valeurs de ℎ ? l’idée, en Python, est de partir sur une taille pas trop grande et de doubler
la taille du dictionnaire dès qu’on se rapproche de cette valeur (comme les fonctions de hachage vont travailler
modulo 𝑛, c’est encore plus simple si 𝑛 est une puissance de 2 - ce qui explique le doublement).
• que faire s’il y a malgré tout des collisions? le principe est de chaîner les données dont les clés ont même valeur
hachée, comme dans le dessin suivant. Le test d’existence d’une clé sera un peu plus long puisqu’il faudra parcourir
la liste chaînée dans certains cas).
91/160
DICTIONNAIRES & Prog. DYNAMIQUE Généralités
Programmation dynamique

Dictionnaires
 Adressage directe vs hachage

92/160
DICTIONNAIRES & Prog. DYNAMIQUE Généralités
Programmation dynamique

Programmation dynamique
 Principe général
On aborde une nouvelle méthode de résolution de problèmes. Son principe général repose
sur une approche récursive dans laquelle on casse le problème principal en sous-problèmes
similaires.
Pour illustrer le principe général, on peut parler du problème de la recherche du plus court
chemin entre deux sommets 𝐴 et 𝐵. Si ce chemin passe par un sommet 𝐶 alors le sous-chemin de
𝐴 vers 𝐶 est aussi minimal (sinon on aurait un chemin plus court entre 𝐴 et 𝐶 , ce qui permettrait de
créer un chemin plus court entre 𝐴 et 𝐵). La technique est très différente de celles des algorithmes
de type diviser pour régner - penser aux exemples d’algorithmes de tri , tri-fusion ou tri rapide - car
pour ce dernier type, les sous-problèmes sont plutôt indépendants alors que dans la programmation
dynamique, au contraire, on obtient des sous-problèmes avec de fort liens entre eux.
93/160
DICTIONNAIRES & Prog. DYNAMIQUE Généralités
Programmation dynamique

Programmation dynamique
 Mémoïsation
En informatique, la mémoïsation est la mise en cache des valeurs de retour d'une fonction
selon ses valeurs d'entrée. Le but de cette technique d'optimisation de code est de diminuer le
temps d'exécution d'un programme informatique en mémorisant les valeurs retournées par une
fonction.

A titre d’exemple, considérons la suite de Fibonacci. Elle est définie par 𝐹0 = 𝐹1 = 1 et, pour
tout 𝑛 ⩾ 2, 𝐹𝑛 = 𝐹𝑛−1 + 𝐹𝑛−2.
La méthode récursive basique recalcule les termes plusieurs fois. Le principe de la
mémoïsation est de conserver une valeur déjà calculée afin de la réutiliser si besoin. On évite donc
les rappels inutiles à la fonction mais la contrepartie est qu’on doit stocker toutes ou beaucoup de
valeurs de la fonction. Voici plusieurs versions de ladite fonction :
94/160
DICTIONNAIRES & Prog. DYNAMIQUE Généralités
Programmation dynamique

Programmation dynamique
 Mémoïsation
La première approche est de conserver la définition récursive et de stocker les valeurs qu’on a
effectivement calculées.

95/160
DICTIONNAIRES & Prog. DYNAMIQUE Généralités
Programmation dynamique

Programmation dynamique
 Mémoïsation
La seconde approche est au contraire de partir du début et de remonter jusqu’à la valeur souhaitée.
Avec un dictionnaire

96/160
DICTIONNAIRES & Prog. DYNAMIQUE Généralités
Programmation dynamique

Programmation dynamique
 Mémoïsation
La seconde approche est au contraire de partir du début et de remonter jusqu’à la valeur souhaitée.
Avec une liste :

97/160
DICTIONNAIRES & Prog. DYNAMIQUE Généralités
Programmation dynamique

Programmation dynamique
 Mémoïsation
Plusieurs commentaires peuvent-être relevés sur ces exemples :
o on peut évidemment, dans les versions itératives, utiliser une variable Fibo globale et continuer
à la remplir uniquement si on demande une valeur plus élevée que celles calculées (sur la base
du dernier terme calculé)
o la version récursive est toujours limitée par la profondeur de récursion autorisée dans Python.
On ne peut pas directement demander 𝐹10000 alors que la version itérative le permet,
o on a évidemment un gain de temps énorme par rapport à la version récursive basique (on passe
d’une complexité exponentielle à une complexité linéaire),
o on voit apparaître deux approches très différentes entre les deux versions :
→ la version itérative est de type Bottom-Up ou de bas en haut : on part du bas et on remonte
vers les termes d’indices plus élevés,
→ la version récursive est de type Top-Down ou de haut en bas : on détermine la valeur
d’indice 𝑛 en redescendant vers les termes d’indices inférieurs (jusqu’à pouvoir les calculer)
98/160
DICTIONNAIRES & Prog. DYNAMIQUE Généralités
Programmation dynamique

Programmation dynamique
 Rendre la monnaie
Principe :
o On dispose de pièces de certaines valeurs pour rendre la monnaie (on suppose que le nombre de
pièce est illimité). On doit rendre un certain montant à l’aide de ces pièces, en donnant le moins
de pièces possibles.

o On dispose d’une certaine liste ordonnée de pièces.


Par exemple pour les pièces usuelles, on a : L = [1, 2, 5, 10, 20, 50, 100, 200]
mais on peut très bien disposer d’autres valeurs (il suffit d’avoir une pièce de 1 F pour être certain de
pouvoir toujours le faire).
Si on veut rendre 134, on peut le faire en le décomposant en 100 + 20 + 10 + 2 + 2

99/160
DICTIONNAIRES & Prog. DYNAMIQUE Généralités
Programmation dynamique

Programmation dynamique
 Rendre la monnaie
Algorithme glouton :
o Le principe est le suivant : on rend la pièce la plus élevée possible à chaque fois.

o Cet algorithme ne rend pas toujours la meilleure réponse; en fait cela dépend du jeu de
pièce... on dit que le jeu de pièces est canonique lorsque l’algorithme glouton fournit la
meilleure réponse - ce qui est le cas pour les pièces usuelles.
Par exemple, pour obtenir 8 avec L = [1, 4, 6], l’algorithme renvoie les 3 pièces suivantes :
6 + 1 + 1 alors que le meilleur choix est : 4 + 4.

100/160
DICTIONNAIRES & Prog. DYNAMIQUE Généralités
Programmation dynamique

Programmation dynamique
 Rendre la monnaie
Algorithme glouton : Programmation dynamique
o Si on doit rendre une valeur de 𝑛 avec le moins de pièces possibles et si l’une des
pièces à la valeur 𝑘, alors les 𝑛 − 𝑘 restant doivent être rendu de façon optimale (c’est ce
qu’on appelle la propriété de sous-structure optimale).
o Si on note 𝑡𝑛 le nombre minimum de pièces pour avoir une somme de 𝑛, on obtient la
relation de récurrence :
tn  1  inf tnk
kL
o Cette borne inférieure peut être atteinte pour différentes valeurs de k (mais ce n’est pas encore
la question). On obtient ainsi une formule de récurrence simple permettant de calculer 𝑡𝑛. Afin de
ne pas à avoir à recalculer les valeurs de 𝑡𝑛−k beaucoup trop de fois, on réutilise la technique de
mémoïsation pour stocker les valeurs précédentes de 𝑡.
101/160
DICTIONNAIRES & Prog. DYNAMIQUE Généralités
Programmation dynamique

Programmation dynamique
 Rendre la monnaie
Algorithme glouton : Programmation dynamique
Une version avec une liste recalculée à chaque fois :

102/160
DICTIONNAIRES & Prog. DYNAMIQUE Généralités
Programmation dynamique

Programmation dynamique
 Rendre la monnaie
Algorithme glouton : Programmation dynamique
On peut utiliser un dictionnaire qui permet de ne pas refaire les calculs déjà fait pour d’autres valeurs:

103/160
DICTIONNAIRES & Prog. DYNAMIQUE Généralités
Programmation dynamique

Programmation dynamique
 Rendre la monnaie
Algorithme glouton : Reconstituer le rendu
Savoir combien de pièces rendre, c’est bien. Savoir lesquelles on doit rendre c’est encore mieux!
o l’une des méthodes est de stocker, pour chaque montant, la liste des pièces à rendre et, lors
du calcul du minimum, ajouter à cette liste la pièce en cours. Cela risque de créer de longue liste
(et ainsi prendre beaucoup de place).
o on peut le faire de nouveau récursivement : pour le montant 𝑛, il suffit de savoir qu’elle est
l’une des pièces à rendre et de repartir ensuite au montant restant.

104/160
DICTIONNAIRES & Prog. DYNAMIQUE Généralités
Programmation dynamique

Programmation dynamique
 Rendre la monnaie
Algorithme glouton : Reconstituer le rendu

En terme de graphe (si les sommets sont les


montants), cela revient à connaître l’un des
prédécesseurs du sommet en question.

Il suffit donc soit de connaître le montant


précédent, soit la pièce à rendre pour atteindre
ce montant.

105/160
DICTIONNAIRES & Prog. DYNAMIQUE Généralités
Programmation dynamique

Programmation dynamique
 Rendre la monnaie
Algorithme glouton : Reconstituer le rendu
On peut adapter l’algorithme rendu pour
qu’il renvoie le nombre de pièces et la
dernière pièce rendue, puis écrire une
fonction qui donne toutes les pièces :

106/160
DICTIONNAIRES & Prog. DYNAMIQUE Généralités
Programmation dynamique

Programmation dynamique
 Rendre la monnaie
Algorithme glouton : Reconstituer le rendu
ce qui donne par exemple

107/160
DICTIONNAIRES & Prog. DYNAMIQUE Généralités
Programmation dynamique

Programmation dynamique
 Meilleur chemin - déplacements Nord-Est
Présentation du problème :
o On dispose d’une matrice de taille 𝑝×𝑞 remplies
d’entiers positifs (ou de réels positifs). On part de la
case en haut à gauche et on veut rejoindre la case en
bas à droite par des déplacements uniquement vers le
bas ou vers la droite et ce, en maximisant la somme S
des valeurs des cases parcourues.

o Pour cela, on réalise exactement 𝑝 −1 déplacements


vers le bas et 𝑞 − 1 vers la droite peu importe le chemin
emprunté. Un chemin peut être représenté par une liste Exemple de matrice avec un gain S = 48
de 𝑝 + 𝑞 − 2 termes avec exactement 𝑝−1 vers le bas.

108/160
DICTIONNAIRES & Prog. DYNAMIQUE Généralités
Programmation dynamique

Programmation dynamique
 Meilleur chemin - déplacements Nord-Est
Présentation du problème :
Nombre total de chemins possibles :
p 1
C p  q 2 
 p  q  2 !
 p  1!  p  q  2    p  1 !
C p 1

 p  q  2 !
(a)
p  q 2
 p  1!  q  1!
Si p  q  n  2
p 1
C n 1

 2n  2 !

 2 n  2 !
C (b)
p  q 2 2 n2
 n  1!  n  1!  n  1! 2
Nous allons utiliser de nouveau les techniques Si n  3, On a 6 chemins possibles
précédentes, mais cette fois-ci, sur deux dimensions. 109/160
DICTIONNAIRES & Prog. DYNAMIQUE Généralités
Programmation dynamique

Programmation dynamique
 Meilleur chemin - déplacements Nord-Est
Algorithme glouton :
On part en haut à gauche. À chaque étape, on choisit la situation qui permet de gagner le plus,
jusqu’à aboutir à l’arrivée. C’est évidemment aisé à programmer, la complexité est d’ordre O(𝑝 + 𝑞)
(choisir un terme parmi deux à chaque pas) mais cela ne donne pas forcément le résultat optimal.

S = 49 S = 54

(a) Exemple avec l’algorithme de glouton (b) Un meilleur chemin


110/160
DICTIONNAIRES & Prog. DYNAMIQUE Généralités
Programmation dynamique

Programmation dynamique
 Meilleur chemin - déplacements Nord-Est
Programmation dynamique : calcul du gain maximum:
Considérons la case d’arrivée (i, j). On y arrive par l’une des
deux cases adjacentes (i-1, j) et (i, j-1). Plus précisément, on
aura le gain maximum en (i, j) si et seulement si on arrive de la
case qui a elle même un gain maximum à partir du départ. On a
donc à connaître le gain maximum des chemins allant à chacune
de ses deux cases... et ainsi de suite.
Généralisation : Si on note 𝑡𝑖,𝑗 le gain maximum en arrivant à la
case (𝑖, 𝑗) (et 𝑎𝑖,𝑗 la valeur de cette case, on aura alors la
formule (c) illustrée par le schéma ci-contre :

ti , j  ai , j  max  ti 1, j , ti , j 1  (c)


111/160
DICTIONNAIRES & Prog. DYNAMIQUE Généralités
Programmation dynamique

Programmation dynamique
 Meilleur chemin - déplacements Nord-Est
Programmation dynamique : calcul du gain maximum:
Un seul chemin
On peut alors proposer un algorithme basé sur ces remarques
afin de remplir un tableau avec les gains maximaux pour chaque
case en remplissant case par case : Sens de remplissage

o pour les premières ligne et colonne : un seul chemin possible


(toujours vers la droite ou vers le bas) donc on commence par
affecter ces cases,
o on remplit alors ligne par ligne (ou colonne par colonne si on
préfère) à l’aide de la relation de récurrence précédente jusqu’à Ordre de remplissage des cases
la dernière case. On obtient un algorithme de complexité 𝑂(𝑝𝑞).

112/160
DICTIONNAIRES & Prog. DYNAMIQUE Généralités
Programmation dynamique

Programmation dynamique
 Meilleur chemin - déplacements Nord-Est
Programmation dynamique : calcul du gain maximum:

Matrice M : Matrice gain : Un seul chemin

Un seul chemin
3 11 18 20 24 31
10 16 26 28 29 35

17 19 30 35 43 52
23 25 36 46 47 54

113/160
DICTIONNAIRES & Prog. DYNAMIQUE Généralités
Programmation dynamique

Programmation dynamique
 Meilleur chemin - déplacements Nord-Est
Programmation dynamique : calcul du gain maximum:

114/160
DICTIONNAIRES & Prog. DYNAMIQUE Généralités
Programmation dynamique

Programmation dynamique
 Meilleur chemin - déplacements Nord-Est
Programmation dynamique : calcul du gain maximum:

115/160

Vous aimerez peut-être aussi