Algorithmes et structures de donnes 3me cours Patrick





































































- Slides: 69

Algorithmes et structures de données 3ème cours Patrick Reuter http: //www. labri. fr/~preuter

Ingrédients d’algorithmes • • Affectation Condition/Comparaison Appel de fonction Structure de contrôle – Branchements conditionnels (multiples) – Boucles • Bloc d’instruction

Ajourd’hui • Sondage • Organisation de la mémoire • Types de bases

Sondage • • o o o o Compteur : = 8 ; Nom : = "Patrick"; 7+3 : = 10 ; resultat : = 20*5 ; 20 : = c ; score : = score + 10; highscore : = score;

Sondage • • o o o o Compteur : = 8 ; Nom : = "Patrick"; 7+3 : = 10 ; resultat : = 20*5 ; 20 : = c ; score : = score + 10; highscore : = score;

Sondage • • o o o o Compteur : = 8 ; Nom : = "Patrick"; BON : 16 7+3 : = 10 ; resultat : = 20*5 ; MOYEN : 0 20 : = c ; FAUX : 20 score : = score + 10; highscore : = score;

Sondage BOUCLE

Ingrédients d’algorithmes • Structure de contrôle – Boucle TANT QUE <condition> FAIRE <bloc d’instructions> FIN TANT QUE ou FAIRE <bloc d’instructions> TANT QUE <condition>

Sondage Bloc d’instruction à répéter : writeln("J’adore les lundi"); i : = i + 1;

Bloc d’instruction à répéter : (toujours dans begin end s’il y a plusieurs) begin writeln("J’adore les lundi"); i : = i + 1; end

Boucle Condition d’arrêt : i>5 while (i<=5) do begin writeln("J’adore les lundi"); i : = i + 1; end

Initialisation var i : integer; i : = 1; while (i<=5) do begin writeln("J’adore les lundi"); i : = i + 1; end

Sondage var i : integer; i : = 1; while (i<=5) do begin writeln("J’adore les lundi"); i : = i + 1; end i 1 2 3 4 5 6

Sondage var i : integer; i : = 1; while (i<=5) do begin writeln("J’adore les lundi"); i : = i + 1; BON : 36 end MOYEN : 0 FAUX : 11 i 1 2 3 4 5 6

Ingrédients d’algorithmes • Structure de contrôle – Branchements conditionnels SI <condition> ALORS <bloc d’instructions> SINON <bloc d’instructions>

Ingrédients d’algorithmes • Structure de contrôle – Branchements conditionnels SI <condition> ALORS <bloc d’instructions> SINON <bloc d’instructions> Exemple: SI (score>meilleur_score) ALORS meilleur_score : = score;

Ingrédients d’algorithmes • Structure de contrôle – Branchements conditionnels SI <condition> ALORS <bloc d’instructions> SINON <bloc d’instructions> En PASCAL : IF (score>meilleur_score) THEN meilleur_score : = score; Exemple: SI (score>meilleur_score) ALORS meilleur_score : = score;

function est. Negatif(entree : integer) : boolean; début si (entree < 0) alors result : = true; sinon result : = false; fin;

function est. Negatif(entree : integer) : boolean; begin if (entree < 0) then begin est. Negatif : = true writeln( « valeure est négative » ); end; else est. Negatif : = false; end;

function est. Negatif(entree : integer) : boolean; begin if (entree < 0) then mw. lines. add(true); else mw. lines. add(false); end; NON !! Ne pas afficher à l’écran !!

function est. Negatif(entree : integer) : boolean; begin if (entree < 0) then mw. lines. add(true); else mw. lines. add(false); end; NON !! Ne pas afficher à l’écran !!

function est. Negatif(entree : integer) : boolean; begin if (entree < 0) then result : = true; else result : = false; end;

function est. Negatif(entree : integer) : boolean; begin if (entree < 0) then result : = true; else result : = false; end; … A : = est. Negatif(100); C : = est. Negatif(-30);

