Vous êtes sur la page 1sur 53

IFT 2015

Démonstration 0

1
Information générale

Professeure :
Esma AÏMEUR: aimeur@iro.umontreal.ca

Démonstrateurs:
Dorsaf Sallami: dorsaf.sallami@umontreal.ca
Hugo Rocha De Alba: hugo.rocha.de.alba@umontreal.ca

2
Information générale

Heures et lieu:

Démos: Mardi de 13 h 30 à 15 h 29 en B2285 Pavillon Jean Brillant

Amphis: Jeudi de 12 h 30 à 15 h 29 en 1355 Pavillon André Aisenstadt

Disponibilités démonstrateurs:

Mardi de 10:00 à 12:00 (Lab 2374 Pav. André-Aisenstadt)

3
Exercices de programmation

Tout code (pour les démos et TD) sera a faire en Java 17

Télécharger le JDK:

https://www.oracle.com/ca-en/java/technologies/downloads/#java17

4
Exercices Java

5
Analyse de code (1/6)
Ce code compile t-il et, si non, quelle(s) erreur(s) le compilateur va t-il indiquer?

6
Analyse de code (2/6)

le code ne compile pas car la


variable toto à la 9eme ligne n'est
pas static et doit donc être accéder
via un objet (par exemple t1.toto).
7
Analyse de code (3/6)
Ce code compile t-il et, si non, quelle(s) erreur(s) le compilateur va t-il indiquer?

8
Analyse de code (4/6)

Le code compile, il affiche 12, 12,


12 ... et finit par planter à cause
d'une récursion infinie.
9
Analyse de code (5/6)
Ce code compile t-il et, si non, quelle(s) erreur(s) le compilateur va t-il indiquer?

10
Analyse de code (6/6)

le code compile, il affiche 13,14

11
Ressources pour la programmation orientée objet et Java

https://www.freecodecamp.org/news/learn-java-free-java-courses-for-beginners/

12
Récursivité

13
Récursivité (1/5)

La récursivité c’est quand une fonction s’appelle elle-même jusqu’à atteindre


une condition d’arrêt. Elle arrête alors de s’appeler elle-même. Le résultat de
chaque fonction enfant est retourné dans les fonctions parent, jusqu’à
retourner à la fonction originale.

14
Récursivité (2/5)

Eviter les appels récursifs infinis: la condition d’arrêt!

• Toutes les définitions récursives possèdent une condition d’arrêt i.e. une partie
non récursive.
• Si cette dernière manque, une fonction recursive ne se terminera jamais (boucle
de récursivité infinie).

15
Récursivité (3/5)

Prenons le cas de la suite de Fibonacci, définie par :

u0 = u1 = 1

un = un-1 + un-2 pour n > 1

16
Récursivité (4/5)
Condition d’arrêt
int fib (int n)
{
if (n <= 1)
return 1;
else
return fib (n-1) + fib (n-2);
}

17
Récursivité (5/5)

18
Récursivité : Exercice 1

Écrivez une méthode récursive appelée puissance qui prend un double x et un


entier * n et qui renvoie x^n.

19
Récursivité : Exercice 1

Écrivez une méthode récursive appelée puissance qui prend un double x et un


entier * n et qui renvoie x^n.

Indice : une définition récursive de cette opération est :

puissance (x,n) = x * puissance(x, n-1).

N'oubliez pas non plus que tout ce qui est élevé à la puissance zéro est 1.

20
Récursivité : Correction 1

21
Récursivité : Exercice 2

Écrivez la fonction factorielle :

22
Récursivité : Correction 2

23
Récursivité : Exercice 3

Écrivez un algorithme récursif pour trouver l'élément maximum dans


un tableau, A, de n éléments.

24
Récursivité : Correction 3

25
Analyse des coûts

26
Analyse des coûts (1/4)

Le calcul de la complexité d’un algorithme permet de mesurer sa


performance. Il existe deux types de complexité :
● complexité spatiale : permet de quantifier l’utilisation de la
mémoire
● complexité temporelle : permet de quantifier la vitesse
d’exécution

