• Aucun résultat trouvé

Implantation d’une table à adressage dispersé

N/A
N/A
Protected

Academic year: 2022

Partager "Implantation d’une table à adressage dispersé"

Copied!
4
0
0

Texte intégral

(1)

UNIVERSITÉ DE MONTRÉAL Automne 05

Département IRO Neil Stewart

IFT 2010 A05 Devoir 3.

(25/100)(0.30), soit7.5%de la note finale.

1 Partie théorique (15 points)

Pour les questions 1, 3 et 5, si vous répondez qu’il n’y a pas d’inconvénient majeur, il faut justifier en détail pourquoi la méthode est bonne.

1. (1 point).

Dans la figure 67.42(b) du livre de Drozdek, l’arborescence de recherche est devenue non- balancée à cause d’une insertion. Une stratégie alternative à celle donnée dans le cours serait d’échanger la sous-arborescence gauche deP avec la sous-arborescence gauche deQ, ce qui donnerait un facteur de balancement de0pourP, et un facteur de balancement de0pourQ.

Quel est l’inconvénient majeur de cette stratégie, s’il y en a un?

2. (2 points)

Une arborescence HB[k] (“Height-balanced k”) est une arborescence telle que la valeur absolue du facteur de balancement ne dépasse jamais la valeur de k. Une arborescence AVL est donc une arborescence HB[1]. Quelle serait la motivation pour considérer une arborescenceHB[2]à la place d’une arborescence AVL? Quel serait l’inconvénient associé?

(Bref, quel est le compromis associé au choix de la valeur dek? Une description en mots suffit: aucune analyse formelle n’est demandée.)

3. (3 points)

Dans un compilateur, les clefs K pourraient être les identificateurs (par exemple, les noms de variables). Chaque identificateur est bien sûr emmagasiné comme une séquence de bit.

Supposons une méthode de hashing qui utilise la fonction

h(K) = premier octet de l’encodage deK

etM = 256. Quel est l’inconvénient majeur de ce choix, s’il y en a un (à part le fait queM n’est pas un nombre premier)?

4. (4 points)

Dans la démonstration #4 (7 octobre, 2005), les démonstrateurs ont présenté une méthode pour implanter le TAD Liste en utilisant une arborescence balancée. Il s’agissait d’emmagasiner:

1 +le nombre de noeuds dans la sous-arborescence gauche.

1

(2)

Une stratégie alternative pour implanter Liste par arborescence AVL serait d’utiliser simple- ment lesnclefsKi =i,i= 1, . . . , n.

L’inconvénient majeur de cette stratégie est le fait que, chaque fois qu’il y a une mise-à-jour de la liste, il faut modifier un grand nombre de clefs.

La procédure présentée par les démonstrateurs est nettement plus commode. Donnez (et, sans donner une preuve, justifiez) un résultat quantitatif pour l’opération d’insérer l’elément i[k]dans la liste. (Il s’agit d’énoncer une borne supérieure satisfaisante.)

5. (5 points)

Supposons que dans une application particulière, les recherches réussies soient nettement plus fréquentes que les insertions (insertion↔ recherche échouée). Cela pourrait très bien être le cas dans l’application mentionnée dans la Question 3, par exemple. Considérez la modification suivante de l’algorithme d’insertion, basé sur le hachage double et vu dans le cours.

Supposons que dans une recherche échouée l’algorithme ait regardé les cases c0, c1, . . . , ct−1, ct,

cj = (h(K)−j·p(K)) modM

et que la case ct de la table T est vide. Si t ≤ 1, insérons K dans la case ct, comme d’habitude.

Par contre, sit ≥ 2, calculonsb0 =p(K0), oùK0 =K[c0], et vérifions siT[(c0 −b0) mod M]est vide. Si oui, y affectons la valeurT[c0], et inséronsK à la positionc0.

De la même façon, siT[(c0−b0) modM]est occupé, ett≥3, essayonsT[(c0−2b0) mod M]; si cette case aussi est occupée, calculonsb1 = p(K[c1]), et essayonsT[(c1−b1) mod M].

En général, soientbj = p(K[cj])etcjk = (cj −kbj) modM. Pour r = 1,2, . . ., siT[cjk] est occupé pour toutes les valeurs dej etktelles quej+k < r,t≥r+ 1, regardons

T[c0r], T[c1,r−1], . . . , T[cr−1,1].

Si la première espace libre se trouve àcj,r−j, alors faisons l’affectation T[cj,r−j]←T[cj],

et inséronsKàcj.

Quelle serait la motivation pour cette modification de l’algorithme? Quel serait l’inconvénient majeur associé, s’il y en a un?

2

(3)

2 Partie pratique (10 points)

Implantation d’une table à adressage dispersé

En intelligence artificielle, il arrive souvent qu’un programme consulte une base de données pour prendre des décisions. Par exemple, un programme d’intelligence artificielle qui joue aux échecs pourrait évaluer le prochain coup à jouer en fonction de l’état de l’échiquier et d’une grande banque de parties d’échec. Le programme pourrait alors choisir son coup parmi l’ensemble des coups associés à l’état1actuel de l’échiquier dans la base de données.

Remarque : Le problème d’une intelligence artificielle pour un jeu d’échec est en réalité beau- coup plus complexe et exige des approches également très sophistiquée. L’usage d’une base de données comme celle-ci pourrait peut-être être considérée lorsque qu’une partie tire à sa fin, mais certainement pas pour gérer l’ensemble de la partie.

