INFOR 101 Chapitre 3 Marianne Morris. INFOR 101 Algorithmes et Pseudocode Programmation en C++...

Post on 03-Apr-2015

118 views 1 download

Transcript of INFOR 101 Chapitre 3 Marianne Morris. INFOR 101 Algorithmes et Pseudocode Programmation en C++...

INFOR 101Chapitre 3

Marianne Morris

INFOR 101

Algorithmes et Pseudocode Programmation en C++ Architecture de l’ordinateur Langage assembleur Intro aux réseaux et à l’intelligence

artificielle

Révision du chapitre 2

Algorithmes Pseudocode Opérations en séquence Opérations de condition Opérations itératives

Révision du chapitre 2 Une fois qu’on a construit un

algorithme, on peut utiliser celui-ci pour développer des algorithmes plus sophistiqués

Librairie Une collection d’algorithmes utiles Un instrument important pour le

développement d’algorithmes

Révision du chapitre 2

Méthode descendante (top-down) Pour résoudre des problèmes compliqués

Brouillon de l’algorithme pour réfléchir aux opérations de haut niveau

Élaborer les opérations de haut niveau après avoir développé un schéma brouillon de l’algorithme

Répéter jusqu’à ce que toutes les opérations de haut niveau soient développées à partir d’opérations plus simples

Révision du chapitre 2 Développement d’algorithmes

Corrects et efficaces Plusieurs étapes inclues pseudocode,

brouillon et copies plus évoluées! Utiliser des méthodes descendantes (top-

down)

Utilisation du pseudocode Pour aider à développer des algorithmes Lisible, non ambigu, facile à analyser

Exercice 2.1: Exponentiel

Développez un algorithme pour calculer la valeur exponentielle d’un nombre donné

Demandez à l’utilisateur d’entrer deux valeurs: le nombre et la puissance

Utiliser une boucle dans votre algorithme… Imprimez à l’écran de l’ordinateur le résultat

de l’opération exponentielle

Solution de l’exercice 2.1:Exponentiel Get values for n and xwhile (x < 0) {

output “Please enter x 0”read x

} If (n == 0) then set result to 0else if (n == 1 or x == 0) then set result to 1else { set result to 1

set count to 1while (count ≤ x)

result = result * n }Output the value of result

Exercice 2: Recherche et pattern-matching

Trouver si la séquence de lettres existe dans une liste de lettres alphabétiques Séquence de lettres: « abbd » Liste contient un nombre N de lettres Algorithme:

Lire N à l’écran Rechercher la liste en utilisant une boucle et

des conditions « if… else » Imprimer « found » ou « not found » à l’écran

Figure 2.16Pattern-Matching Algorithm

Chapitre 3: L’efficacité des algorithmes

Objectifs:

Attributs des algorithmes Mesurer l’efficacité des algorithmes Analyses des algorithmes

Introduction

Caractéristiques importantes des algorithmes:

Corrects Faciles à comprendre Élégants Efficaces

Attributs des algorithmes

Corrects Est-ce que l’algorithme résout le problème

pour lequel il a été construit? Est-ce qu’il résout le problème correctement?

Faciles à comprendre Est-ce que l’algorithme est lisible et facile à

modifier? Important pour la réécriture de programmes!

Attributs des algorithmes Élégants

Est-ce que l’algorithme est intelligent, bien écrit et sophistiqué?

Attention: conflit possible entre élégance et facilité à comprendre

Efficaces Combien de temps et d’espace

l’algorithme prend quand il est exécuté? Attribut très important!

Mesurer l’efficacité des algorithmes

Analyse des algorithmes Étudier l’efficacité de plusieurs algorithmes

Mesurer l’efficacité en tant que fonction qui relie le montant des données au temps et à l’espace que l’algorithme utilise Étudier le meilleur scénario, le pire scénario et

le scénario typique La notation représente l’ordre de

magnitude de la fonction de l’efficacité

L’ordre de magnitude: Ordre n

Quand n est grand, l’effet des coefficients et des termes d’ordre plus petit devient plus faible Ex: n/2, n, 2n, 3n n

Toutes fonctions linéaires sont équivalentes

L’ordre de magnitude n Les fonctions varient en tant que c x n (n)