27
Analyse des coûts (2/4)

Qu’est-ce qu’un bon algorithme / un algorithme optimal ?

C’est un algorithme qui répond correctement au problème posé tout en


ayant une exécution rapide sans utiliser trop de mémoire.

28
Analyse des coûts (3/4)

Qu’est-ce qu’un bon algorithme / un algorithme optimal ?

C’est un algorithme qui répond correctement au problème posé tout en


ayant une exécution rapide sans utiliser trop de mémoire.

On s'intéresse essentiellement à la complexité en temps

29
Analyse des coûts (4/4)

On s'intéresse essentiellement à la complexité en temps


● Analyse empirique
● Analyse théorique

30
Analyse empirique

31
Analyse des coûts : analyse empirique (1/2)
L’analyse empirique nécessite que l’algorithme soit implémenté.
Nous pouvons mesurer son temps d’exécution sur différents jeux de données.

32
Analyse des coûts : analyse empirique (2/2)
● Il est nécessaire d’implémenter l’algorithme, ce qui peut s’avérer difficile

● Les résultats peuvent ne pas être représentatifs de tous les jeux de données possibles

● Pour comparer deux algorithmes il faut utiliser le même hardware et le même


environnement du système.

33
Analyse théorique

34
Analyse des coûts : analyse théorique (1/2)

● Utilise une description haut-niveau de l’algorithme (pseudo-code) plutôt qu’une


implémentation

● Caractérise le temps d’exécution en fonction de la taille, n, de l’entrée

● Prend en compte tous les jeux de données possibles

● Permet d’évaluer la vitesse d’un algorithme de manière indépendante du hardware et de


l’environnement du système.

35
Analyse des coûts : analyse théorique (2/2)
La notation Grand O est une métrique permettant de décrire le temps d'exécution
des algorithmes en matière d'accroissement de la taille des données en entrée

On écrit O(n)

n est une variable qui représente la taille des données en entrée.

36
Évaluer Grand O

37
7 fonctions importantes

38
Exemples d'analyse d 'algorithme (1/7)

Évaluer Grand O : Opérations primitives


● Évaluer une expression
● Assigner une valeur à une variable
● Indexer dans un tableau
● Appeler une méthode
● Terminer une méthode
● etc.
Les opérations primitives O(1)

39
Exemples d'analyse d 'algorithme (2/7)
O(N): Une méthode qui retourne la valeur maximale d'un tableau.

40
Exemples d'analyse d 'algorithme (3/7)
O(n*2): Algorithme unique1 pour tester l'unicité des éléments.

41
Exemples d'analyse d 'algorithme (4/7)
O(logn): Binary search

42
Exemples d'analyse d 'algorithme (5/7)
O(logn): Binary search

43
Exemples d'analyse d 'algorithme (6/7)
O(logn): Binary search

44
Exemples d'analyse d 'algorithme (7/7)
O(nlogn): Algorithme unique2 pour tester l'unicité des éléments.

45
Exercice 1

Ce code calcule le produit de deux variables, quel est le temps d'exécution de ce


code ?

46
Exercice 1: Solution

O(b) Il s'agirait d'un temps d'exécution linéaire sur b, puisque la boucle itère
uniquement sur b.

47
Exercice 2

Ce code calcule A% B, quel serait le temps d'exécution ?

48
Exercice 2 : Solution

O(1) Temps d'exécution constant

49
Exercice 3

Quel est le temps d'exécution de ce code ?

50
Exercice 3 : Solution
Ici, notre temps d'exécution est O (n + n ^ 2), que nous appelons simplement O (n ^ 2)

51
Exercice 4
Quel est le temps d'exécution de ce code ?

52
Exercice 4 : Solution

En général, nous dirions qu'il s'agit d'un temps d'exécution O(n) et que la partie
"pire des cas" serait implicite. Mais pour être plus précis, nous pourrions dire qu'il
s'agit du pire des cas O(n) et du meilleur des cas O(1).

53

Vous aimerez peut-être aussi