function est. Negatif(entree : integer) : boolean; begin if (entree < 0) then result : = true; else result : = false; end; … A : = est. Negatif(100); C : = est. Negatif(-30); BON : 30 MOYEN : 10 FAUX : 5

« FAIRE TOURNER » un algorithme • Exemple: Tester si un nombre est premier

« FAIRE TOURNER » un algorithme • Exemple: Tester si un nombre est premier Stratégie: Supposer que le nombre est premier jusqu’à on a trouvé un diviseur.

« FAIRE TOURNER » un algorithme • Exemple: Tester si un nombre est premier Stratégie: Supposer que le nombre est premier jusqu’à on a trouvé un diviseur. FONCTION est. Premier(nombre) : boolean; est. Premier : = VRAI; Diviseur : = 2; TANT QUE diviseur<nombre ET est. Premier : = VRAI FAIRE SI (nombre MOD diviseur = 0) ALORS est. Premier : = FAUX; Diviseur : = Diviseur + 1; FIN TANT QUE FIN FONCTION

« FAIRE TOURNER » un algorithme • Exemple: Tester si un nombre est premier Stratégie: Supposer que le nombre est premier jusqu’à on a trouvé un diviseur. FONCTION est. Premier(nombre) : boolean; Diviseur : = 2; TANT QUE diviseur<nombre FAIRE SI (nombre MOD diviseur = 0) ALORS est. Premier : = FAUX; SINON est. Premier : = VRAI; Diviseur : = Diviseur + 1; FIN TANT QUE FIN FONCTION FAUX !!!!

« FAIRE TOURNER » un algorithme • Exemple: Tester si un nombre est premier Stratégie: Supposer que le nombre est premier jusqu’à on a trouvé un diviseur. FONCTION est. Premier(nombre) : boolean; Diviseur : = 2; TANT QUE diviseur<nombre ET est. Premier : = VRAI FAIRE SI (nombre MOD diviseur = 0) ALORS est. Premier : = FAUX; SINON est. Premier : = VRAI; Diviseur : = Diviseur + 1; FIN TANT QUE FIN FONCTION

FONCTION test. Si. Premier(nombre) : boolean; est. Premier : = VRAI; Diviseur : = 2; TANT QUE diviseur<nombre ET est. Premier = VRAI FAIRE SI (nombre MOD diviseur = 0) ALORS est. Premier : = FAUX; diviseur : = diviseur + 1; FIN TANT QUE RETOURNER est. Premier; FIN FONCTION EXEMPLE: resultat = test. Si. Premier(9); Nombre est. Premier Diviseur resultat

FONCTION test. Si. Premier(nombre) : boolean; est. Premier : = VRAI; Diviseur : = 2; TANT QUE diviseur<nombre ET est. Premier : = VRAI FAIRE SI (nombre MOD diviseur = 0) ALORS est. Premier : = FAUX; diviseur : = diviseur + 1; FIN TANT QUE RETOURNER est. Premier; FIN FONCTION EXEMPLE: resultat : = test. Si. Premier(9); Nombre 9 est. Premier Diviseur resultat

FONCTION test. Si. Premier(nombre) : boolean; est. Premier : = VRAI; Diviseur : = 2; TANT QUE diviseur<nombre ET est. Premier : = VRAI FAIRE SI (nombre MOD diviseur = 0) ALORS est. Premier : = FAUX; diviseur : = diviseur + 1; FIN TANT QUE RETOURNER est. Premier; FIN FONCTION EXEMPLE: resultat = test. Si. Premier(9); Nombre est. Premier 9 VRAI Diviseur resultat

FONCTION test. Si. Premier(nombre) : boolean; est. Premier : = VRAI; Diviseur : = 2; TANT QUE diviseur<nombre ET est. Premier = VRAI FAIRE SI (nombre % diviseur = 0) ALORS est. Premier : = FAUX; diviseur : = diviseur + 1; FIN TANT QUE RETOURNER est. Premier; FIN FONCTION EXEMPLE: resultat = test. Si. Premier(9); Nombre est. Premier Diviseur 9 VRAI 2 resultat

