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 :

Quel algorithme pour classer des opérations par ordre de priorité


Sujet :

Algorithmes et structures de données

  1. #1
    Membre éclairé
    Profil pro
    Inscrit en
    Juillet 2007
    Messages
    802
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2007
    Messages : 802
    Points : 653
    Points
    653
    Par défaut Quel algorithme pour classer des opérations par ordre de priorité
    Bonjour,

    Je souhaiterais exécuter une expression logique qui peut comporter les opérateurs logiques OU et ET, ainsi que des parenthèses.
    Pour obtenir le bon résultat, je dois interpréter les opérateurs logiques selon un ordre de priorité qui dépend des opérateurs et de la présence de parenthèses.

    Je pense que la solution à mon problème consiste à implémenter un arbre où chaque noeud correspond à un résultat intermédiaire, et le sommet correspond au résultat final.

    Savez-vous si cette approche est la mieux adaptée, et si oui, s'il existe un algorithme générique permettant de générer cet arbre ?

  2. #2
    Membre régulier
    Homme Profil pro
    Étudiant
    Inscrit en
    Février 2014
    Messages
    32
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Février 2014
    Messages : 32
    Points : 71
    Points
    71
    Par défaut
    Salut,

    Il faudrait je pense définir la grammaire de ton expression et ensuite générer un arbre syntaxique abstrait. Des algos pour construire/évaluer ces arbres sont trouvables sur le net, c'est un problème connu.

  3. #3
    Expert éminent sénior

    Profil pro
    Inscrit en
    Janvier 2007
    Messages
    10 603
    Détails du profil
    Informations personnelles :
    Âge : 66
    Localisation : France

    Informations forums :
    Inscription : Janvier 2007
    Messages : 10 603
    Points : 17 913
    Points
    17 913
    Billets dans le blog
    2
    Par défaut
    en fait, le problème est assez simple si tu l'écris correctement :

    a + log(b + ((c+d)/2) + ((e-f)*3)

    par exemple

    Tu as des opérateurs a 2 opérandes (par exemple "+", "*", "/", ..), et des opérateurs à 1 opérande (log par exemple).

    Tu comptes les parenthèses ouvrantes/fermantes, tu tries en fonction du nombre, et tu commences par celles qui ont le plus grand nombre.

    C'est de la forme : a + log x

    x =>


    c+d
    (c+d)/2 => r1

    e-f
    (e-f)*3 => r2

    r1 + r2 => r3
    r3+b => x

    log x + a => result
    "Un homme sage ne croit que la moitié de ce qu’il lit. Plus sage encore, il sait laquelle".

    Consultant indépendant.
    Architecture systèmes complexes. Programmation grosses applications critiques. Ergonomie.
    C, Fortran, XWindow/Motif, Java

    Je ne réponds pas aux MP techniques

Discussions similaires

  1. Réponses: 1
    Dernier message: 18/07/2014, 15h39
  2. [AC-2003] Problème pour classer Liste Déroulante par Ordre alphabétique
    Par gigite974 dans le forum Requêtes et SQL.
    Réponses: 2
    Dernier message: 22/03/2011, 11h50
  3. quel algorithme pour trouver le plus grand sous arbres commun à des arbres?
    Par iwky911 dans le forum Algorithmes et structures de données
    Réponses: 0
    Dernier message: 20/05/2009, 21h08
  4. Réponses: 7
    Dernier message: 12/10/2006, 01h23
  5. [MySQL] Classer des résultats par ordre alphabétique
    Par Him dans le forum PHP & Base de données
    Réponses: 4
    Dernier message: 13/07/2006, 14h59

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