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 :

Tester toutes les permutations possibles à partir d'une liste de référence et afficher celle qui convient


Sujet :

Algorithmes et structures de données

  1. #21
    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 392
    Points
    9 392
    Par défaut
    C'est effectivement la question que je me suis posée, et en fait la courbe n'est pas en cloche. La concentration la plus forte est aux alentours de 0.21 : pic assez pointu autour de 0.21, et un autre sommet plus arrondi autour de 0.26 si je me souviens bien. On est en fait plutôt dans une courbe type 'Poisson' : cloche nettement déséquilibrée.

    Une autre question intéressante serait de recenser les X pour lesquels l'équations a/bc+d/ef+g/hi=X aurait au moins 2, voire 3 solutions.
    N'oubliez pas le bouton Résolu si vous avez obtenu une réponse à votre question.

  2. #22
    Expert éminent sénior Avatar de Flodelarab
    Homme Profil pro
    Inscrit en
    Septembre 2005
    Messages
    5 243
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Charente (Poitou Charente)

    Informations forums :
    Inscription : Septembre 2005
    Messages : 5 243
    Points : 13 458
    Points
    13 458
    Par défaut
    Une autre question intéressante serait de recenser les X pour lesquels l'équations a/bc+d/ef+g/hi=X aurait au moins 2, voire 3 solutions.
    Mais ! C'est ce que j'ai fait, message #10.
    Je n'ai juste pas voulu griller la surprise du maximum.
    Vous comprenez que c'est plus que 6...
    Il y a 6 objectifs avec 5 solutions
    Il y a 1 objectif avec 6 solutions
    il y a 1 objectif avec ...

    Il serait intéressant de tracer l'histogramme
    C'est franchement pas difficile.
    Sauf que je n'ai pas compris ce que tu mets en abscisse et en ordonnée.
    Si tu mets le nombre de solutions, tu vas avoir des barres horizontales égale à 0 1 2 3 ... pas très intéressantes.
    Je ne sais pas trop comment tu calcules ta densité linéique. Par moyenne locale ? Cela n'a pas trop de sens.
    Cette réponse vous apporte quelque chose ? Cliquez sur en bas à droite du message.

  3. #23
    Membre émérite

    Homme Profil pro
    Formation: Chimie et Physique (structure de la matière)
    Inscrit en
    Décembre 2010
    Messages
    1 333
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 77
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Formation: Chimie et Physique (structure de la matière)
    Secteur : Enseignement

    Informations forums :
    Inscription : Décembre 2010
    Messages : 1 333
    Points : 2 570
    Points
    2 570
    Billets dans le blog
    9
    Par défaut Tester toutes les permutations possibles à partir d'une liste
    La question de l'existence de multiplets, dont quelques uns ont été débusqués
    Citation Envoyé par Flodelarab Voir le message
    C'est quand même extra-ordinaire qu'une seule combinaison corresponde à l'unité.
    Alors que 3 correspondent à 0.95:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    6/14 + 7/35 + 9/28 = 0.95
    6/24 + 7/35 + 9/18 = 0.95
    7/42 + 8/15 + 9/36 = 0.95
    Ou 6 pour 0.0611111
    Ou plus ... pour ...
    semble plus difficile.

    # alex_fomine paraît motivé et désireux de se remettre au Turbo Pascal:
    Citation Envoyé par alex_fomine Voir le message
    ... Je suis un amateur trop vieux et trop loins du temps de l'apprentissage.. L'exercice est un défi lancé par un ami. auquel j'ai pensé longuement pour trouver rigoureusement une solution.
    mais je n'ai pas réussi. voila pourquoi je voudrai renouer avec mon vieux Turbo7 et chercher une solution ...
    Citation Envoyé par alex_fomine Voir le message
    ... C'est vrai que j'ai du mal à me rappeler de l'algorithmique et de la syntaxe Pascal après tant d'années d'éloignement et 'd'abstinence informatique' ...
    ... Même si je serai très reconnaissant si vous pouvez me donner le listing en entier, optimisé et prêt à l’exécution ...
    Une fois n'est pas coutume, comme il ne s'agit pas d'un devoir, je poste le texte source.

    Il contient tout un lot d'instructions simples, et son étude attentive lui permettra de se remettre le pied à l'étrier.
    Raison supplémentaire: il y a dans les indications données auparavant une erreur sournoise propre à décourager un débutant - nul n'est assuré de la fiabilité d'un programme, tant que son exécution n'a pas été testée.

    C'est du Virtual Pascal, mais cela doit pouvoir se compiler sans ennui en Turbo.
    Les instructions de confort, normalement présentes dans une unité encombrante, ont été ici rassemblées dans un fichier inclus.
    Formule_Comb_9ch_Bis.pas
    Le second fichier a été refusé pour des raisons inconnues:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
     
     TYPE Z_08 = ShortInt; Z_16 = SmallInt; Z_32 = LongInt;
          Reel = Extended; Bool = Boolean;
     
     PROCEDURE E(Code: Word);     // Couleurs / Effacement de l'‚cran *)
       VAR Ef, Cf, Ct: Byte;
       BEGIN
         Ef:= Code DIV 100; Ct:= Code MOD 100;  TextColor(Ct);
         Cf:= Ef MOD 10;    TextBackGround(Cf); IF Ef>Cf THEN ClrScr
       END;
     
     PROCEDURE Wt(x, y: Byte; Texte: String);              // Ecriture d'un texte
       BEGIN
         GotoXY(x, y); Write(Texte)
       END;
     
     PROCEDURE We(x, y: Byte; k: LongInt; u: Byte);        // Ecriture d'un entier
       BEGIN
         GotoXY(x, y); Write(k:u)
       END;
     
     PROCEDURE Wr(x, y: Byte; r: Reel; m: Word);           // Ecriture d'un réel
       CONST C = 100;
       VAR u, v: Byte;
       BEGIN
         GotoXY(x, y);
         IF m<C THEN BEGIN
                       u:= m MOD C; Write(r:u)
                     END
                ELSE BEGIN
                       u:= m DIV C; v:= m MOD C;
                       Write(r:u:v)
                     END
       END;


    Le français, notre affaire à tous
    Grand Dictionnaire Terminologique

  4. #24
    Membre émérite

    Homme Profil pro
    Formation: Chimie et Physique (structure de la matière)
    Inscrit en
    Décembre 2010
    Messages
    1 333
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 77
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Formation: Chimie et Physique (structure de la matière)
    Secteur : Enseignement

    Informations forums :
    Inscription : Décembre 2010
    Messages : 1 333
    Points : 2 570
    Points
    2 570
    Billets dans le blog
    9
    Par défaut Tester toutes les permutations possibles à partir d'une liste
    Citation Envoyé par Flodelarab Voir le message
    ...
    Il serait intéressant de tracer l'histogramme
    C'est franchement pas difficile.
    Sauf que je n'ai pas compris ce que tu mets en abscisse et en ordonnée.
    Si tu mets le nombre de solutions, tu vas avoir des barres horizontales égale à 0 1 2 3 ... pas très intéressantes ...
    Pas difficile, en effet: il suffit pour cela de découper le domaine des valeurs observées (Smin = 0.06829 ; Smax = 1.16448) en millièmes par exemple, et de dénombrer les résultat situés dans chacune des tranches: [n ; n+1[;
    l'abscisse variera donc de 68 à 1165 .

    Citation Envoyé par Flodelarab Voir le message
    ... Je ne sais pas trop comment tu calcules ta densité linéique. Par moyenne locale ? Cela n'a pas trop de sens.
    Soit un domaine centré sur une valeur donnée (V0); [V0 - h ; V0 + h[;
    la densité locale d'une distribution au voisinage de cette dernière est le quotient du nombre de valeurs présentes dans l'intervalle considéré, par la largeur de celui-ci: d(V0) = N / (2*h) .
    Cela suppose (h) petit devant la largeur totale - sans que l'on puisse le diminuer indéfiniment, puisqu'on travaille sur un ensemble fini de valeurs.

    La densité moyenne de l'ensemble se déduit du nombre total de valeurs, et de la largeur totale de l'intervalle:
    dmoy = Ntot/(Vmax - Vmin) = 60480/(1.16448 - 0.06829) = 55173 .
    Il faut donc s'attendre, pour l'histogramme, à des ordonnées ~ 55 (en moyenne), et à des valeurs beaucoup plus élevées au voisinage du maximum.


    Le français, notre affaire à tous
    Grand Dictionnaire Terminologique

  5. #25
    Expert éminent sénior Avatar de Flodelarab
    Homme Profil pro
    Inscrit en
    Septembre 2005
    Messages
    5 243
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Charente (Poitou Charente)

    Informations forums :
    Inscription : Septembre 2005
    Messages : 5 243
    Points : 13 458
    Points
    13 458
    Par défaut
    Regroupés par 10000, 1000, 100, 10:
    Nom : sommun_10.png
Affichages : 133
Taille : 6,6 Ko
    Nom : sommun_100.png
Affichages : 129
Taille : 8,3 Ko
    Nom : sommun_1000.png
Affichages : 146
Taille : 14,4 Ko
    Nom : sommun_10000.png
Affichages : 132
Taille : 8,9 Ko
    Cette réponse vous apporte quelque chose ? Cliquez sur en bas à droite du message.

  6. #26
    Membre émérite

    Homme Profil pro
    Formation: Chimie et Physique (structure de la matière)
    Inscrit en
    Décembre 2010
    Messages
    1 333
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 77
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Formation: Chimie et Physique (structure de la matière)
    Secteur : Enseignement

    Informations forums :
    Inscription : Décembre 2010
    Messages : 1 333
    Points : 2 570
    Points
    2 570
    Billets dans le blog
    9
    Par défaut Tester toutes les permutations possibles à partir d'une liste
    Les nuages de points ont un bel aspect, surtout le 3me ... mais je ne comprends pas ce que représente le dernier.

    Citation Envoyé par Flodelarab Voir le message
    Regroupés par 10000, 1000, 100, 10: ...
    Que veux-tu dire par là ?


    Le français, notre affaire à tous
    Grand Dictionnaire Terminologique

  7. #27
    Expert éminent sénior Avatar de Flodelarab
    Homme Profil pro
    Inscrit en
    Septembre 2005
    Messages
    5 243
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Charente (Poitou Charente)

    Informations forums :
    Inscription : Septembre 2005
    Messages : 5 243
    Points : 13 458
    Points
    13 458
    Par défaut
    Je me suis précipité. L'expression n'est pas bonne.

    Il s'agit d'un regroupement par troncature de la valeur multipliée par 10, 100, 1000, 10000.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    a[int(valeur_de_la_somme*10)]++;
    Dans une console Linux (bash):
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    $ liste_des_possibilites.bash  | awk '{a[int($7*10000)]++;} END{for (j=0;j<12000;j++) print j,int(a[j]);}' > sommun_10000.txt
    $ gnuplot -p -e 'set sample 10000;' -e 'plot "sommun_10000.txt"'
    Cette réponse vous apporte quelque chose ? Cliquez sur en bas à droite du message.

  8. #28
    Membre émérite

    Homme Profil pro
    Formation: Chimie et Physique (structure de la matière)
    Inscrit en
    Décembre 2010
    Messages
    1 333
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 77
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Formation: Chimie et Physique (structure de la matière)
    Secteur : Enseignement

    Informations forums :
    Inscription : Décembre 2010
    Messages : 1 333
    Points : 2 570
    Points
    2 570
    Billets dans le blog
    9
    Par défaut Tester toutes les permutations possibles à partir d'une liste
    Citation Envoyé par Flodelarab Voir le message
    ... Il s'agit d'un regroupement par troncature de la valeur multipliée par 10, 100, 1000, 10000.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    a[int(valeur_de_la_somme*10)]++;
    ...
    Là, d'accord.
    Les stries horizontales du dernier diagramme sont un artefact dû à la différence d'échelle des coordonnées, ainsi qu'à la grande dispersion des résultats. Il vaut mieux s'en tenir à un facteur plus raisonnable (1000 ou 500), afin que les tranches soient plus fortement peuplées.


    Le français, notre affaire à tous
    Grand Dictionnaire Terminologique

  9. #29
    Membre émérite

    Homme Profil pro
    Formation: Chimie et Physique (structure de la matière)
    Inscrit en
    Décembre 2010
    Messages
    1 333
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 77
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Formation: Chimie et Physique (structure de la matière)
    Secteur : Enseignement

    Informations forums :
    Inscription : Décembre 2010
    Messages : 1 333
    Points : 2 570
    Points
    2 570
    Billets dans le blog
    9
    Par défaut Tester toutes les permutations possibles à partir d'une liste
    Citation Envoyé par Flodelarab Voir le message
    C'est quand même extra-ordinaire qu'une seule combinaison corresponde à l'unité.
    Alors que 3 correspondent à 0.95:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    6/14 + 7/35 + 9/28 = 0.95
    6/24 + 7/35 + 9/18 = 0.95
    7/42 + 8/15 + 9/36 = 0.95
    Ou 6 pour 0.0611111

    Ou plus ... pour ...
    J'ai écrit une variante du programme permettant l'inventaire des égalités; elles sont en réalité assez nombreuses, et je me suis retrouvé submergé par le nombre de réponses (2100 du type Sk = Sk', dans l'ordre d'énumération: k < k').
    Les multiplets les plus importants correspondent à 0.75 (7 arrangements) et 0.611111... = 11/18 (6 arrangements):

    Nom : Résultat_0.750000.png
Affichages : 103
Taille : 7,6 Ko

    Nom : Résultat_0.611111.png
Affichages : 103
Taille : 7,4 Ko


    Le français, notre affaire à tous
    Grand Dictionnaire Terminologique

  10. #30
    Expert éminent sénior Avatar de Flodelarab
    Homme Profil pro
    Inscrit en
    Septembre 2005
    Messages
    5 243
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Charente (Poitou Charente)

    Informations forums :
    Inscription : Septembre 2005
    Messages : 5 243
    Points : 13 458
    Points
    13 458
    Par défaut
    Les multiplets les plus importants correspondent à 0.75 (7 arrangements)
    Ah ben bravo ! C'est bien la peine que je ménage le suspens !

    elles sont en réalité assez nombreuses
    Ben. 60480. Je l'ai dit dès le début.

    (2100 du type Sk = Sk', dans l'ordre d'énumération: k < k').
    Là, par contre, je ne comprends pas.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    1 x 52622
    2 x 3407
    3 x 279
    4 x 41
    5 x 6
    6 x 1
    7 x 1
    Total 60480
    C'est quoi 2100 ?
    Cette réponse vous apporte quelque chose ? Cliquez sur en bas à droite du message.

  11. #31
    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 392
    Points
    9 392
    Par défaut
    ce que j'ai compris :
    On a 7 combinaisons qui donnent 0.75. Nommons ces 7 combinaisons A B C D E F G.

    On a donc A==B A==C A==D ...etc F==G : 21 pseudo-égalités (je parle de pseudo-égalité et pas d'égalité ; les combinaisons 3 2 4 7 5 6 9 1 8 et 3 5 6 8 1 4 9 7 2 ne sont pas égales, mais elles sont pseudo-égales car 3/24+7/56+9/18=3/56+8/14+9/72=0.75)

    Et le 2100, ce serait (si j'ai bien compris) le nombre de pseudo-égalités.
    N'oubliez pas le bouton Résolu si vous avez obtenu une réponse à votre question.

  12. #32
    Membre émérite

    Homme Profil pro
    Formation: Chimie et Physique (structure de la matière)
    Inscrit en
    Décembre 2010
    Messages
    1 333
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 77
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Formation: Chimie et Physique (structure de la matière)
    Secteur : Enseignement

    Informations forums :
    Inscription : Décembre 2010
    Messages : 1 333
    Points : 2 570
    Points
    2 570
    Billets dans le blog
    9
    Par défaut Tester toutes les permutations possibles à partir d'une liste
    Il y a par exemple 5 arrangements conduisant à la valeur S = 0.45:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
     
    0.45 = (3/15) + (6/48) + (9/72)
         = (3/18) + (6/72) + (9/45)
         = (3/15) + (7/42) + (8/96)
         = (3/15) + (7/92) + (8/46)
         = (3/15) + (8/64) + (9/72)
    de sorte que cette valeur apparaît 10 fois ((5*4)/2) dans l'inventaire programmé, selon l'ordre défini auparavant:

    Nom : Liste_R 0.450000.png
Affichages : 123
Taille : 28,5 Ko

    2100 égalités figurent ainsi dans la liste obtenue (1), dans laquelle les multiplets sont surreprésentés, puisque (m) valeurs identiques figurent dans m(m - 1)/2 couples ordonnés (Sh = Sh'): 1 pour m = 2 , 3 pour m = 3 , 6 pour m = 4 , etc).
    Je ne m'attendais pas du tout à une telle prolifération, d'où quelques difficultés pour la sortie des résultats.

    L'algorithme s'alourdit, et je me suis contenté d'une version un peu fruste.

    (1): (i) représente l'indice de la tranche de l'histogramme , en millièmes (0.45 = 450/1000), (j) et (k) désignent les rangs des termes calculés dans le domaine correspondant [0.450 ; 0.451[ .


    Le français, notre affaire à tous
    Grand Dictionnaire Terminologique

+ Répondre à la discussion
Cette discussion est résolue.
Page 2 sur 2 PremièrePremière 12

Discussions similaires

  1. Réponses: 2
    Dernier message: 24/09/2018, 00h50
  2. Réponses: 1
    Dernier message: 30/11/2011, 10h07
  3. Procéder toutes les permutations possibles d'une liste
    Par supergrey dans le forum Mathématiques
    Réponses: 3
    Dernier message: 21/10/2011, 15h08
  4. Réponses: 23
    Dernier message: 18/02/2010, 15h42
  5. [Algorythme] Tester toutes les combinaisons possibles
    Par strike57 dans le forum VBA Access
    Réponses: 7
    Dernier message: 25/03/2009, 12h26

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