FONCTION test. Si. Premier(nombre) : boolean; est. Premier : = VRAI; Diviseur : = 2; TANT QUE diviseur<nombre ET est. Premier : = VRAI FAIRE SI (nombre MOD diviseur = 0) ALORS est. Premier : = FAUX; diviseur : = diviseur + 1; FIN TANT QUE RETOURNER est. Premier; FIN FONCTION EXEMPLE: resultat = test. Si. Premier(9); Nombre est. Premier Diviseur 9 VRAI 2 resultat

FONCTION test. Si. Premier(nombre) : boolean; est. Premier : = VRAI; Diviseur : = 2; TANT QUE diviseur<nombre ET est. Premier : = VRAI FAIRE SI (nombre MOD diviseur = 0) ALORS est. Premier : = FAUX; diviseur : = diviseur + 1; FIN TANT QUE RETOURNER est. Premier; FIN FONCTION EXEMPLE: resultat = test. Si. Premier(9); Nombre est. Premier Diviseur 9 VRAI 2 resultat

FONCTION test. Si. Premier(nombre) : boolean; est. Premier : = VRAI; Diviseur : = 2; TANT QUE diviseur<nombre ET est. Premier : = VRAI FAIRE SI (nombre MOD diviseur = 0) ALORS est. Premier : = FAUX; diviseur : = diviseur + 1; FIN TANT QUE RETOURNER est. Premier; FIN FONCTION EXEMPLE: resultat = test. Si. Premier(9); Nombre est. Premier Diviseur 9 VRAI 2 3 resultat

FONCTION test. Si. Premier(nombre) : boolean; est. Premier : = VRAI; Diviseur : = 2; TANT QUE diviseur<nombre ET est. Premier = VRAI FAIRE SI (nombre MOD diviseur = 0) ALORS est. Premier : = FAUX; diviseur : = diviseur + 1; FIN TANT QUE RETOURNER est. Premier; FIN FONCTION EXEMPLE: resultat = test. Si. Premier(9); Nombre est. Premier Diviseur 9 VRAI 2 3 resultat

FONCTION test. Si. Premier(nombre) : boolean; est. Premier : = VRAI; Diviseur : = 2; TANT QUE diviseur<nombre ET est. Premier : = VRAI FAIRE SI (nombre MOD diviseur = 0) ALORS est. Premier : = FAUX; diviseur : = diviseur + 1; FIN TANT QUE RETOURNER est. Premier; FIN FONCTION EXEMPLE: resultat = test. Si. Premier(9); Nombre est. Premier Diviseur 9 VRAI 2 3 resultat

FONCTION test. Si. Premier(nombre) : boolean; est. Premier : = VRAI; Diviseur : = 2; TANT QUE diviseur<nombre ET est. Premier = VRAI FAIRE SI (nombre MOD diviseur = 0) ALORS est. Premier : = FAUX; diviseur : = diviseur + 1; FIN TANT QUE RETOURNER est. Premier; FIN FONCTION EXEMPLE: resultat = test. Si. Premier(9); Nombre est. Premier Diviseur 9 VRAI 2 3 FAUX resultat

FONCTION test. Si. Premier(nombre) : boolean; est. Premier : = VRAI; Diviseur : = 2; TANT QUE diviseur<nombre ET est. Premier = VRAI FAIRE SI (nombre MOD diviseur = 0) ALORS est. Premier : = FAUX; diviseur : = diviseur + 1; FIN TANT QUE RETOURNER est. Premier; FIN FONCTION EXEMPLE: resultat = test. Si. Premier(9); Nombre est. Premier Diviseur 9 VRAI 2 3 4 resultat

