Changes between Version 6 and Version 7 of CaoCourseTme8


Ignore:
Timestamp:
Apr 4, 2007, 7:54:06 PM (18 years ago)
Author:
alain
Comment:

--

Legend:

Unmodified
Added
Removed
Modified
  • CaoCourseTme8

    v6 v7  
    134134comprise entre GMAX et GMAX. Chaque case correspond à une valeur de gain, et
    135135contient un pointeur sur une des listes doublement chaînées définies ci-dessus.
     136 * Le gain des cellules rattachées à la case d'index 0 est égal à GMAX
     137 * Le gain des cellules rattachées à la case d'index i est égal à GMAX - i
     138 * Le gain des cellules rattachées à la case d'index 2*GMAX est égal à - GMAX
    136139
    137140On fait la même chose pour représenter la liste GAIN_R.
     
    140143chaînée qui correspond à sa valeur de gain. Au fur et à mesure que les noeuds
    141144sont transférés, les listes se vident, car un noeud qui a subi un mouvement
    142 n'est plus autorisé à  bouger. Puisque le gain des noeuds changent au cours
     145n'est plus autorisé à  bouger. Puisque le gain des noeuds change au cours
    143146de l'algorithme, un même noeud peut être retiré d'une liste et inséré dans
    144147une autre, ce qui justifie l'utilisation de listes doublement chaînées.
     
    158161  bichain_t     *PREV;  // pointeur sur le noeud précédent de même gain
    159162  unsigned      INODE;  // index du noeud
    160   int           IGAIN;  // index dans le tableau des gains : Gain = GMAX - INODE
    161   unsigned  PART;   // numero de la partie 0 pour R, 1 pour L
     163  int           IGAIN;  // index dans le tableau des gains
     164  unsigned  PART;     // numero de la partie 0 pour R, 1 pour L
    162165} bichain_t
    163166}}}
     
    167170  bichain_t **GAIN_L;   // pointeur sur le tableau de pointeurs pour la partie gauche
    168171  bichain_t **GAIN_R;   // pointeur sur le tableau de pointeurs  pour la partie droite
    169   int       LX;                 // index de la première case non vide de GAIN_L (init à -1)
    170   int       RX;                 // index de la première case non vide de GAIN_R (init à -1)
     172  int       LX;         // index de la première case non vide de GAIN_L (init à -1)
     173  int       RX;         // index de la première case non vide de GAIN_R (init à -1)
    171174  bichain_t **NODES;    // pointeur sur le tableau de pointeurs sur les noeuds
    172175} move_manager_t
     
    178181
    179182 '''graph_t * parse_graph(char *filename)'''::
    180         Cette fonction prend pour argument un nom de fichier au format.dot
    181         représentant le graphe à partitionner, et construit en mémoire la structure
     183        Cette fonction prend pour argument un nom de fichier au format .dot
     184        représentant le graphe à partitionner, construit en mémoire la structure
    182185        graph_t correspondante, et renvoie un pointeur sur cette structure. Si aucune
    183186        partition initiale n'est définie dans le fichier .dot, les noeuds d'index
     
    192195graph
    193196{
    194   // les clusters sont optionnels
     197  // la définition des clusters est optionnelle
    195198  subgraph cluster0 {0 1 2 3}
    196199  subgraph cluster1 {4 5 6 7}
     
    206209
    207210 '''void drive_graph(graph_t *p, char *filename)'''::
    208         Cette fonction prend en paramètre un pointeur p sur une structure graph_t,
     211        Cette fonction prend pour argument un pointeur p sur une structure graph_t,
    209212        ainsi que le nom du fichier de sortie, et écrit sur disque un fichier au
    210213        format .dot, en conservant dans le fichier les informations de partition
     
    213216
    214217 '''bichain_t * cons_bichain (bichain_t *prev, bichain_t *next, unsigned inode, int igain, unsigned part)'''::
    215         Cette fonction alloue la mémoire nécessaire pour créer un élément d'une liste
     218        Cette fonction alloue la mémoire nécessaire pour créer un objet de type bichain_t appartenant à une liste
    216219        doublement chaînée, elle initialise les différents champs de cette structure,
    217220        et renvoie un pointeur sur cette structure.
     
    228231 '''void add_node (move_manager_t *mm, bichain_t *node)'''::
    229232        Cette fonction prend pour arguments un pointeur sur la structure représentant
    230         les gestionnaire de mouvements, un pointeur sur un élément de liste doublement
    231         chaînée (représentant un noeud), contenant l'index du nSud dans le graphe,
    232         un entier représentant l'index dans le tableau GAIN_R ou GAIN_L, et un entier
    233         définissant le sous-ensemble d'appartenance (0 pour R, 1 pour L). Elle range
     233        le gestionnaire de mouvements et un pointeur sur un élément de type bichain_t
     234        représentant un noeud) dont les champs INODE, IGAIN et PART sont définis. Elle range
    234235        ce noeud dans la liste doublement chaînée correspondante, elle met à jour
    235         le tableau NODES et les index LX ou LR. Les champs NEXT et PREV du nSud ne
    236         sont pas utilisés, ils sont initialisés par la fonction add_node elle-même.
     236        le tableau NODES et les index LX ou LR. Les champs NEXT et PREV sont initialisés par la fonction add_node().
    237237
    238238 '''bichain_t * del_node(move_manager_t *mm, bichain_t *node)'''::
    239239        cette fonction prend pour arguments un pointeur sur la structure représentant
    240         les gestionnaire de mouvements, et un pointeur sur un élément de liste
     240        le gestionnaire de mouvements, et un pointeur sur un élément de liste
    241241        doublement chaînée (représentant un noeud). Elle retire cet élément de la
    242         liste doublement chaînée, et renvoie un pointeur sur la structure bichain_t
     242        liste doublement chaînée, met à jour le chaînage, et renvoie un pointeur sur la structure bichain_t
    243243        pour une éventuelle libération de la mémoire.
    244244