- 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...
Scification = 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 : finir une perceuse, les commandes/boutons qu'elle accepte
Implémentation
aliser le codage, écrire les instructions 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 scification, et
sans avoir besoin de connaître l'implémentation
Analogie : utiliser la perceuse (percer, visser, fraiser, poncer, autres usages...)
- 3 -
Exemple
Scification
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.
Orations 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. Orations :
- 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 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 orations
temps d'accès constant !
- 5 -
Exemple de type abstrait : la Pile
Collection d'éments
Modèle d'organisation des données : Last In First Out (LIFO)
Importante proprté : la pile peut être vide
Scification 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 linterface ou les textes ? Ou savez-vous comment améliorer linterface utilisateur de StudyLib ? Nhésitez pas à envoyer vos suggestions. Cest très important pour nous !