FONCTION test. Si. Premier(nombre) : boolean; est. Premier : = VRAI; Diviseur : = 2; TANT QUE diviseur<nombre ET est. Premier = VRAI FAIRE SI (nombre MOD diviseur = 0) ALORS est. Premier : = FAUX; diviseur : = diviseur + 1; FIN TANT QUE RETOURNER est. Premier; FIN FONCTION EXEMPLE: resultat = test. Si. Premier(9); Nombre est. Premier Diviseur 9 VRAI 2 3 FAUX 4 resultat

FONCTION test. Si. Premier(nombre) : boolean; est. Premier : = VRAI; Diviseur : = 2; TANT QUE diviseur<nombre ET est. Premier = VRAI FAIRE SI (nombre MOD diviseur = 0) ALORS est. Premier : = FAUX; diviseur : = diviseur + 1; FIN TANT QUE RETOURNER est. Premier; FIN FONCTION EXEMPLE: resultat = test. Si. Premier(9); Nombre est. Premier Diviseur 9 VRAI 2 3 4 FAUX resultat

FONCTION test. Si. Premier(nombre) est. Premier : = VRAI; Diviseur : = 2; TANT QUE diviseur<nombre ET est. Premier = VRAI FAIRE SI (nombre MOD diviseur = 0) ALORS est. Premier : = FAUX; diviseur : = diviseur + 1; FIN TANT QUE RETOURNER est. Premier; FIN FONCTION EXEMPLE: resultat = test. Si. Premier(9); Nombre est. Premier Diviseur 9 VRAI 2 3 4 resultat

FONCTION test. Si. Premier(nombre) est. Premier = VRAI; Diviseur = 2; TANT QUE diviseur<nombre ET est. Premier = VRAI FAIRE SI (nombre MOD diviseur = 0) ALORS est. Premier = FAUX; diviseur = diviseur + 1; FIN TANT QUE RETOURNER est. Premier; FIN FONCTION EXEMPLE: resultat = test. Si. Premier(9); Nombre est. Premier Diviseur resultat 9 VRAI 2 3 4 FAUX

FONCTION test. Si. Premier(nombre) est. Premier = VRAI; Diviseur = 2; TANT QUE diviseur<nombre ET est. Premier = VRAI FAIRE SI (nombre MOD diviseur = 0) ALORS est. Premier = FAUX; diviseur = diviseur + 1; FIN TANT QUE RETOURNER est. Premier; FIN FONCTION EXEMPLE: resultat = test. Si. Premier(9); Nombre est. Premier Diviseur resultat 9 VRAI 2 3 4 FAUX

« FAIRE TOURNER » un algorithme • Exemple: Tester si un nombre est premier Stratégie: Supposer que le nombre est premier jusqu’à on a trouvé un diviseur. FONCTION est. Premier(nombre) est. Premier ← VRAI; Diviseur ← 2; TANT QUE diviseur<nombre ET est. Premier = VRAI FAIRE SI (nombre MOD diviseur = 0) ALORS est. Premier ← FAUX; FIN TANT QUE FIN FONCTION

FONCTION test. Si. Premier(nombre) est. Premier ← VRAI; Diviseur ← 2; TANT QUE diviseur<nombre ET est. Premier = VRAI FAIRE SI (nombre MOD diviseur = 0) ALORS est. Premier ← FAUX; diviseur ← diviseur + 1; FIN TANT QUE RETOURNER est. Premier; FIN FONCTION EXEMPLE: resultat ← test. Si. Premier(9); Nombre est. Premier Diviseur resultat

FONCTION test. Si. Premier(nombre) est. Premier ← VRAI; Diviseur ← 2; TANT QUE diviseur<nombre ET est. Premier = VRAI FAIRE SI (nombre MOD diviseur = 0) ALORS est. Premier ← FAUX; diviseur ← diviseur + 1; FIN TANT QUE RETOURNER est. Premier; FIN FONCTION EXEMPLE: resultat ← test. Si. Premier(9); Nombre 9 est. Premier Diviseur resultat

