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 :

Implémenter une FIFO sur la base d'une LIFO


Sujet :

Algorithmes et structures de données

  1. #1
    Expert éminent sénior
    Avatar de Baptiste Wicht
    Homme Profil pro
    Étudiant
    Inscrit en
    Octobre 2005
    Messages
    7 431
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 36
    Localisation : Suisse

    Informations professionnelles :
    Activité : Étudiant
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Octobre 2005
    Messages : 7 431
    Points : 21 324
    Points
    21 324
    Par défaut Implémenter une FIFO sur la base d'une LIFO
    Bonjour,

    On nous as donné comme problème de créer une implémentation de FIFO en utilisant exclusivement une LIFO. Jusque là, pas de problèmes, c'est très simple à implémenter, mais la consigne indique qu'on doit fournir toutes les opérations en O(1) en complexité amortie.

    J'ai beau retourner le problème dans tous les sens, je n'ai pas trouvé de solution avec cette complexité.

    Est-ce que quelqu'un sait comment on pourrait faire ? Je suis sûr qu'il doit exister une solution même pas trop compliqué, mais j'arrive pas à voir comment

    Merci d'avance

  2. #2
    Rédacteur
    Avatar de pseudocode
    Homme Profil pro
    Architecte système
    Inscrit en
    Décembre 2006
    Messages
    10 062
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 51
    Localisation : France, Hérault (Languedoc Roussillon)

    Informations professionnelles :
    Activité : Architecte système
    Secteur : Industrie

    Informations forums :
    Inscription : Décembre 2006
    Messages : 10 062
    Points : 16 081
    Points
    16 081
    Par défaut
    Il suffit de prendre 2 FIFO :

    - une FIFO "input" dans laquelle on "push()" les nouveaux éléments.
    - une FIFO "ouput" depuis laquelle on "pop()" les éléments.
    - un algo extrêmement complexe qui transfert "input" dans "output" lorsque on fait un "pop()" et que "ouput" est vide.

    Le worst case est donc le 1er pop() apres une suite de N push(), ce qui nous fait une compléxité amortie de :

    (N*push() + N*transfert() + 1*Pop()) / (N+1 opérations) = (2N+1)/(N+1) = O(1)
    ALGORITHME (n.m.): Méthode complexe de résolution d'un problème simple.

  3. #3
    Expert éminent sénior
    Avatar de Baptiste Wicht
    Homme Profil pro
    Étudiant
    Inscrit en
    Octobre 2005
    Messages
    7 431
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 36
    Localisation : Suisse

    Informations professionnelles :
    Activité : Étudiant
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Octobre 2005
    Messages : 7 431
    Points : 21 324
    Points
    21 324
    Par défaut
    C'est plus compliqué que je pensais

    Par contre, tu me dis de prendre deux FIFO, mais j'ai besoin d'implémenter une FIFO avec une (ou plusieurs LIFO). Est-ce que la technique reste la même ?


  4. #4
    Modérateur
    Avatar de Obsidian
    Homme Profil pro
    Développeur en systèmes embarqués
    Inscrit en
    Septembre 2007
    Messages
    7 374
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 47
    Localisation : France, Essonne (Île de France)

    Informations professionnelles :
    Activité : Développeur en systèmes embarqués
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Septembre 2007
    Messages : 7 374
    Points : 23 631
    Points
    23 631
    Par défaut
    Citation Envoyé par pseudocode Voir le message
    Il suffit de prendre 2 FIFO :

    - une FIFO "input" dans laquelle on "push()" les nouveaux éléments.
    - une FIFO "ouput" depuis laquelle on "pop()" les éléments.
    FIFO → LIFO, dans ce cas, non ? :-)

  5. #5
    Rédacteur
    Avatar de pseudocode
    Homme Profil pro
    Architecte système
    Inscrit en
    Décembre 2006
    Messages
    10 062
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 51
    Localisation : France, Hérault (Languedoc Roussillon)

    Informations professionnelles :
    Activité : Architecte système
    Secteur : Industrie

    Informations forums :
    Inscription : Décembre 2006
    Messages : 10 062
    Points : 16 081
    Points
    16 081
    Par défaut
    Citation Envoyé par Baptiste Wicht Voir le message
    Par contre, tu me dis de prendre deux FIFO, mais j'ai besoin d'implémenter une FIFO avec une (ou plusieurs LIFO). Est-ce que la technique reste la même ?
    Ah, excuse-moi. Habituellement c'est dans l'autre sens qu'on pose l'exercice.

    On peut également résoudre ton problème avec 2 LIFO, mais l'algo est un poil plus complexe. Le but c'est de créer une LIFO "renversée" au moment du pop():

    - push() : on fait un "enqueue" classique dans la LIFO "input"

    - pop(): on fait un "reverse" de la LIFO "input", et on transfère le contenu (eventuel) de la LIFO "output" dans la LIFO "input". A ce stade, la LIFO "input" contient toutes les entrées a l'envers, et la LIFO output est vide. Il ne nous reste qu'a swapper les deux LIFO et faire un "dequeue" de la LIFO "output".

    Par contre je ne suis pas sur qu'on puisse avoir facilement une complexité amortie en O(1). Ca doit pouvoir se faire en optimisant les cas.
    ALGORITHME (n.m.): Méthode complexe de résolution d'un problème simple.

  6. #6
    Expert éminent sénior
    Avatar de Baptiste Wicht
    Homme Profil pro
    Étudiant
    Inscrit en
    Octobre 2005
    Messages
    7 431
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 36
    Localisation : Suisse

    Informations professionnelles :
    Activité : Étudiant
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Octobre 2005
    Messages : 7 431
    Points : 21 324
    Points
    21 324
    Par défaut
    Oki, merci beaucoup pour tes réponses

Discussions similaires

  1. Réponses: 2
    Dernier message: 17/01/2010, 18h09
  2. Créer une API sur la base du PHP (Zend Framework)
    Par Jonathan.b dans le forum Langage
    Réponses: 3
    Dernier message: 07/01/2009, 11h15
  3. Réponses: 6
    Dernier message: 04/11/2008, 22h35
  4. Réponses: 4
    Dernier message: 11/01/2008, 12h18
  5. Une requete sur plusieurs base
    Par MaitrePylos dans le forum PostgreSQL
    Réponses: 6
    Dernier message: 06/10/2006, 16h11

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