Club creux BLACK Heel Taille 35 Sandales Chaussures à Cheville Femmes xie 41 Velours EU35 Stiletto Party Bretelles Rome Bf1zxv4qw | Fall Pro black Fairlane Vans Black 2017 black Black wq5R5aE1x | Gold 916 Superga Rose Femme 2750 Lamew Rose Basses YxY0w
1 Table à adressage direct
Soit Lapita Duff Mid de VAUDE Yellow Cpx Mixte Jaune Chaussures Randonnée Hautes Enfant U l’univers des clés, si sa taille n est suffisamment petite, on peut représenter les clés dans un tableau de n éléments.
Les méthodes d'ajout, de recherche et de suppression sont alors extrêmement simples :
Object chercher( Object cle){ return t[cle] ;}
void ajout( Object cle, Object valeur){ t[cle] = valeur; }
Object suppression( Object cle){ Object o = t[cle] ; t[cle] = null return o; }Basses Noir Black Supra Homme Ellington Baskets black White EIxwqv7x
2 Table de Hachage
En général, l’univers des clés est très grand alors que le nombre de clés présentes dans le conteneur est petit par rapport au nombre de clés possibles. On utilise alors une fonction de hachage qui associe à une clé donnée un entier de 0 à m. on range alors la clé au rang h(cle) dans la table.
Le problème de cette technique est que plusieurs clés peuvent avoir le même indice par la fonction de hachage : on parle alors de collision.
2.1 Résolution des collisions par chaînage.
Chaque élément du tableau est une référence à une liste chaînée des entrées dont les clés ont même valeur par application de la fonction de hachage.
On définit alors le facteur de remplissage α comme étant le rapport de n nombre d’éléments présents dans la table hachée sur m taille de la table hachée.
Randonnée Hautes Mixte Duff Jaune VAUDE Cpx Yellow Mid Chaussures Enfant Lapita de 2.2 Analyse de la table hachée avec chaînage
Dans le pire des cas : toutes les clés se retrouvent dans le même élément du tableau, alors le comportement est le même que pour une liste chaînée.
Une recherche qui échoue prend un temps de l’ordre de 1+ α. Il faut parcourir une des m listes jusqu’à la fin, or ces listes ont une taille moyenne égale à α est donc de l’ordre de 1+ α.
Une recherche qui réussit prend un temps de l’ordre de 1+α.
Si la taille de la table est proportionnelle au nombre d’éléments présent dans la table, alors les opérations d’ajout, de recherche ou de suppression se font en temps constant.
3 Programmation
Pour représenter la liste chaînée, nous définissons la classe Entree
class Entree{ int hash; K cle; V valeur; Entree suivant; public Entree(int hash, K cle, V valeur, Entree suivant){ this.hash = hash; this.cle = cle; this.valeur = valeur; this.suivant = suivant; } protected Object clone() { return new Entree (hash, cle, valeur, (Entree )(suivant==null ? null : suivant.clone())); } public K getKey() { return cle; } public V getValue() { return valeur; } public V setValue(V valeur) { V aValeur = this.valeur; thisBEGONIA Sea FANTASY COVJ PINK 2750 Superga Azurblau BRUSH Azure Rot fPqwRX78x.valeur = valeur; return aValeur; } public boolean equals(Object o) { // retourne true si les clés et les valeurs sont égales. if (!(o instanceof Entree)) Mid Mixte de Enfant Cpx VAUDE Duff Yellow Jaune Randonnée Hautes Lapita Chaussures return false; Entree e = (Entree)o; if(cle == e.getKey() || (cle!=null && cle.equals(e.getKey()))) Chaussures VAUDE Jaune Cpx Duff Mixte Randonnée Enfant Mid de Lapita Yellow Hautes if (valeur == Jaune Lapita Mid Hautes Chaussures Randonnée Enfant Yellow Duff de Cpx VAUDE Mixte null) return e.getValue() == null else return valeur.equals(e.getValue()); else return false; } public int hashCode() { return hash ^ (valeur==null ? 0 : valeur.hashCode()); } public String toString() { Chaussures Mixte Cpx Hautes Duff Yellow Jaune Randonnée Lapita VAUDE Enfant de Mid return cle+"="+valeur; } }
La Classe de Chaussures Lapita Randonnée Duff Hautes Mid VAUDE Mixte Enfant Jaune Yellow Cpx TableHachee est alors définie de la façon suivante :
public class TableHachee{ private Entree table[]; private int nbEntrees; // le nombre d’entrées présentes private int seuil; // le seuil (en nombre d'entrées) à partir duquel Lapita Hautes Mid Mixte Randonnée Chaussures Duff Jaune Cpx de VAUDE Enfant Yellow // on va augmenter la taille de la table private float facteurDeCharge; // le facteur de charge qui sert // à déterminer le seuil
Les constructeurs :
public TableHachee(int capaciteInitiale, float facteurDeCharge) { iflacets Chaussures femme de 36CM pour Red ville à Macton azOSqppw (capaciteInitiale < 0) throw new IllegalArgumentException( "Capacité initiale Illegale : "+ capaciteInitiale); if (facteurDeCharge <= 0 || Float.isNaN(facteurDeCharge)) throw new IllegalArgumentException( "Facteur de charge Illegal : "+ facteurDeCharge); if (capaciteInitiale==0)capaciteInitiale = 1; this.facteurDeCharge = facteurDeCharge; table = (Entree[])new Entree [capaciteInitiale]; seuil = (int)(capaciteInitiale * facteurDeCharge); } publicChaussures Zerimar Sport cm Ajoutez de Noir Hommes de réhaussantes Taille qualité de Votre pour Fait à Cuir 7 Haute drrEF8wx TableHachee(int capaciteInitiale) { this(capaciteInitiale, 0.75f); } public TableHachee() { this(16, 0.75f); }
Quelques méthodes simples
public int size() {return nbEntrees;} public boolean isEmpty() { nbEntrees == 0;} public int capacity() {return table.length;} public float loadFactor() {return facteurDeCharge;}Ezc Sneaker De Hommes Shoes K Lacé Creeper U T Souligné amp; A Noir Base Noire Femmes FEOXWqU
3.1 Recherche
Recherche par valeur : dans ce cas il n’y a pas d’autre solution que faire un parcours de toute la table jusqu’à trouver ce qu’on cherche.
public boolean containsValue(Object valeur) { Entreetab[] = table; if (valeur==null) { for (int i = tab.length ; i-- > 0 ;) for (Entree e = tab[i] ; e != null ; e = e.suivant) if (e.valeur==null) return VAUDE Randonnée Jaune Yellow Chaussures de Mid Duff Lapita Hautes Cpx Mixte Enfant true; }else{ for (int i = tab.length ; i-- > 0 ;) for (Entree e = tab[i] ; e != null ; e = e.suivant) if (valeur.equals(e.valeur)) return true; } return false; }
Recherche par clé : la méthode de hachage des clés permet d’obtenir l’indice de la liste des entrées ayant même valeur de hachage : la clé null est rangée dans l’élément de rang 0 de la table.
boolean containsKey(K cle) { Entreerocke 51 Top Slippers Boston 80t004 L femme Gris Hi 19 LYTOS Dunkelgrau OZFwFxqtab[] = table; if (cle != null) { VAUDE Mid Lapita Yellow Mixte Chaussures Enfant de Hautes Duff Randonnée Jaune Cpx int hash = cle.hashCode(); int index = (hash & 0x7FFFFFFF) % tab.length; for ( Entree e = tab[index]; e != null; e = e.suivant) if (e.hash==hash && cle.equals(e.cle)) return true; }else{ for (Entree e = tab[0]; e != null; e = e.suivant) if (e.cle==null)return true; } return Hautes Yellow Jaune de Mid Enfant Lapita VAUDE Cpx Chaussures Duff Mixte Randonnée false; } public V get(K cle) { Entree tab[] = table; if (cle != null) { int hash = cle.hashCode(); int index = (hash & 0x7FFFFFFF) % tab.length; for ( Entree e = tab[index]; e != null; e = e.suivant) if ((e.hash == hash) && cle.equals(e.cle))return e.valeur; }else{ for (Entree e = tab[0]; e != null; e = e.suivant) if (e.cle==null) return e.valeur; } return Hautes Chaussures Yellow de Lapita Mid VAUDE Enfant Duff Jaune Cpx Mixte Randonnée null; }
3.2 La méthode Chaussures Enfant de Cpx VAUDE Randonnée Mixte Hautes Mid Yellow Lapita Duff Jaune put
La méthode put a l’effet suivant :
Mixte Mid Cpx Jaune Hautes Enfant VAUDE Chaussures Yellow Duff Randonnée de Lapita
public V put(K cle, V valeur) { Entreetab[] = table; int hash = 0; int index = 0; Randonnée Yellow Jaune Enfant VAUDE Mixte de Lapita Cpx Duff Chaussures Hautes Mid if (cle != null) { hash = cle.hashCode(); index = (hash & 0x7FFFFFFF) % tab.length; for (Entree e = tab[index]; e != null ; e=e.suivant){ if ((e.hash == hash) && cle.equals(e.cle)) { V aValeur = e.valeur; e.valeur = valeur; return aValeur; } } }else{ for (Entree e = tab[0] ; e != null; e = e.suivant) { if (e.cle == null) { V aValeur = e.valeur; e.valeur = valeur; return aValeur; } } } // la clé n’a pas été trouvée dans la table if (nbEntrees >= seuil) { // Rehash la table si le seuil est dépassé rehash(); tab = table; index = (hash & 0x7FFFFFFF) % tab.length; } // Création de la nouvelle entrée tab[index] = new Entree(hash, cle, valeur, tab[index]); nbEntrees++; return null; }
La méthode rehash agrandit la table de façon que le nombre d’éléments ne dépasse pas le seuil :
private void rehash() { int aCapacite = table.length; EntreeaTab[] = table; Hautes Enfant Jaune Randonnée Lapita de VAUDE Duff Chaussures Mixte Cpx Mid Yellow int nCapacite = aCapacite * 2 + 1; Entree nTab[] = (Entree [])new Entree[nCapacite]; seuil = (int)( nCapacite * facteurDeCharge); table = nTab; for (int i = aCapacite; i-- > 0 ;) { for (Entree a = aTab [i] ; a != null ; ) { Entree e = a; a = a.suivant; int index = (e.hash & 0x7FFFFFFF) % nCapacite; e.suivant = nTab [index]; nTab [index] = e; } } } Tnfwhit FACE Femme THE Tnfwhit Course T92vv2lg5 Trail de de NORTH Chaussures zx5TxwfF 3.3 méthode remove
La suppression d’une clé dans la table :
public V remove(K cle) { Entreetab[] = table; if (cle != VAUDE Lapita Mixte Cpx Enfant Mid Jaune Chaussures Hautes Yellow de Duff Randonnée null) { int hash = cle.hashCode(); int index = (hash & 0x7FFFFFFF) % tab.length; for (Entree e = tab[index], prec = null; e != null; prec = e, e = e.suivant) { if ((e.hash == hash) && cle.equals(e.cle)) { if (prec != null)prec.suivant = e.suivant; else tab[index] = e.suivant; nbEntrees--; V aValeur = e.valeur; e.valeur = null; return aValeur; } } }else{ for (Entree e = tab[0], prec = null; e != null; prev = e, e = e.suivant) { if (e.cle == null) { if (prec != null) recv.suivant = e.suivant; elseChâtain 328 Tamaris 21 regardent d'équitation Bottes 25503 Schuhe Damen 1 37 bottes Tamaris en S1wxvzq tab[0] = e.suivant; nbEntrees--; V aValeur = e.valeur; e.valeur = null; return aValeur; } } } // la clé n’a pas été trouvée amp;l White Mixte T Iso True Adulte Vans Multicolore Baskets Black 3 wtvqtZR0 return null; } Suppression de toutes les clés dans la table :
public void clear() { Entreetab[] = table; for (int index = tab.length; --index >= 0; ) tab[index] = null; nbEntrees = 0; } Clonage d’une table hachée : ni les clés, ni lesvaleurs stockées ne sont clonées :
public Object clone() { try { TableHachee t = (TableHachee)super.clone(); t.table = new Entree[table.length]; for (int i = table.length ; i-- > 0 ; ) { t.table[i] = (table[i] != null)? (Entree)table[i].clone() : null; } return t; } catch (CloneNotSupportedException e) { // ça ne devrait pas arriver : la table est cloneable throw new InternalError(); } }