Partage
  • Partager sur Facebook
  • Partager sur Twitter

Vecteurs stables par permutation cyclique

Compléter un code donné en python

    21 janvier 2023 à 8:54:18

    Bonjour. J'ai un exercice qui consiste à compléter un code dont l'appel stable(0) doit retourner l'ensemble des vecteurs de {0,1}^5 stables par permutation cyclique sous forme de tableau en ligne.

    NB: les vecteurs doivent avoir au plus 2 cordonnées égales à 1 et chaque 1 doit être entre 2 zéro.

    Voici le code :

    n=5  
    X=[0 for i in range(n)] 
    G=??(1)??  
    m=len (G)  
    def stable (i):  
     for i in range(2):  
      X[i]=j
      if i==n-1: 
       t=1
       for e in range (m):
        if ?(2)?:
         t=0
       if t==1:  
        print (X)
       else:  
        ?(3)?  
    Les parties du code à compléter sont les 3 de la forme ?(k)?
    Après réflexion, je me suis dit que stable doit forcément faire intervenir la récursivité afin de générer d'abord tous les vecteurs de {0,1}^5 avant de voir s'il sont stable par permutation cyclique
    C'est ainsi que j'ai proposé pour ?(3)? : stable(i+1)
    Ensuite après avoir généré, i=n-1 et on entre dans la condition pour voir si l'élément engendré est stable. Mais je bloque sur comment il faut définir G = ??(1)?? et la condition ?(2)?.
    Après analyse, je me suis rendu compte que le seul vecteur stable vérifiant les conditions de départ est (0,0,0,0,0)
    J'aurais bien besoin d'aide svp.
    • Partager sur Facebook
    • Partager sur Twitter
      21 janvier 2023 à 9:55:13

      Bonjour,

      Le message qui suit est une réponse automatique activée par un membre de l'équipe de modération. Les réponses automatiques leur permettent d'éviter d'avoir à répéter de nombreuses fois la même chose, ce qui leur fait gagner du temps et leur permet de s'occuper des sujets qui méritent plus d'attention.
      Nous sommes néanmoins ouverts et si vous avez une question ou une remarque, n'hésitez pas à contacter la personne en question par Message Privé.

      Pour plus d'informations, nous vous invitons à lire les règles générales du forum

      Merci de colorer votre code à l'aide du bouton Code

      Les forums d'Openclassrooms disposent d'une fonctionnalité permettant de colorer et mettre en forme les codes source afin de les rendre plus lisibles et faciles à manipuler par les intervenants. Pour cela, il faut utiliser le bouton Code de l'éditeur, choisir un des langages proposés et coller votre code dans la zone prévue. Si vous utilisez l'éditeur de messages en mode Markdown, il faut utiliser les balises <pre class="brush: python;">Votre code ici</pre>.

      Merci de modifier votre message d'origine en fonction.

      Liens conseillés

      • Partager sur Facebook
      • Partager sur Twitter
        22 janvier 2023 à 0:11:09

        n ce qui concerne G = ??(1)??, il s'agit probablement d'une liste qui contiendra toutes les permutations cycliques possibles sur les vecteurs de {0,1}^5. Pour cela, vous pouvez utiliser la fonction permutations de la bibliothèque itertools.

        En ce qui concerne la condition ?(2)?, il s'agit probablement de la vérification de la stabilité du vecteur généré par rapport à la liste des permutations cycliques de G. Pour cela, vous pouvez itérer sur G et vérifier pour chaque élément si le vecteur généré est égal à l'élément après une permutation cyclique.

        Donc, pour ?(1)?, vous pouvez utiliser:

        from itertools import permutations G = list(permutations(range(n), n))

        Pour ?(2)?, vous pouvez utiliser une boucle for pour parcourir G et utiliser la fonction zip pour vérifier si chaque élément de G est égal au vecteur généré après une permutation cyclique.

        for perm in G: if list(zip(X, perm)) == [(X[i], perm[i-1]) for i in range(n)]: t = 0 break

        Enfin, pour ?(3)?, vous pouvez utiliser la récursion:

        stable(i+1)

        Avec ces modifications, votre fonction stable devrait générer tous les vecteurs de {0,1}.

        Voici un exemple de code qui complète les parties manquantes de votre code :

        n=5  
        X=[0 for i in range(n)] 
        G=[[i for i in range(n)] for j in range(n)]  
        m=len(G)  
        def stable (i):  
            for j in range(2):  
                X[i]=j
                if i==n-1: 
                    t=1
                    for e in range (m):
                        if X[G[e][0]]==X[G[e][1]]==X[G[e][2]]==1:
                            t=0
                    if t==1:  
                        print (X)
                    else:  
                        stable(i+1)
        
        stable(0)
        

        Dans cette solution, G est défini comme une liste de listes qui contiennent les indices des positions qui sont vérifiées pour s'assurer qu'il y a au plus 2 coordonnées égales à 1 et que chaque 1 est entre 2 zéro. La fonction stable utilise une boucle for pour parcourir toutes les valeurs possibles de X[i] (0 et 1) et utilise une boucle interne pour vérifier si chaque vecteur généré est stable selon les règles définies. Si c'est le cas, il est imprimé, sinon la fonction est appelée récursivement pour générer les prochains vecteurs.

        La fonction stable génère tous les vecteurs

        • Partager sur Facebook
        • Partager sur Twitter

        Vecteurs stables par permutation cyclique

        × Après avoir cliqué sur "Répondre" vous serez invité à vous connecter pour que votre message soit publié.
        × Attention, ce sujet est très ancien. Le déterrer n'est pas forcément approprié. Nous te conseillons de créer un nouveau sujet pour poser ta question.
        • Editeur
        • Markdown