Bonjour,
Je dispose de n volumes (disons 8) de tailles à peu prés semblables. Ces tailles sont fixes et non modifiables. Chacun de ces volumes contient de nombreux fichiers de tailles variées. Les 8 volumes sont pleins à craquer et disposent de peu d'espace libre. Autrement dit, l'espace disponible sur un volume peut être inférieur à la taille des plus gros fichiers. Par contre l'espace libre total de tous les volumes est supérieur à la taille du plus gros fichier. La taille de chacun des volumes est aussi supérieure à la taille du plus gros fichier.
Le but du jeu est de réorganiser les fichiers sur ces volumes en les déplaçant d'un volume à l'autre pour aboutir à une répartition bien précise des fichiers (chaque fichier doit se retrouver à la fin sur le volume sur lequel il est censé être).
Deux méthodes me viennent à l'esprit:
- Méthode 1: Par volume.
Je pars d'un volume, j'expédie par ordre décroissant de taille un maximum de fichiers mal placés vers leurs volumes respectifs lorsque c'est possible (dans le cas contraire je tente le fichier de taille inférieur), puis quand ce n'est plus possible (faute de place sur les autres volumes ou parce qu'il n'y a plus de fichiers mal placés), je fais la même chose avec le volume suivant et ainsi de suite quitte à faire plusieurs fois le tour de tous les volumes.- Méthode 2: Par fichier.
Partir de la liste de tous les fichiers mal placés (tous volumes confondus) et commencer par placer le plus gros quitte à devoir, dans le pire des cas, déplacer des fichiers vers les mauvais volumes pour faire de la place. La liste est ensuite mise à jour, puis on attaque le plus gros fichier à nouveau, jusqu'à ce que la liste soit vide.
Avec la première méthode, le déplacement de fichier est minimal, mais il y a le risque d'être coincé par deux gros fichiers (ou plus) à cause du manque d'espace libre sur l'un ou l'autre des volumes. (à ce moment là, la méthode 2 pourrait venir à la rescousse).
La deuxième méthode est plus radicale concernant les gros fichiers puisqu'elle les traite en priorité et réussit toujours, par contre elle peut entraîner des déplacements "inutiles".
Connaissez-vous d'autres algorithmes applicables à ce problème et qui minimiseraientle nombre de déplacements de fichiersla quantité de données déplacée?
Partager