IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Algorithmes et structures de données Discussion :

Déplacement de fichiers


Sujet :

Algorithmes et structures de données

  1. #1
    Expert éminent Avatar de CosmoKnacki
    Homme Profil pro
    Justicier interdimensionnel
    Inscrit en
    Mars 2009
    Messages
    2 858
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Charente Maritime (Poitou Charente)

    Informations professionnelles :
    Activité : Justicier interdimensionnel

    Informations forums :
    Inscription : Mars 2009
    Messages : 2 858
    Points : 6 556
    Points
    6 556
    Par défaut Déplacement de fichiers
    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 minimiseraient le nombre de déplacements de fichiers la quantité de données déplacée?
    Brachygobius xanthozonus
    Ctenobrycon Gymnocorymbus

  2. #2
    Expert éminent Avatar de CosmoKnacki
    Homme Profil pro
    Justicier interdimensionnel
    Inscrit en
    Mars 2009
    Messages
    2 858
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Charente Maritime (Poitou Charente)

    Informations professionnelles :
    Activité : Justicier interdimensionnel

    Informations forums :
    Inscription : Mars 2009
    Messages : 2 858
    Points : 6 556
    Points
    6 556
    Par défaut
    Méthode 3: Par fichier avec récursion.
    On part de la liste des fichiers mal placés et on commence par placer le plus gros comme dans la méthode 2.
    Disons qu'il se trouve sur le volume A et qu'on veuille le mettre sur le volume B.
    Si la place est suffisante on effectue le déplacement et on passe au plus gros fichier suivant.
    Si la place est insuffisante, on déplace les plus gros fichiers mal placés (par ordre décroissant) du volume B vers leurs volumes adéquates jusqu'à ce qu'il y ait suffisamment de place.
    Si le déplacement d'un de ces fichiers du volume B vers le volume "adéquate", disons C, n'est pas possible car C n'a pas la place suffisante, on recommence la même procédure avec le plus gros fichier mal placé du volume C.
    La récursion se poursuit jusqu'à ce qu'un mouvement soit possible.

    L'idéal serait de transformer ça en processus itératif pour éviter un dépassement de pile.

    Et est-ce que je ne risque pas d'être à nouveau coincé du fait que cette méthode n'autorise pas les "mauvais" déplacements?
    Brachygobius xanthozonus
    Ctenobrycon Gymnocorymbus

  3. #3
    Rédacteur/Modérateur

    Homme Profil pro
    Ingénieur qualité méthodes
    Inscrit en
    Décembre 2013
    Messages
    4 053
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Ingénieur qualité méthodes
    Secteur : Conseil

    Informations forums :
    Inscription : Décembre 2013
    Messages : 4 053
    Points : 9 393
    Points
    9 393
    Par défaut
    Je propose une méthode 4 :

    - Recenser tous les fichiers mal placés, et trier ces fichiers du plus gros au plus petit.

    Tant qu'un mouvement est possible :
    - rechercher le plus gros fichier qu'on peut déplacer vers son volume Final
    - faire le mouvement en question.
    Autrement dit, dans cette phase, je ne fais aucun mouvement 'sur-numéraire'.

    Si à un moment, j'arrive à un blocage :
    - Quel est le volume V où il y a la plus de place disponible ? (en se limitant aux volumes qui sont sensés recevoir au moins un nouveau fichier)
    - Quel est le plus gros fichier F sensé aller dans ce volume, mais pas encore à la bonne place ? (Variante, on prend un fichier F de taille moyenne)
    - Quel est l'espace manquant pour mettre ce fichier F dans ce volume V ?
    - On déplace des fichiers de V vers un autre volume au hasard, prioritairement des fichiers qui ne devraient pas être dans V, puis si nécessaire, des fichiers sensés être dans V , jusqu'à pouvoir déplacer le fichier F sélectionné dans son volume Final.
    - On déplace F vers son volume Final
    Et on reprend l'algorithme principal.


    On peut avoir des blocages.
    Mais avec les contraintes que tu donnes, il y a des situations où aucun algorithme ne va convenir.

    Exemple :
    Tu as n volumes qui font tous environ 10 ou 12 Go.
    Dans chaque volume, tu as un fichier de 7 ou 8 Go, plus des fichiers annexes plus petits.
    Tous les fichiers sont mal placés.

    Problème : tu ne pourras jamais déplacer les fichiers de 7 ou 8 Go
    Donc aucun algorithme ne pourra convenir.
    N'oubliez pas le bouton Résolu si vous avez obtenu une réponse à votre question.

  4. #4
    Rédacteur/Modérateur

    Homme Profil pro
    Ingénieur qualité méthodes
    Inscrit en
    Décembre 2013
    Messages
    4 053
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Ingénieur qualité méthodes
    Secteur : Conseil

    Informations forums :
    Inscription : Décembre 2013
    Messages : 4 053
    Points : 9 393
    Points
    9 393
    Par défaut
    En y réfléchissant un peu plus, c'est probablement plus compliqué.
    L'information 'volumes plein à craquer' est importante.

    Si l'espace total vide est assez important (disons 2% pour fixer les idées), on doit pouvoir y aller en confiance (la méthode que je proposais), et on aura peu besoin de la procédure 'B'.
    Mais si l'espace total vide est très petit, on est en fait dans de la combinatoire. Ca devient comme une énigme à résoudre. Un peu comme l'énige des tours de Hanoi ou différents jeux sur le thème du blocage.
    Il faut commencer par le plus gros fichier : comment faire en sorte que le plus gros fichier mal placé aille dans le bon volume. Mais pour résoudre cette énigme, il faut trouver le cheminement total, s'assurer que les mouvements sont les bons... puis faire effectivement les mouvements.
    N'oubliez pas le bouton Résolu si vous avez obtenu une réponse à votre question.

Discussions similaires

  1. Problème de déplacement de fichier sur le Disque Dur
    Par DeFCrew dans le forum Sécurité
    Réponses: 8
    Dernier message: 11/09/2006, 11h44
  2. [Configuration] Déplacement de fichier d'un domaine vers un sous-domaine
    Par Christophe Charron dans le forum EDI, CMS, Outils, Scripts et API
    Réponses: 7
    Dernier message: 22/06/2006, 15h35
  3. Réponses: 4
    Dernier message: 18/05/2006, 15h00
  4. Déplacement de fichiers
    Par sourivore dans le forum Autres Logiciels
    Réponses: 4
    Dernier message: 03/05/2006, 11h48
  5. Réponses: 16
    Dernier message: 25/11/2004, 12h34

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo