• Aucun résultat trouvé

1. Classe Liste

N/A
N/A
Protected

Academic year: 2022

Partager "1. Classe Liste"

Copied!
4
0
0

Texte intégral

(1)

LPSIL Ann´ ee 2008-2009 TD Algorithmique - Feuille 4

Listes

On calculera la complexit´ e de chacune des m´ ethodes.

1. Classe Liste

Pour chaque exercice, ´ ecrire les m´ ethodes dans la classe Liste (cas de la liste vide, appel sur la tˆ ete), et dans la classe Chainon (cas du dernier chainon, appel r´ ecursif sur le reste).

• Ecrire la m´ ethode “public String toStringIter()” qui renvoie une chaine de caract` eres d´ ecrivant tous les ´ el´ ements de la liste de fa¸ con it´ erative.

• Ecrire la m´ ethode “public Object chercheElement(int i)” qui renvoie le i

eme

´ el´ ement de la liste (on suppose que l’on num´ erote ` a partir de 0).

• Ecrire la m´ ethode “public void supprimerElement(int i)” qui supprime le i

eme

´ el´ ement de la liste.

• Ecrire la m´ ethode “public Liste intersection(Liste l)” qui renvoie une liste contenant les

´ el´ ements qui appartiennent ` a la fois ` a this et ` a l. Par exemple, si l1 = {“un”, “deux”,

“trois”} et l2 = { “trois”, “quatre”, “un”, “huit”, “cinq”} alors l1.intersection(l2) doit contenir “un” et “trois”.

2. Listes ordonn´ ees

• Ecrire la m´ ethode “public ObjetAClef cherche(int c, int i)” qui renvoie le i

eme

´ el´ ement de clef c le plus ` a gauche.

• Ecrire la m´ ethode r´ ecursive “public ListeOrdonnee fusionneRecursif(ListeOrdonnee l)”

telle que l1.fusionneRecursif(l2) renvoie la liste qui contient les ´ el´ ements de l1 et ceux de l2 tri´ es par ordre croissant.

3. Ensembles

On peut repr´ esenter les ensembles par des listes ordonn´ ees. Dans le cas d’un ensemble les objets sont des entiers et la liste ordonn´ ee ne peut pas contenir deux fois le mˆ eme ´ el´ ement.

• Impl´ ementer les op´ erations ´ el´ ementaires appartient, union et estInclus sur les ensembles dans la classe “Ensemble” donn´ ee en annexe. Commenter chaque m´ ethode en notant les ant´ ec´ edents et cons´ equents, et la complexit´ e dans le pire des cas.

Exemples :

appartenance : 5 appartient ` a {3, 5, 8, 17}, 4 n’appartient pas ` a {3, 5, 8, 17}

union : {3, 5, 8, 17} union {2, 3, 4, 5, 9, 17, 19} vaut {2, 3, 4, 5, 8, 9, 17, 19}

inclusion : {3, 4, 9, 19} est inclus dans {2, 3, 4, 5, 9, 17, 19}

• Expliquer pourquoi il est int´ eressant d’utiliser des listes ordonn´ ees plutˆ ot qu’un tableau ou un vecteur pour coder les ensembles

1

(2)

Annexes

--- CLASSES ChainonEnsemble et Ensemble

--- public class ChainonEnsemble {

protected int element; // l’´el´ement

protected ChainonEnsemble reste; // le lien vers le chainage suivant /**

* Construit un ensemble `a un ´el´ement.

*/

public ChainonEnsemble(int x) { reste = null;

element = x;

}

/** Constructeur priv´e pour les m´ethodes r´ecursives qui construisent des ChainonEnsembles (union, intersection) */

protected ChainonEnsemble(int x,ChainonEnsemble r) { reste = r;

element = x;

} /**

* Teste si le chainon est le dernier

*/

public boolean dernier() { return (reste == null);

} /**

* Accroche un nouveau Maillon contenant l’objet x <br>

* ant´ec´edent : la liste est tri´ee par ordre croissant et ne contient deux fois la m^eme valeur <br>

* cons´equent : la liste contient x, est tri´ee par ordre croissant et ne contient deux fois la m^eme valeur <br>

* complexite : O(n)<br>

*/

public void ajouter(int x) { if (dernier())

reste = new ChainonEnsemble(x);

else if (reste.element > x)

reste = new ChainonEnsemble(x,reste);

else if (x > reste.element) reste.ajouter(x);

// si x est d´ej`a dans la liste on ne fait rien }

/**

* ant´ec´edent : c est un entier

* cons´equent : true s’il y a un ´el´ement de clef c dans l’ensemble this

* complexit´e :

*/

public boolean appartient(int c) { // A COMPLETER

} /**

* ant´ec´edent : l est un ensemble <br>

* cons´equent : true si tous les ´el´ements de this sont aussi dans l

* complexit´e : theta(l1 + l2) o`u l1 et l2 sont les longueurs des deux ensembles

*/

public boolean estInclus(ChainonEnsemble l) { // A COMPLETER

} /**

2

(3)

* ant´ec´edent : l est un ensemble <br>

* cons´equent : un ensemble contenant les ´el´ements de l et ceux de this <br>

* complexit´e :

*/

public ChainonEnsemble union(ChainonEnsemble l) { // A COMPLETER

} /**

* ant´ec´edent : l est un ensemble <br>

* cons´equent : un ensemble contenant les ´el´ements qui appartiennent `a la fois `a l et `a this <br>

* complexit´e :

*/

public ChainonEnsemble intersection(ChainonEnsemble l) { // A COMPLETER

}

public String toString() {

if (dernier()) return element + "";

else return element + " -> " + reste.toString();

} }

--- /** Une classe pour les ensembles <br>

* Un ensemble est repr´esent´e comme une ListeOrdonnee. Il ne peut pas y avoir deux fois le m^eme ´el´ement

*/

public class Ensemble {

private ChainonEnsemble tete; // le lien vers le chainage /**

* Construit un ensemble vide.

*/

public Ensemble() { tete = null;

}

/** Constructeur priv´e pour les m´ethodes r´ecursives qui construisent des Ensembles (union, intersection) */

private Ensemble(ChainonEnsemble c) { tete = c;

} /**

* Teste si l’ensemble est vide

*/

public boolean vide() { return (tete == null);

}

private void ajouterDebut(int x) { if (vide())

tete = new ChainonEnsemble(x);

else tete = new ChainonEnsemble(x,tete);

} /**

* Accroche un nouveau Maillon contenant l’objet x <br>

* ant´ec´edent : la liste est tri´ee par ordre croissant et ne contient deux fois la m^eme valeur <br>

* cons´equent : la liste contient x, est tri´ee par ordre croissant et ne contient deux fois la m^eme valeur <br>

* complexite : O(n)<br>

*/

public void ajouter(int x) { if (vide()|| x<tete.element)

ajouterDebut(x);

else if (x > tete.element) tete.ajouter(x);

// si x est d´ej`a dans la liste on ne fait rien }

3

(4)

/**

* ant´ec´edent : c est un entier

* cons´equent : true s’il y a un ´el´ement de clef c dans l’ensemble this

* complexit´e :

*/

public boolean appartient(int c) { // A COMPLETER

} /**

* ant´ec´edent : l est un ensemble <br>

* cons´equent : true si tous les ´el´ements de this sont aussi dans l

* complexit´e :

*/

public boolean estInclus(Ensemble l) { // A COMPLETER

} /**

* ant´ec´edent : l est un ensemble <br>

* cons´equent : un ensemble contenant les ´el´ements de l et ceux de this <br>

* complexit´e :

*/

public Ensemble union(Ensemble l) { // A COMPLETER

} /**

* ant´ec´edent : l est un ensemble <br>

* cons´equent : un ensemble contenant les ´el´ements qui appartiennent `a la fois `a l et `a this <br>

* complexit´e :

*/

public Ensemble intersection(Ensemble l) { // A COMPLETER

}

public String toString() { if (vide()) return " VIDE ";

else return tete.toString();

} }

4

Références

Documents relatifs

La section suivante pr´esente la m´ethode propos´ee, en d´ecrivant la technique de s´election des caract´eristiques et la mise en oeuvre de la th´eorie des fonctions de croyance

m´ ethode des ´ el´ ements finis pour estimer l’´ etat de contrainte dans le sous-sol au sein de probl` emes inverses qui utilisent la m´ ethode des ´ el´ ements finis et la

Exercice 5.8 Ecrire une fonction existe qui prend en argument un param` etre de type char et un param` etre de type string et renvoie true si le caract` ere apparaˆıt dans la chaˆıne

En outre, les acronymes doivent avoir une méthode String getSigle() qui renvoie la chaine de caractères constituée par les premières lettres de chacun des mots (NB : la méthode

Ecrire une proc´ edure r´ ecursive recherchant le plus grand et le plus petit ´ el´ ement d’un tableau de n ´ el´ ements.. Ecrire une version it´ erative de la proc´ edure pr´

Le fait d’avoir trouv´ e une m´ ethode it´ erative (au moins) convergente prouve que la matrice A est inversible.. D´ ecrire l’algorithme de Gauss-Seidel appliqu´ e ` a

´ Ecrit le tableau de caract` eres tab sur le flux de sortie courant public void write( String s ) throws IOException. ´ Ecrit la chaˆıne de caract` eres s sur le flux de

Donner la suite obtenue par la m´ ethode de Newton permettant d’approcher x ∗.. ´ Ecrire la m´ ethode de Newton comme une m´ ethode de