Nantes Université

Skip to content
Extraits de code Groupes Projets
Valider df5cf867 rédigé par Arnaud LANOIX's avatar Arnaud LANOIX
Parcourir les fichiers

maj readme

parent 8f10e1e4
Aucune branche associée trouvée
Aucune étiquette associée trouvée
Aucune requête de fusion associée trouvée
...@@ -102,6 +102,8 @@ https://fr.wikipedia.org/wiki/Table_de_hachage ...@@ -102,6 +102,8 @@ https://fr.wikipedia.org/wiki/Table_de_hachage
## Travail à faire ## Travail à faire
![](ressources/hashtable.png)
L'interface `IHashtable` donne les fonctionnalités attendues par L'interface `IHashtable` donne les fonctionnalités attendues par
une table de hachage. une table de hachage.
...@@ -113,7 +115,13 @@ un constructeur permettant d'initialiser une taille. ...@@ -113,7 +115,13 @@ un constructeur permettant d'initialiser une taille.
Elle propose également une méthode `indice(element: E): Int` Elle propose également une méthode `indice(element: E): Int`
qui donne l'indice d'un élément dans la table, c-à-d le hachage modulo la taille. qui donne l'indice d'un élément dans la table, c-à-d le hachage modulo la taille.
### Implementer `SimpleHashtable` ### Préliminaire
En observant le diagramme de classes, et le code fourni,
déterminez quels design patterns seront mis en oeuvre ?
### Implémenter `SimpleHashtable`
La classe `SimpleHashtable` est une table La classe `SimpleHashtable` est une table
de hachage sans gestion des collisions. L'arrivée d'une collision provoquera de hachage sans gestion des collisions. L'arrivée d'une collision provoquera
...@@ -136,17 +144,17 @@ quand l'élément n'est pas `null` ...@@ -136,17 +144,17 @@ quand l'élément n'est pas `null`
Des cas de tests vous permettent de valider vos développements. Des cas de tests vous permettent de valider vos développements.
### Implementer `Hashtable` ### Implémenter `Hashtable`
La classe `Hashtable` est une table La classe `Hashtable` est une table
de hachage gérant les collisions par chaînage externe. de hachage gérant les collisions par chaînage externe.
L'arrivée d'une collision ne lève donc plus d'exception. L'arrivée d'une collision ne lève donc plus d'exception.
La structure de données interne proposée ici correspond bien à l'attente : La structure de données interne proposée ici correspond bien à l'attendu :
table : Array< MutableList<E> > table : Array< MutableList<E> >
L'initialisation permet de remplir la table d'autant de L'initialisation permet de remplir la table avec autant de
listes vides que nécessaire. listes vides que nécessaire.
Des cas de tests vous permettent de valider vos développements. Des cas de tests vous permettent de valider vos développements.
@startuml
hide circle
'skinparam monochrome true
skinparam classAttributeIconSize 0
skinparam backgroundcolor white
skinparam groupInheritance 4
class Hashable <<interface>> {
hash() : Int
}
class IHashtable<E> <<interface>> {
add(element: E): Boolean
contains(element: E): Boolean
remove(element: E): Boolean
avoidedCollisions() : Int
}
IHashtable .right.> Hashable : << depends >>
class HashtableA<E> {
- size : Int
<<create>> HashtableA(site : Int)
# indice(element: E): Int
}
HashtableA .up.|> IHashtable : << realizes >>
class SimpleHashtable<E> {
- table : Array<Any?>
- get(index : Int) : E
+ add(element: E): Boolean
+ contains(element: E): Boolean
+ remove(element: E): Boolean
}
SimpleHashtable -up-|> HashtableA
class Hashtable<E> {
- table : Array<MutableList<E>>
- nbCollisions : Int = 0
+ add(element: E): Boolean
+ contains(element: E): Boolean
+ remove(element: E): Boolean
+ avoidedCollisions() : Int
+ {static} resize(hashtable : Hashtable<E>, newsize : Int) : IHashtable<E>
}
Hashtable -up-|> HashtableA
@enduml
\ No newline at end of file
ressources/hashtable.png

44,9 ko

...@@ -29,7 +29,7 @@ interface IHashtable<E : Hashable?> { ...@@ -29,7 +29,7 @@ interface IHashtable<E : Hashable?> {
fun remove(element: E): Boolean fun remove(element: E): Boolean
/** /**
* @return le nombre de collisions évitées grâce au chainage * @return le nombre de collisions évitées
*/ */
fun avoidedCollisions() : Int { fun avoidedCollisions() : Int {
return 0 return 0
......
0% Chargement en cours ou .
You are about to add 0 people to the discussion. Proceed with caution.
Veuillez vous inscrire ou vous pour commenter