Arrangement / Combinaison

Bonjour à vous,

Déjà je tenais à signaler que je ne suis ni une mathématicienne, ni une informaticienne, je ne sais donc pas programmer et je n'ai donc pas votre langage technique (c'est pourquoi je ne savais pas quoi écrire dans la recherche).
Et là vous vous dites : "Éh merde, voilà un boulet" :-p

Mais je vais tout de même vous exposer mon problème, on ne sait jamais ^^

J'aimerais soit un logiciel en ligne, soit une formule (sous Excel ou OpenCalc) pour pouvoir me trouver des combinaisons.
Comme un exemple va être plus parlant en voici un :

Je dispose de 3 chiffres (1, 2, 3) et je veux faire une combinaison de 4 chiffres, je peux donc obtenir ce genre de combinaison :
1111
1112
1121
1211
2111
1113
2211
1231
...

Cependant comme dans cette combinaison il n'y a pas de "début" et de "fin" les combinaisons suivantes sont les "même" et font donc "doublon" (quadruplon pour le coup ^^).
1112 = 1121 = 1211 = 2111

1231 = 1123 = 3112 = 2311
qui est différent de :
3121 = 1312 = 2131 = 1213
...

Il faudrait donc dans les résultats de toutes les combinaisons, garder qu'une combinaison parmi les "même".

La finalité est toujours de faire une combinaison de 4 (ou 6) chiffres mais avec plus de chiffres (1, 2, 3, 4, 5, 6, 7...)

J'espère avoir été tout de même assez claire et je vous remercie d'avance pour votre aide.

