- 1 -
Algorithmique et structures de données I
Frédéric Bapst
• Algorithme =
enchaînement d'opérations destiné à résoudre un problème
• Structure de données =
façon d'organiser des informations pour en faciliter la manipulation
Survol de la matière
• Notion d'analyse de complexité algorithmique
• Techniques de programmation (récursivité, chaînage…)
• Algorithmes classiques (tris…)
• Structures de données du langage (tableaux…)
• Structures de données abstraites (piles, listes…)
• Applications (cryptographie, mots croisés...)
• Métier de programmeur (tests, traitement d'erreurs, assertions...)
• Langage de programmation utilisé dans le cours : Java
- 2 -
Une distinction très importante
Spécification
• Sorte de "mode d'emploi" d'une méthode, d'une classe...
• Spécification = signature : entêtes java, type des paramètres...
+ explications sur l'effet attendu
• Le choix des identificateurs, commentaires
• Il peut y avoir des mises en garde : "il est interdit de..."
• Les explications peuvent être des commentaires Java, ou un document
séparé (guide du programmeur)
• Analogie : définir une perceuse, les commandes/boutons qu'elle accepte
Implémentation
• Réaliser le codage, écrire les instructions nécessaires pour que la
méthode/classe fasse son travail
• Analogie: fabriquer l'intérieur de la perceuse (moteur, circuits électroniques...)
Utilisation
• Employer la méthode/classe pour réaliser un autre programme
en respectant scrupuleusement la spécification, et
sans avoir besoin de connaître l'implémentation
• Analogie : utiliser la perceuse (percer, visser, fraiser, poncer, autres usages...)
- 3 -
Exemple
• Spécification
public static double max(double[] t);
// --- computes the maximum value in the array t
// --- the array must have at least one element
• Implémentation
public static double max(double[] t) {
double m = t[0];
for(int i=1; i<t.length; i++)
if (t[i] > m) m = t[i];
return m;
}
• Utilisation
static double maxInBoth(double[] a, double[] b) {
double ma, mb;
ma = max(a);
mb = max(b);
if (ma>mb) return ma;
return mb;
}
- 4 -
Type abstrait
• Structure de données : façon de représenter des données, et description des
opérations autorisées sur ces données
• Notamment pour stocker une collection d'éléments.
Opérations typiques :
- ajouter un élément
- rechercher un élément
- enlever un élément
• Exemple de structure de données prévue par Java : le tableau. Opérations :
- construire un tableau à n cases O(n)
- lire la case numéro i O(1)
- écrire dans la case numéro i O(1)
• Type abstrait : structure de données qu'on ne définit que par ses opérations
(c.-à-d. sans référence aux détails de la représentation)
• On utilise souvent "type abstrait" et "structure de données" comme synonymes
• 3 aspects : définition implémentation utilisation
• Implémentation : serait souvent facile, si on ne cherchait pas l'efficacité !
Minimiser l'ordre de grandeur de la complexité algorithmique des opérations
temps d'accès constant !
- 5 -
Exemple de type abstrait : la Pile
• Collection d'éléments
• Modèle d'organisation des données : Last In First Out (LIFO)
• Importante propriété : la pile peut être vide
• Spécification en Java :
public class CharStack {
public CharStack(); // unknown capacity
public CharStack(int estSize); // expected capacity
public boolean isEmpty(); // returns true if empty
public void push(char x); // adds x as the most recent elt
public char top(); // gives the most recent elt
public char pop(); // gives and removes the most
// recent element
}
• Il y a des préconditions : il est interdit de faire pop() si isEmpty() est vrai
(le comportement n'est pas défini, "à vos risques et périls")
• On utilise toujours les identificateurs push() et pop(), parfois peek() pour top()
push
pop
1 / 7 100%
La catégorie de ce document est-elle correcte?
Merci pour votre participation!

Faire une suggestion

Avez-vous trouvé des erreurs dans l'interface ou les textes ? Ou savez-vous comment améliorer l'interface utilisateur de StudyLib ? N'hésitez pas à envoyer vos suggestions. C'est très important pour nous!