FONCTION test. Si. Premier(nombre) est. Premier ← VRAI; Diviseur ← 2; TANT QUE diviseur<nombre ET est. Premier = VRAI FAIRE SI (nombre MOD diviseur = 0) ALORS est. Premier ← FAUX; diviseur ← diviseur + 1; FIN TANT QUE RETOURNER est. Premier; FIN FONCTION EXEMPLE: resultat ← test. Si. Premier(9); Nombre est. Premier 9 VRAI Diviseur resultat

FONCTION test. Si. Premier(nombre) est. Premier ← VRAI; Diviseur ← 2; TANT QUE diviseur<nombre ET est. Premier = VRAI FAIRE SI (nombre MOD diviseur = 0) ALORS est. Premier ← FAUX; diviseur ← diviseur + 1; FIN TANT QUE RETOURNER est. Premier; FIN FONCTION EXEMPLE: resultat ← test. Si. Premier(9); Nombre est. Premier Diviseur 9 VRAI 2 resultat

FONCTION test. Si. Premier(nombre) est. Premier ← VRAI; Diviseur ← 2; TANT QUE diviseur<nombre ET est. Premier = VRAI FAIRE SI (nombre MOD diviseur = 0) ALORS est. Premier ← FAUX; diviseur ← diviseur + 1; FIN TANT QUE RETOURNER est. Premier; FIN FONCTION EXEMPLE: resultat ← test. Si. Premier(9); Nombre est. Premier Diviseur 9 VRAI 2 resultat

FONCTION test. Si. Premier(nombre) est. Premier ← VRAI; Diviseur ← 2; TANT QUE diviseur<nombre ET est. Premier = VRAI FAIRE SI (nombre MOD diviseur = 0) ALORS est. Premier ← FAUX; diviseur ← diviseur + 1; FIN TANT QUE RETOURNER est. Premier; FIN FONCTION EXEMPLE: resultat ← test. Si. Premier(9); Nombre est. Premier Diviseur 9 VRAI 2 resultat

FONCTION test. Si. Premier(nombre) est. Premier ← VRAI; Diviseur ← 2; TANT QUE diviseur<nombre ET est. Premier = VRAI FAIRE SI (nombre MOD diviseur = 0) ALORS est. Premier ← FAUX; diviseur ← diviseur + 1; FIN TANT QUE RETOURNER est. Premier; FIN FONCTION EXEMPLE: resultat ← test. Si. Premier(9); Nombre est. Premier Diviseur 9 VRAI 2 3 resultat

FONCTION test. Si. Premier(nombre) est. Premier ← VRAI; Diviseur ← 2; TANT QUE diviseur<nombre ET est. Premier = VRAI FAIRE SI (nombre MOD diviseur = 0) ALORS est. Premier ← FAUX; diviseur ← diviseur + 1; FIN TANT QUE RETOURNER est. Premier; FIN FONCTION EXEMPLE: resultat ← test. Si. Premier(9); Nombre est. Premier Diviseur 9 VRAI 2 3 resultat

FONCTION test. Si. Premier(nombre) est. Premier ← VRAI; Diviseur ← 2; TANT QUE diviseur<nombre ET est. Premier = VRAI FAIRE SI (nombre MOD diviseur = 0) ALORS est. Premier ← FAUX; diviseur ← diviseur + 1; FIN TANT QUE RETOURNER est. Premier; FIN FONCTION EXEMPLE: resultat ← test. Si. Premier(9); Nombre est. Premier Diviseur 9 VRAI 2 3 resultat

FONCTION test. Si. Premier(nombre) est. Premier ← VRAI; Diviseur ← 2; TANT QUE diviseur<nombre ET est. Premier = VRAI FAIRE SI (nombre MOD diviseur = 0) ALORS est. Premier ← FAUX; diviseur ← diviseur + 1; FIN TANT QUE RETOURNER est. Premier; FIN FONCTION EXEMPLE: resultat ← test. Si. Premier(9); Nombre est. Premier Diviseur 9 VRAI 2 3 FAUX resultat