Figure 3.4Work = cn for Various Values of c

Recherche en séquence

Chercher un nom NAME dans une liste de n noms

Commencer au début de la liste et comparer NAME à chaque entrée dans la liste jusqu’à ce qu’on trouve la bonne entrée

Figure 3.1Sequential Search Algorithm

Recherche en séquence

Analyse de l’efficacité de l’algorithme pour une liste de n entrées

Meilleur scénario: NAME est le premier dans la liste Une seule comparaison (1)

Recherche en séquence

Analyse d’efficacité – liste de n entrées Pire scénario:

NAME est le dernier dans la liste NAME n’est pas dans la liste n comparaisons (n)

Scénario typique: À peu près n/2 comparaisons (n)

Utiliser l’espace efficacement

L’algorithme ne devrait pas utiliser plus d’espace (mémoire pour stockage) que l’espace occupé par les données originales

Selection sort

Réarranger une séquence de n valeurs pour qu’elles soient en ordre

L’algorithme Chercher la plus grande valeur dans une

section de la liste Déplacer cette valeur dans une position

plus correcte dans la section déjà triée de la liste

Utiliser l’algorithme « Find Largest »

Figure 3.6Selection Sort Algorithm

Selection sort

L’algorithme exécute Find Largest n fois Chaque fois avec une plus petite liste Coût = n-1 + (n-2) + … + 2 + 1 = n(n-

1)/2

Find Largest fait m-1 comparaisons pour une liste de m valeurs

Selection sort Efficacité temps:

Comparaisons: n(n-1)/2 Échanges: n (swap largest en sa

position) Ordre: (n2), meilleur et pire scénarios

Efficacité espace: Espace pour la séquence d’entrées et

un nombre constant de variables locales

L’ordre de magnitude: Ordre n2

Toutes fonctions avec termes d’ordre plus élevé cn2 sont plus ou moins équivalentes (ont des formes similaires)

Un algorithme qui fait des opérations de cn2 (où c est une constante) est donc d’ordre n2 ou bien (n2)

L’ordre de magnitude: Ordre n2

(n2) > (n) peu importe les constantes s’il y en a

Un algorithme qui exécute à (n) est bien plus efficace qu’un autre à (n2)

Figure 3.10Work = cn2 for Various Values of c

Figure 3.11A Comparison of n and n2

Binary Search

Liste déjà en ordre Chercher NAME en comparant par

l’élément au milieu Restreindre la recherche à la moitié

inférieure ou supérieure de la liste si on n’a pas encore trouvé l’entrée voulue

Chaque passe élimine la moitié de la liste

Figure 3.18Binary Search Algorithm (list must be sorted)

Binary Search Efficacité:

Meilleur scénario: Une seule comparaison (1)

Pire scénario: lg n comparaisons

lg2 n : le nombre n peut être divisé par 2 avant d’atteindre 1

(lg n)

Binary Search

Compromis Recherche en séquence (Sequential

Search) Lent mais bon pour des données non

ordonnées Binary Search

Plus rapide mais la liste doit être en ordre

Figure 3.21A Comparison of n and lg n

Pattern Matching

Mesurer deux données: m: la longueur de la string du motif n: la longueur du texte

L’unité de travail Comparaison d’une lettre du motif

avec une lettre du texte

Figure 2.16Pattern-Matching Algorithm

Pattern Matching Efficacité:

Meilleur scénario: Motif n’a pas de correspondant n - m + 1 comparaisons (n)

Pire scénario: Le motif a un correspondant à chaque

point (m -1)(n - m + 1) comparaisons (m x n)

Figure 3.22Order-of-Magnitude Time Efficiency Summary

Figure 3.25Comparisons of lg n, n, n2 , and 2n

Figure 3.27A Comparison of Four Orders of Magnitude

Lectures

Vous êtes encouragé(e)s de lire chapitre 3 surtout les algorithmes dans la section 3.4.1 (aussi diapos # 43-45) pour enrichir vos connaissances et pour pratiquer pour l’examen…

Figure 3.14The Shuffle-Left Algorithm for Data Cleanup

Figure 3.15The Copy-Over Algorithm for Data Cleanup

Figure 3.16The Converging-Pointers Algorithm for Data Cleanup