5 réponses

  1. bonjour

    Pour le vocabulaire, ce sont des combinaisons avec répétition que tu cherches
    et le nombre de combinaisons avec répétitions de p éléments choisis parmi m est
    Combin(m + p - 1, p)
    un exemple
    https://www.cjoint.com/?0KwhP64qNOn

    bonne suite
    0
    1. Déjà merci à toi d'avoir pris du temps pour me répondre.

      Peut-être que j'ai mal utilisé ton fichier Excel, mais il ne semble pas me donner toute les combinaisons.
      Par exemple avec p=4 et m=3, ça me donne 15 combinaisons.
      Et en regardant cette listes, je ne trouve pas, par exemple, la combinaison 1132, 1312, 2212, ou encore 3213...

      En cherchant un peu, j'ai l'impression que ce que je cherche ce n'est pas une Combinaison, mais un Arrangement.

      Et je souhaitais préciser que quand je dis que :
      1213 = 3121 = 1312 = 2131
      c'est qu'en lisant en boucle chacune de ces listes de chiffre, on lit à chaque fois la même suite. Avec des lettres ça donnerais :
      abcd = dabc = cdab = bcda

      Donc problème non résolue :-p
      0
  2. Je souhaitais aussi partager ce qu'on a put me répondre sur d'autre forum, si ça peut aider à m'aider ^^

    Algorithme de Joe Sawada :
    http://www.cis.uoguelph.ca/~sawada/papers/alph.pdf


    Je ne sais pas si ça correspond à mon problème...
    Ensuite je ne maitrise pas assez Excel pour traduire l'algo en VBA. Mais il ne fait qu'une dizaine de lignes, donc ca ne pose peut être pas problème à ceux qui maitrisent ce langage.
    0
    1. Un autre lien :

      Formule de Burnside-Frobenius et Indicateur d'Euler
      http://www.les-mathematiques.net/d/c/c/node4.php
      0
  3. re

    je ne comprends pas bien ce que tu veux
    pour m = 3 et p = 4, par exemple
    la combinaison avec répétition 1132 figure bien parmi les 15 possibles, mais sous la forme 1123
    et comme tu as précisé
    Il faudrait donc dans les résultats de toutes les combinaisons, garder qu'une combinaison parmi les "même".
    1132 et 1123 sont deux arrangements différents mais de la même combinaison avec répétition

    RQ. dans un arrangement l'ordre est pris en compte 1123 est différent de 1213,
    dans une combinaison non et 1123 = 1213

    bonne suite
    0
    1. RQ2. l'utilitaire SuccesseurCombinaisonsAvecRepetition ne fait guère plus qu'une dizaine de lignes, c'est lui qui génère la suite des combinaisons avec répétition, il est dans le Module 1.
      Le code qui est dans Feuil1, s'occupe principalement de l'interfaçage entre toi et l'utilitaire (entrées/sorties entre autres)
      0
    2. Sacré vocabulaire ^^
      Toujours d'après recherche, je pense alors que c'est un Arrangement avec Répétition.

      Je peux reformuler mon énoncer avec l'exemple d'un collier.
      Ce que j'aimerais c'est de pouvoir :
      - choisir de combien de perle sera composer les colliers
      - choisir le nombre de couleur disponible des perles (ces couleurs étant communes à toutes les perles composant le collier)
      - obtenir le nombre de collier différent ainsi que l'arrangement / le détail de tous ces colliers

      Mais comme un collier c'est circulaire les arrangements suivants sont les même :

      1213 = 3121 = 1312 = 2131
      1234 = 4123 = 3412 = 2341

      En lisant en boucle chacune de ces listes de chiffre, on lit à chaque fois la même suite.
      Avec des lettres ça donnerais :

      aacb = baac = cbaa = acba
      abcd = dabc = cdab = bcda

      J'espère avoir été plus claire ^^
      0
  4. Bonjour,

    J'ai ecrit une petite macro en VBA Excel capable de trouver toutes les combinaisons de 4 chiffres possibles en suivant les règles de non-repetition.

    Sub cmb_4()
    
    Dim tab_cmb(2000) As String, nbr_cmb As Integer, cnt_cmb As Integer
    Dim str_cmb As String, txt_cmb As String, xst_cmb As Boolean
    Dim i1 As Integer, i2 As Integer, i3 As Integer, i4 As Integer
    Dim MAX_CAR As Integer
    
    MAX_CAR = 9 'indiquer le nombre de chiffres (minimum 1, maximum 9)
    
    nbr_cmb = 0
    For i1 = 1 To MAX_CAR
        For i2 = 1 To MAX_CAR
            For i3 = 1 To MAX_CAR
                For i4 = 1 To MAX_CAR
                    txt_cmb = Trim(Str(i1)) + Trim(Str(i2)) + Trim(Str(i3)) + Trim(Str(i4))
                    xst_cmb = False
                    For cnt_cmb = 1 To nbr_cmb
                        str_cmb = tab_cmb(cnt_cmb) + tab_cmb(cnt_cmb)
                        If InStr(str_cmb, txt_cmb) > 0 Then
                            xst_cmb = True
                            Exit For
                        End If
                    Next cnt_cmb
                    If Not xst_cmb Then
                        nbr_cmb = nbr_cmb + 1
                        tab_cmb(nbr_cmb) = txt_cmb
                    End If
                Next i4
            Next i3
        Next i2
    Next i1
    MsgBox ("Nombre de combinaisons : " & nbr_cmb)
    If nbr_cmb > 0 Then
    For cnt_cmb = 1 To nbr_cmb
        Range("A" & cnt_cmb).Value = tab_cmb(cnt_cmb)
    Next cnt_cmb
    Range("A" & cnt_cmb).Value = "*FIN*"
    End If
    
    End Sub
    0
    1. bonjour yoda

      dans mon exemple j'avais donné les combinaisons avec répétition
      mais
      si j'ai bien compris, Kamijee veut des arrangements avec répétition, mais en en ne gardant qu'un exemplaire de ceux qui sont invariants par permutation circulaire.
      exemple pour m = 3 et p = 4, avec 1 , 1, 2 , 3 ça donnerait
      1123 et on ne garde pas 3112, 2311, 1231
      1213 et on ne garde pas 3121, 1312, 2131
      etc ...
      c'est un problème intéressant !
      0