Dans le contexte de ce travail, nous vous demandons d’implanter une structure qui permettrait à un programme d’accéder rapidement à une liste de coups possibles à partir de l’état d’un échi- quier. Pour se faire, vous devez utiliser une technique d’adressage dispersé (hashing) avec chaînage séparé. Plus précisément, vous devez fournir les classes suivantes :

– EchecBDChainee, votre table à adressage dispersé qui doit hériter de la classe abstraite EchecBD et qui doit fournir un constructeur ayant les mêmes arguments que celui de la super-classe ;

– EchiquierHash, qui doit implanter l’interfaceHash<Echiquier> et qui fournit une méthode pour calculer la fonction d’adressage et un constructeur qui prend en paramètre le nombre de cases dans le tableau de la table ; une instance de cette classe sera utilisée comme premier argument du constructeur deEchecBDChainee;

– EchiquierEqual, qui doit implanter l’interface Equal<Echiquier> et qui fournit une méthode pour evaluer l’égalité de deux états d’échiquier ; une instance de cette classe sera utilisée comme deuxième argument du constructeur deEchecBDChainee.

La classe abstraites, les interfaces ainsi que les détails des méthodes à implanter se trouvent sur le site du cours.

Contraintes

Il est interdit d’utiliser quoi que ce soit qui touche au hashing dans l’API de Java ! Ceci inclut java.util.HashMap, java.util.HashSet, la méthode hashCode de toute classe, ou tout autre classe ou méthode dont le nom contient ”hash”.

Vous trouverez sur le site du cours : – la classe abstraiteEchecBD.java; – l’interfaceHash.java;

– l’interfaceEqual.java;

– la classeEchiquier.java, qui décrit les objets clés ;

1L’état d’un échiquier est sa configuration des pièces.

3

(4)

– le répertoiredoc/, la documentation Javadoc des fichiers précédents ;

– les fichiers chess.pgn et chess_subset.pgn, des exemples de banques de parties d’échecs ;

– le fichier TestEchecBD.java, un programme qui teste le fonctionnement de votre im- plantation. Il lit une banque de parties d’échec, construit la banque de données et effectue une série de requêtes sur la banque. L’usage du programme est :

java TestEchecBD num-tests germe < entree

où num-tests est le nombre de requêtes, et germe (facultatif) est le germe du générateur de nombres pseudo-aléatoires. Les données sont lues sur l’entrée standard, alors procé- dez par redirection. Notez qu’il est fort probable que vous rencontriez des problèmes de OutOfMemoryException. Pour contourner le problème, ajoutez l’option-Xmx128mà la ligne de commande dejavalors de l’exécution. Ceci va augmenter la limite à 128 méga- octets plutôt que 64. N’essayez pas avec plus, car lors de l’évaluation, nous utiliserons cette limite.

*** Version de Java ***

Vous devez utilisez la version1.5.

Remise et évaluation

Vous devez remettre les fichiersEchecBDChainee.java,EchiquierHash.java, EchiquierEqual.java, et tout autre fichier nécessaire à la compilation de votre programme (autre que ceux qui vous sont fournis sur le site du cours) avec la commande suivante :

remise ift2010 tp3<vos fichiers>

Avec la partie théorique, vous devez aussi remettre une brève explication de votre structure de données (quelques phrases), ainsi qu’une justification de votre fonction d’adressage (maximum une demie page).

En plus du bon fonctionnement, vous serez aussi aussi évalués en fonction de la perfomance de votre table d’adressage dispersé et de la qualité de votre fonction d’adressage.

À réaliser en équipes de 1 ou 2. À remettre le 11 novembre 2005, avant 11 :30. Les démonstra- teurs présenteront les solutions dans la démonstration de vendredi 11 novembre. Ils n’accepteront pas de devoirs après le début de la présentation des solutions.

4

Références

Documents relatifs

Avec cinq graduations intermédiaires au minimum, celui-ci donne 40 configurations possibles qui incluent les deux qui viennent d’être mentionnées.. Pour L variant de 24

Les techniques de routage inter-domaine sans classe (CIDR) et de masque réseau de longueur variable (VLSM) n'ont pas seulement sauvé l'Internet (temporairement) de la catastrophe

Lorsque tous les bits de l'hostid sont égaux à 1, on est en présence non pas d'une adresse d'hôte mais d'une adresse de diffusion dirigée (direct broadcast) c'est à dire un message

Le protocole ARP a un rôle phare parmi les protocoles de la couche réseau, il permet de connaître l’adresse physique d’une carte réseau correspondant à une adresse IP?.

On peut remarquer que le nombre maximum d'adresses d'hôtes disponibles correspond à l'espace d'adressage du sous-réseau moins deux.. C'est parce que la première adresse désigne

Les deux premiers octets étant compris dans la partie réseau, ils restent inchangés?. Le quatrième octet (40) étant compris dans la partie hôte, il suffit de le remplacer

Donner pour le routeur, l’adresse privée qui lui permet de communiquer avec le superviseur sur internet ainsi que l’adresse publique qui lui permet de communiquer avec le matériel de

Donner pour le routeur, l’adresse privée qui lui permet de communiquer avec le superviseur sur internet ainsi que l’adresse publique qui lui permet de communiquer avec le matériel de