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

C Discussion :

Algorithme récursif pour trouver les couples possibles


Sujet :

C

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre habitué
    Homme Profil pro
    Ingénieur Logistique
    Inscrit en
    Novembre 2017
    Messages
    10
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Haut Rhin (Alsace)

    Informations professionnelles :
    Activité : Ingénieur Logistique

    Informations forums :
    Inscription : Novembre 2017
    Messages : 10
    Par défaut Algorithme récursif pour trouver les couples possibles
    Bonjour à toutes et à tous,

    Voilà je suis devant une difficulté importante pour moi : le développement d'un algorithme récursif !

    Je cherche à trouver l'intégralité des couples d'un groupe ( de n membres ) pour une étude importante.

    Explications :

    Groupe (des chaînes de caractères):
    -A1
    -A2
    -B1
    -B2

    (Exemple de 4, mais cela peut-être 2, 3, 4, ... , n)

    Résultats attendus (les couples possibles) :


    A1-A2
    A1-A2-B1
    A1-A2-B1-B2
    A1-A2-B2
    A1-B1
    A1-B1-B2
    A1-B2
    A2-B1
    A2-B1-B2
    A2-B2
    B1-B2


    ps : Le couple A1-A2 vaut également le couple A2-A1 (tous les membres du groupe sont déjà triés!)
    ps2 : Je ne veux pas récupérer les éléments uniques (A1 ; A2 ; etc...) car cela ne forme pas un couple !
    ps3 : Je veux réaliser l'algorithme en C mais la finalité étant de le faire fonctionner en PL/SQL... (Je veux le faire travailler pour une base de données...)


    Je vois qu'il faut faire un algorithme récursif mais je ne sais pas du tout comment m'y prendre... !

    Quelqu'un aurait une piste ou un début d'algorithme pour m'aider ?

    Merci d'avance pour votre aide et pour vos explications !!!

    A bientôt !

  2. #2
    Membre Expert
    Inscrit en
    Mars 2005
    Messages
    1 431
    Détails du profil
    Informations forums :
    Inscription : Mars 2005
    Messages : 1 431
    Par défaut
    Citation Envoyé par Soni0368 Voir le message
    A1-A2-B1
    A1-A2-B1-B2
    A1-A2-B2
    ..ne sont pas des « couples ». Voulais-tu écrire « t-uple » ?


    Citation Envoyé par Soni0368 Voir le message
    Quelqu'un aurait une piste ou un début d'algorithme pour m'aider ?
    Non, ça c'est à toi de nous le fournir.

    Comment procèderais-tu, aidé d'une simple feuille de papier et d'un crayon ?

  3. #3
    Membre habitué
    Homme Profil pro
    Ingénieur Logistique
    Inscrit en
    Novembre 2017
    Messages
    10
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Haut Rhin (Alsace)

    Informations professionnelles :
    Activité : Ingénieur Logistique

    Informations forums :
    Inscription : Novembre 2017
    Messages : 10
    Par défaut
    Citation Envoyé par Matt_Houston Voir le message
    ..ne sont pas des « couples ». Voulais-tu écrire « t-uple » ?
    Des couples polygammes ? Mais oui c'est bien des t-uplés !

    Je vais faire des tests de scénarios possible sur papier pour essayer d'en sortir un algo répétitif... !

  4. #4
    Membre Expert
    Inscrit en
    Mars 2005
    Messages
    1 431
    Détails du profil
    Informations forums :
    Inscription : Mars 2005
    Messages : 1 431
    Par défaut
    À quelques contraintes près, ce que tu cherches à générer se nomme l'ensemble des parties (ou power set en anglais) de l'ensemble de départ.

    Puisque tu comptes au final l'appliquer à une base de données autant l'implémenter directement avec une requête SQL.

  5. #5
    Membre habitué
    Homme Profil pro
    Ingénieur Logistique
    Inscrit en
    Novembre 2017
    Messages
    10
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Haut Rhin (Alsace)

    Informations professionnelles :
    Activité : Ingénieur Logistique

    Informations forums :
    Inscription : Novembre 2017
    Messages : 10
    Par défaut
    Merci ! Je me doutais que cela existait déjà, mais difficile de trouver sans connaître le terme exact...

    Je préfère déjà le faire en C, car c'est plus simple à compiler et executer... ! (pour vérifier que mon algo est bon à 100% avant de me lancer en PL/SQL).

    Merci infiniment pour l'aide ! (je posterais l'algo finale ici).

  6. #6
    Membre habitué
    Homme Profil pro
    Ingénieur Logistique
    Inscrit en
    Novembre 2017
    Messages
    10
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Haut Rhin (Alsace)

    Informations professionnelles :
    Activité : Ingénieur Logistique

    Informations forums :
    Inscription : Novembre 2017
    Messages : 10
    Par défaut
    J'ai trouvé la solution ici : https://www.postgresql.org/message-i...innie.fuhr.org

    Merci encore pour l'aide !

  7. #7
    Membre habitué
    Homme Profil pro
    Ingénieur Logistique
    Inscrit en
    Novembre 2017
    Messages
    10
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Haut Rhin (Alsace)

    Informations professionnelles :
    Activité : Ingénieur Logistique

    Informations forums :
    Inscription : Novembre 2017
    Messages : 10
    Par défaut
    Citation Envoyé par Matt_Houston Voir le message
    À quelques contraintes près, ce que tu cherches à générer se nomme l'ensemble des parties (ou power set en anglais) de l'ensemble de départ.

    Puisque tu comptes au final l'appliquer à une base de données autant l'implémenter directement avec une requête SQL.
    Connaissez-vous le nom de l'algorithme capable de faire sensiblement la même chose mais uniquement pour les couples : 2-uplets ?

    J'ai peur qu'en adaptant l'algorithme powerset pour ressortir uniquement les couples je ralentisse énormément mes performances.

  8. #8
    Membre Expert
    Inscrit en
    Mars 2005
    Messages
    1 431
    Détails du profil
    Informations forums :
    Inscription : Mars 2005
    Messages : 1 431
    Par défaut
    On ne considère à nouveau que les paires non-ordonnées alors ? On recherche donc l'ensemble des sous-ensembles de l'ensemble de départ dont le cardinal est exactement deux. Je ne sais pas si cet algorithme est connu sous un intitulé particulier, mais il n'est pas très compliqué de le retrouver.

    Saurais-tu, par exemple, l'écrire pour le cas particulier de ce sous-ensemble des entiers naturels : { 0, 1, 2, 3, 4 } ? Posons le résultat recherché sur papier, ça devrait t'aider :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    01 02 03 04
       12 13 14
          23 24
             34
    Peux-tu ensuite généraliser le procédé pour un ensemble de départ de cardinal arbitraire ?


    Encore une fois, si c'est au final pour exécuter sur une base de données, fais-le en SQL. L'algorithme C n'a probablement rien à voir avec l'implémentation SQL, qui est fait pour ce genre de requête.

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Algorithme pour trouver les racines
    Par Bob123 dans le forum Débuter avec Java
    Réponses: 1
    Dernier message: 23/09/2010, 09h42
  2. Gestion des erreurs : ou trouver les erreurs possibles pour une opération
    Par Godzestla dans le forum Macros et VBA Excel
    Réponses: 8
    Dernier message: 27/10/2008, 14h33
  3. problème d'algorithme pour trouver les circuit d'un graphe
    Par marc_dd dans le forum Algorithmes et structures de données
    Réponses: 11
    Dernier message: 21/08/2006, 16h36
  4. Problème pour trouver les MAX
    Par Erakis dans le forum Requêtes
    Réponses: 5
    Dernier message: 02/05/2006, 19h58
  5. Réponses: 3
    Dernier message: 24/11/2005, 09h44

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