FONCTION test. Si. Premier(nombre) est. Premier ← VRAI; Diviseur ← 2; TANT QUE diviseur<nombre ET est. Premier = VRAI FAIRE SI (nombre MOD diviseur = 0) ALORS est. Premier ← FAUX; diviseur ← diviseur + 1; FIN TANT QUE RETOURNER est. Premier; FIN FONCTION EXEMPLE: resultat ← test. Si. Premier(9); Nombre est. Premier Diviseur 9 VRAI 2 3 FAUX 4 resultat

FONCTION test. Si. Premier(nombre) est. Premier ← VRAI; Diviseur ← 2; TANT QUE diviseur<nombre ET est. Premier = VRAI FAIRE SI (nombre MOD diviseur = 0) ALORS est. Premier ← FAUX; diviseur ← diviseur + 1; FIN TANT QUE RETOURNER est. Premier; FIN FONCTION EXEMPLE: resultat ← test. Si. Premier(9); Nombre est. Premier Diviseur 9 VRAI 2 3 FAUX 4 resultat

FONCTION test. Si. Premier(nombre) est. Premier ← VRAI; Diviseur ← 2; TANT QUE diviseur<nombre ET est. Premier = VRAI FAIRE SI (nombre MOD diviseur = 0) ALORS est. Premier ← FAUX; diviseur ← diviseur + 1; FIN TANT QUE RETOURNER est. Premier; FIN FONCTION EXEMPLE: resultat ← test. Si. Premier(9); Nombre est. Premier Diviseur 9 VRAI 2 3 FAUX 4 resultat

FONCTION test. Si. Premier(nombre) est. Premier ← VRAI; Diviseur ← 2; TANT QUE diviseur<nombre ET est. Premier = VRAI FAIRE SI (nombre MOD diviseur = 0) ALORS est. Premier ← FAUX; diviseur ← diviseur + 1; FIN TANT QUE RETOURNER est. Premier; FIN FONCTION EXEMPLE: resultat ← test. Si. Premier(9); Nombre est. Premier Diviseur 9 VRAI 2 3 FAUX 4 resultat

FONCTION test. Si. Premier(nombre) est. Premier ← VRAI; Diviseur ← 2; TANT QUE diviseur<nombre ET est. Premier = VRAI FAIRE SI (nombre MOD diviseur = 0) ALORS est. Premier ← FAUX; diviseur ← diviseur + 1; FIN TANT QUE RETOURNER est. Premier; FIN FONCTION EXEMPLE: resultat ← test. Si. Premier(9); Nombre est. Premier Diviseur resultat 9 VRAI 2 3 FAUX 4 FAUX 5

Sondage Récursion

• Exemple : factoriel(5); • factoriel : = 5 * 4 * 3 * 2 * 1;

Sondage function factoriel(n : integer) : integer; begin var resultat : integer; Condition d’arrêt : la fonction n’est plus appelé par elle-même if ((n = 0) OR (n = 1) then resultat : = 1; else resultat = n * factoriel(n-1); result : = end resultat;

• Appel de fonction : factoriel(5); • • • factoriel : = 5 * factoriel(5 - 1); factoriel : = 5 * (4 * factoriel(4 - 1)); factoriel : = 5 * (4 * (3 * factoriel(3 - 1))); factoriel : = 5 * (4 * (3 * (2 * factoriel(2 - 1)))); factoriel : = 5 * (4 * (3 * (2 * (1 ))));

Sondage Complexité

Sondage Jeux de cartes 54, sortir les jokers 1 minute Jeux de cartes 108 joker, sortir les jokers 2 minutes Comportement linéaire O(N)

Sondage Trier 100 entrées 10 minutes Puis les mettre ensemble quelques minutes Trier 200 entrées >> 20 minutes Comportement quadratique O(N 2) Comportement quadratique O(N log N)

Sondage Trier 100 entrées 10 minutes Puis les mettre ensemble quelques minutes Trier 200 entrées >> 20 minutes Comportement quadratique O(N 2) BON : 7 Comportement quadratique O(N log N) FAUX : 38