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

Statistiques, Data Mining et Data Science Discussion :

Mathématique Optimisation algorithme


Sujet :

Statistiques, Data Mining et Data Science

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre habitué
    Homme Profil pro
    indicateurs économique
    Inscrit en
    Septembre 2016
    Messages
    11
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Maroc

    Informations professionnelles :
    Activité : indicateurs économique
    Secteur : Conseil

    Informations forums :
    Inscription : Septembre 2016
    Messages : 11
    Par défaut Mathématique Optimisation algorithme
    Bonjour

    Je cherche à résoudre le problème suivant :

    Objectif :

    Générer une matrice M de dimensions 29×8 où :
    Chaque ligne de la matrice est un sous-ensemble de 8 entiers distincts choisis parmi les entiers de 1 à 29.
    Chaque paire de lignes de la matrice doit partager exactement deux éléments en commun.

    Contraintes :

    Chaque ligne doit contenir 8 valeurs distinctes.
    Chaque paire de lignes doit avoir exactement deux éléments en commun.
    La solution doit utiliser uniquement les valeurs de 1 à 29.

    Sortie attendue :

    Une matrice 29×8 respectant les contraintes ou un message indiquant qu'aucune solution n'existe.

    Ce que je demande :
    Je souhaite obtenir :

    - Un code Python ou dans tout autre langage qui peut générer une solution rapidement.
    - Si vous connaissez une solution algorithmique ou théorique à ce problème, je serais heureux que vous la partagiez.

    Pour info j'ai trouvé la solution pour une matrice de dimensions 16×6 mais le code il se bloque au niveau de 29*8


    Voici le code python qui génère une matrice de dimensions 16×6 avec les contraintes suivantes :

    1-Chaque ligne contient 6 valeurs distinctes.
    2-Chaque paire de lignes partage exactement 2 éléments.
    3-Les valeurs utilisées sont comprises entre 1 et 16.

    Cependant, lorsqu'on essaie d'étendre ce code pour générer une matrice de 29×8 en utilisant les valeurs de 1 à 29, le code n'arrive pas à trouver une solution valide.
    --------------
    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
    import random
    import pandas as pd
     
    # Définition des paramètres
    C = list(range(1, 17))
    NUM_ROWS = 16
    NUM_COLS = 6
     
    # Initialisation de la matrice vide
    matrix = []
     
    # Fonction pour vérifier les contraintes de chevauchement
    def has_valid_overlap(new_row, matrix):
        for row in matrix:
            # Calculer le nombre d'éléments communs avec chaque ligne existante
            common_elements = set(new_row) & set(row)
            # Vérifie qu'il y a exactement 2 éléments en commun
            if len(common_elements) != 2:
                return False
        return True
     
    # Génération de la matrice ligne par ligne
    while len(matrix) < NUM_ROWS:
        # Générer une ligne aléatoire avec 6 valeurs uniques de C
        new_row = random.sample(C, NUM_COLS)
        # Vérifier les contraintes de chevauchement avec les lignes existantes
        if has_valid_overlap(new_row, matrix):
            matrix.append(new_row)
     
    # Conversion de la matrice en DataFrame
    df = pd.DataFrame(matrix, columns=[f'Col_{i+1}' for i in range(NUM_COLS)])
     
    # Afficher la matrice sous forme de DataFrame
    df


    Merci

  2. #2
    Rédacteur/Modérateur

    Homme Profil pro
    Ingénieur qualité méthodes
    Inscrit en
    Décembre 2013
    Messages
    4 216
    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 216
    Par défaut
    Si je ne m'abuse, tu procèdes ainsi :
    J'ai ajouté les instructions Print(new_row) et print(len(matrix) juste après l'instruction matrix.append(new_row) pour voir ce qui ce passe.
    Je prends une première ligne, au hasard ; par exemple 1,2,3,4,5,6,7,8 (je prends cet exemple un peu particulier, ce sera plus facile à suivre)
    Puis tu cherches une 2ème ligne, tu fais autant d'essais que nécessaire, jusqu'à trouver une ligne qui convient. Admettons que la premère ligne sur laquelle tu tombes soit 7,8,9,10,11,12,13,14
    Puis tu cherches une 3ème ligne, tu fais autant d'essais que nécessaire, jusqu'à trouver une ligne qui convient. Admettons que la premère ligne sur laquelle tu tombes soit 7,8,13,14,15,16,17,18
    Puis tu cherches une 4ème ligne, tu fais autant d'essais que nécessaire, jusqu'à trouver une ligne qui convient. Admettons que la premère ligne sur laquelle tu tombes soit 1,2,9,10,15,16,19,20
    Puis tu cherches une 5ème ligne, tu fais autant d'essais que nécessaire, jusqu'à trouver une ligne qui convient. Admettons que la premère ligne sur laquelle tu tombes soit 1,2,11,12,17,18,21,22
    etc
    A un moment, tu peux avoir fait des mauvais choix (tu n'y es pour rien, tu utilises la fonction random) , et tu peux te retrouver dans une impasse ; peut-être que les 20 premières lignes trouvées font qu'il n'y a plus de solution pour une 21 ème ligne. Et tu n'as aucun processus de retour en arrière, tu n'as rien pour dire : la ligne n°20 crée un blocage, cherchons-en une autre pour voir si ça va mieux. Ton programme cherche une 21ème ligne, longtemps, indéfiniment même parce que peut-être qu'il n'y a plus aucune solution.
    Et si il finit par tomber juste, il va falloir être méga chanceux avant de trouver une 22ème ligne, parce que les contraintes seront encore plus fortes.
    Sur les essais que j'ai faits, il trouve les 10 premières lignes quasi instantanément.... puis ça galère , plusieurs minutes que j'attends, et je n'ai toujours rien pour la 15ème ligne, et on est encore très loin de 29.

    Dans toutes ces questions de combinatoire, il faut un processus de retour en arrière, et il faut éviter la fonction random()
    Ou, à défaut de processus de retour en arrière, à chaque étape, il faut recenser toutes les lignes compatibles, mais en enlevant celles qui font visiblement doublon.

    Pour la première ligne, je prends (1,2,3,4,5,6,7,8) ;
    Pour la deuxième ligne, je prends (1,2,9,10,11,12,13,14) ; Toutes les autres hypothèses font doublon.
    Pour la 3ème, j'ai quelques choix, mais très peu : (1,2,15,16,17,18,19,20) ou bien (1,3,9,15,16,17,18,19) ou bien (3,4,9,10,15,16,17,18). C'est tout (sauf oubli ???)
    etc.

    Si on ne veut pas de cette solution 'sur mesure', puisque la première ligne est imposée, on peut appliquer ce processus. Et à la fin, on applique une permutation : 1-->x 2-->b, 3-->t ... chaque n° correspond à un élément, mais pas forcément avec la numérotation 'logique'.

  3. #3
    Rédacteur/Modérateur

    Homme Profil pro
    Ingénieur qualité méthodes
    Inscrit en
    Décembre 2013
    Messages
    4 216
    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 216
    Par défaut
    Le challenge m'a amusé.
    J'ai fait une recherche exhaustive (ça tourne, c'est long), mais c'est à peu près certain qu'il n'y a pas de solution avec 29 lignes.
    Pour l'instant, le meilleur résultat trouvé contient 17 lignes, et sur cette base de 17 lignes, aucune ligne n'est compatible, pas de possibilité de monter à 18.
    Comme je disais dans le précédent message, peut-être que j'ai mal choisi ces 17 lignes ... mais déjà, je suis presque surpris d'arriver à 17 lignes. A partir de 13 ou 14 lignes, j'ai très souvent des blocages.
    On peut regarder ça en terme probabiliste.
    Choisir 8 nombres parmi 29, il y a 4292145 possibilités.
    Quand j'ai choisi une ligne de 8 nombres, combien de choix sont valides pour une 2ème ligne ? Il reste 1519392 lignes, à peu près 3 fois moins.
    Quand j'ai choisi cette 2ème ligne, combien de choix sont valides pour une 3ème ligne ? il reste 420238 lignes , à peu près 3.6 fois moins.
    Si on se base là dessus, si on dit qu'à chaque ligne, l'univers des lignes compatibles est divisé par 3, on retombe sur le même résultat, on arrive à un blocage vers la 14ème ligne.

    La solution avec 17 lignes (les éléments sont numérotés de 11 à 39, et pas de 1 à 29...) :
    11:12:13:14:15:16:17:18:
    11:12:19:20:21:22:23:24:
    11:13:19:25:26:27:28:29:
    12:14:19:25:30:31:32:33:
    13:15:20:21:25:30:34:35:
    14:15:22:23:26:27:30:36:
    16:17:20:22:25:28:31:36:
    12:13:22:29:32:34:36:37:
    11:15:23:28:31:33:34:37:
    11:18:20:26:32:33:35:36:
    12:15:20:27:28:32:38:39:
    12:16:24:26:28:30:35:37:
    13:14:21:24:28:33:36:38:
    14:17:19:20:26:34:37:38:
    15:17:21:24:26:29:31:32:
    15:16:19:22:29:33:35:38:
    15:18:19:24:25:36:37:39:

  4. #4
    Rédacteur/Modérateur

    Homme Profil pro
    Ingénieur qualité méthodes
    Inscrit en
    Décembre 2013
    Messages
    4 216
    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 216
    Par défaut
    J'ai fait quelques changements dans le programme, pour optimiser.
    En quelques minutes, il trouve une solution pour 16 lignes ; puis au bout de plus d'une heure, il trouve une solution pour 17 lignes et juste après, 18 lignes, ... et depuis quelques heures... il cherche et cherche, mais pas mieux que 18 lignes.

    La solution trouvée pour 18 lignes :
    11:12:13:14:15:16:17:18:
    11:12:19:20:21:22:23:24:
    11:12:25:26:27:28:29:30:
    11:13:19:25:31:32:33:34:
    11:14:20:26:31:35:36:37:
    11:15:21:27:32:35:38:39:
    12:13:22:28:31:36:38:39:
    12:16:20:29:33:34:35:38:
    12:17:23:27:32:33:36:37:
    13:14:21:23:28:30:33:35:
    13:15:20:23:25:29:37:39:
    13:16:21:22:26:27:34:37:
    13:17:20:24:26:30:32:38:
    13:18:19:24:27:29:35:36:
    14:16:23:24:25:27:31:38:
    14:17:19:20:27:28:34:39:
    15:18:20:22:27:30:31:33:
    16:18:20:21:25:28:32:36:

  5. #5
    Membre habitué
    Homme Profil pro
    indicateurs économique
    Inscrit en
    Septembre 2016
    Messages
    11
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Maroc

    Informations professionnelles :
    Activité : indicateurs économique
    Secteur : Conseil

    Informations forums :
    Inscription : Septembre 2016
    Messages : 11
    Par défaut
    Vous m'avez vraiment surpris, car je n'arrive pas à dépasser 13 lignes dans ce contexte. Cependant, je peux ajouter quelques observations intéressantes :

    Si la matrice est correctement construite, chaque valeur apparaît exactement 8 fois dans l'ensemble des lignes.
    De plus, chaque paire de valeurs présentes dans une ligne apparaît exactement deux fois dans l'ensemble des lignes.

    aussi
    La matrice se présente sous la forme

    1 2 3 4 5 6 7 8
    1 2
    1 3
    ⋅⋅⋅
    ⋅⋅⋅
    6 7
    6 8
    7 8

    Ces propriétés montrent une structure particulièrement bien équilibrée et peuvent être très utiles pour valider ou optimiser le programme.

  6. #6
    Rédacteur/Modérateur

    Homme Profil pro
    Ingénieur qualité méthodes
    Inscrit en
    Décembre 2013
    Messages
    4 216
    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 216
    Par défaut
    Vous m'avez vraiment surpris, car je n'arrive pas à dépasser 13 lignes dans ce contexte.
    Oui, et je t'ai expliqué pourquoi tu n'arrives pas à dépasser 13.

    Si la matrice est correctement construite, chaque valeur apparaît exactement 8 fois dans l'ensemble des lignes.
    Affirmation un peu rapide, basée sur quoi ?

  7. #7
    Membre habitué
    Homme Profil pro
    indicateurs économique
    Inscrit en
    Septembre 2016
    Messages
    11
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Maroc

    Informations professionnelles :
    Activité : indicateurs économique
    Secteur : Conseil

    Informations forums :
    Inscription : Septembre 2016
    Messages : 11
    Par défaut
    Citation Envoyé par tbc92 Voir le message
    J'ai fait quelques changements dans le programme, pour optimiser.
    En quelques minutes, il trouve une solution pour 16 lignes ; puis au bout de plus d'une heure, il trouve une solution pour 17 lignes et juste après, 18 lignes, ... et depuis quelques heures... il cherche et cherche, mais pas mieux que 18 lignes.
    Comment ton script détermine-t-il qu'il n'est pas possible de faire mieux que 18 lignes ? ?
    On ne peut pas exclure qu'il n'y ai pas de solutions tant que ton programme n'a pas exploré tous les cas possibles. .

    Citation Envoyé par tbc92 Voir le message
    Si avec ces 'optimisations', le programme va vite, et arrive à la conclusion : au mieux, on arrive à 18 lignes, que peut-on en conclure ?
    Rien.
    Même avec ces modifications, ton programme aboutit toujours à 18 lignes ?

    En examinant la solution à 18 lignes que tu as trouvée, on remarque qu'à la 3ᵉ ligne, il y a une incohérence : le couple (11:12) apparaît plus de deux fois (voir la 1ʳᵉ et la 2ᵉ ligne). Avec les observations que j'ai mentionnées,(- chaque paire de valeurs présentes dans une ligne apparaît exactement deux fois dans l’ensemble des lignes.) il semble que le programme ne puisse pas gérer correctement ces lignes. Par conséquent, il est possible qu’il puisse trouver une meilleure solution.

    11:12:13:14:15:16:17:18:
    11:12:19:20:21:22:23:24:
    11:12:25:26:27:28:29:30:
    11:13:19:25:31:32:33:34:
    11:14:20:26:31:35:36:37:
    11:15:21:27:32:35:38:39:
    12:13:22:28:31:36:38:39:
    12:16:20:29:33:34:35:38:
    12:17:23:27:32:33:36:37:
    13:14:21:23:28:30:33:35:
    13:15:20:23:25:29:37:39:
    13:16:21:22:26:27:34:37:
    13:17:20:24:26:30:32:38:
    13:18:19:24:27:29:35:36:
    14:16:23:24:25:27:31:38:
    14:17:19:20:27:28:34:39:
    15:18:20:22:27:30:31:33:
    16:18:20:21:25:28:32:36:

    Cordialement,

  8. #8
    Rédacteur/Modérateur

    Homme Profil pro
    Ingénieur qualité méthodes
    Inscrit en
    Décembre 2013
    Messages
    4 216
    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 216
    Par défaut
    Ce n'est pas une erreur.
    Je recopie ce que tu disais hier soir :

    la demande est tjr la même :

    Générer une matrice M de dimensions 29×8 où :
    - Chaque ligne de la matrice représente un sous-ensemble de 8 entiers distincts, choisis parmi les entiers de 1 à 29.
    - Chaque paire de lignes doit avoir exactement deux éléments en commun.
    La contrainte 'une paire ne peut apparaître que 2 fois', c'est une contrainte que tu ajoutes, ou que tu enlèves, selon les jours.

    Mon programme n'arrive pas toujours à 18 lignes. Très souvent, il arrive à des blocages après 14, 15 ou 16 lignes. Parfois, on arrive à 18 lignes. Je n'ai pas demandé au programme de générer un nouveau fichier à chaque fois qu'il arrive à 18 lignes, mais je sais que c'est arrivé plusieurs fois.
    Mais aucun essai n'a permis de dépasser 18.

  9. #9
    Membre habitué
    Homme Profil pro
    Administrateur systèmes et réseaux
    Inscrit en
    Décembre 2024
    Messages
    13
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Ain (Rhône Alpes)

    Informations professionnelles :
    Activité : Administrateur systèmes et réseaux

    Informations forums :
    Inscription : Décembre 2024
    Messages : 13
    Par défaut
    Citation Envoyé par IME14 Voir le message
    Bonjour

    Je cherche à résoudre le problème suivant :

    Objectif :

    Générer une matrice M de dimensions 29×8 où :
    Chaque ligne de la matrice est un sous-ensemble de 8 entiers distincts choisis parmi les entiers de 1 à 29.
    Chaque paire de lignes de la matrice doit partager exactement deux éléments en commun.

    Contraintes :

    Chaque ligne doit contenir 8 valeurs distinctes.
    Chaque paire de lignes doit avoir exactement deux éléments en commun.
    La solution doit utiliser uniquement les valeurs de 1 à 29.

    Sortie attendue :

    Une matrice 29×8 respectant les contraintes ou un message indiquant qu'aucune solution n'existe.

    Ce que je demande :
    Je souhaite obtenir :

    - Un code Python ou dans tout autre langage qui peut générer une solution rapidement.
    - Si vous connaissez une solution algorithmique ou théorique à ce problème, je serais heureux que vous la partagiez.

    Pour info j'ai trouvé la solution pour une matrice de dimensions 16×6 mais le code il se bloque au niveau de 29*8


    Voici le code python qui génère une matrice de dimensions 16×6 avec les contraintes suivantes :

    1-Chaque ligne contient 6 valeurs distinctes.
    2-Chaque paire de lignes partage exactement 2 éléments.
    3-Les valeurs utilisées sont comprises entre 1 et 16.

    Cependant, lorsqu'on essaie d'étendre ce code pour générer une matrice de 29×8 en utilisant les valeurs de 1 à 29, le code n'arrive pas à trouver une solution valide.
    --------------
    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
    import random
    import pandas as pd
     
    # Définition des paramètres
    C = list(range(1, 17))
    NUM_ROWS = 16
    NUM_COLS = 6
     
    # Initialisation de la matrice vide
    matrix = []
     
    # Fonction pour vérifier les contraintes de chevauchement
    def has_valid_overlap(new_row, matrix):
        for row in matrix:
            # Calculer le nombre d'éléments communs avec chaque ligne existante
            common_elements = set(new_row) & set(row)
            # Vérifie qu'il y a exactement 2 éléments en commun
            if len(common_elements) != 2:
                return False
        return True
     
    # Génération de la matrice ligne par ligne
    while len(matrix) < NUM_ROWS:
        # Générer une ligne aléatoire avec 6 valeurs uniques de C
        new_row = random.sample(C, NUM_COLS)
        # Vérifier les contraintes de chevauchement avec les lignes existantes
        if has_valid_overlap(new_row, matrix):
            matrix.append(new_row)
     
    # Conversion de la matrice en DataFrame
    df = pd.DataFrame(matrix, columns=[f'Col_{i+1}' for i in range(NUM_COLS)])
     
    # Afficher la matrice sous forme de DataFrame
    df


    Merci

    Bonjour. L'énoncé semble être un exercice banal sur la modularité. Je te conseilles de ne pas t'égarer dans la génération pseudo-aléatoire des 29 lignes. La génération pourra te donner 1 million de fois la même combinaison, sans jamais te donner une combinaison cible sur des milliards de cas.. Ça n'a aucun intérêt, si ce n'est ajouter de la complexité à l'algorithme.
    Revois l'énoncé et les éléments qui conditionnent la résolution. La solution sera plus simple si tu pars de 1 à 29, pour générer des intervalles linéaires de 1 à 8, qu'il suffit d'ajuster à la volée.
    Mentalement on trouve que sur la suite 1 a 29, 8*4 -29 = 3.
    On trouve 3 valeurs à compléter à la 4e ligne. Ce qui n'est pas une difficulté. Ce qui semble l'être en apparence est la condition sur chaque paire prise dans la matrice, on doit trouver deux éléments en commun.
    Mais ça ne l'est pas aussi, en vérité. On a que 8 valeurs par ligne sur lesquelles 2 et seulement deux seront en collision avec la ligne suivante ou la ligne précédente. Donc il restera 6 valeurs à échapper avec un nombre régulateur qui n'est autre que 6.
    Chaque élément modulo 29 + 1, bien sûr.
    Après si tu veux mélanger pour le plaisir les éléments d'une ligne, tu pourras le faire. Mais la matrice doit être conçu sur une démarche linéaire.
    Voilà l'indication que j'ai voulu donner sur ce que j'ai compris.

  10. #10
    Membre habitué
    Homme Profil pro
    Administrateur systèmes et réseaux
    Inscrit en
    Décembre 2024
    Messages
    13
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Ain (Rhône Alpes)

    Informations professionnelles :
    Activité : Administrateur systèmes et réseaux

    Informations forums :
    Inscription : Décembre 2024
    Messages : 13
    Par défaut
    Voici un exemple surlequel s'inspirer:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    t29x8 = [[(j * 8 + i) % 29 + 1 for i in range(1,9)] for j in range(29)]
    for i, t in enumerate(t29x8):
       t29x8[i] = t[:2] + [(6 + t[j]) % 29 + 1 for j in range(6)],
    Sur le même ordre de concept, le code suivant est plus pédagogique.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    t29x8 = []
    k = 1
    for i in range(29):
       t8 = [k, k + 1] + [j % 29 + 1 for j in range(k + 7, k + 13)],
        k = (k + 8) % 29
        t29x8+= t8,
        print(k//8, t8)

    On peut constater qu'une paire de lignes contigues prise au hasard dans la liste satisfait les éxigeances. Et on a la 1ere et la derniere qui satisfont dans le cas d'un parcours repetifif x fois 29, on peut attaquer sur n'importe quelle ligne.

  11. #11
    Membre Expert

    Homme Profil pro
    Directeur de projet
    Inscrit en
    Mai 2013
    Messages
    1 632
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Yvelines (Île de France)

    Informations professionnelles :
    Activité : Directeur de projet
    Secteur : Service public

    Informations forums :
    Inscription : Mai 2013
    Messages : 1 632
    Par défaut
    Bonjour invtrd,

    Citation Envoyé par invtrd Voir le message
    ...On peut constater qu'une paire de lignes contigües prises au hasard dans la liste satisfait les exigences. Et on a la 1ere et la dernière qui satisfont dans le cas d'un parcours repetifif x fois 29, on peut attaquer sur n'importe quelle ligne.
    Sauf erreur, la contrainte ne s'applique pas seulement aux lignes contigües mais à toute paire de lignes, ce qui est sensiblement plus difficile.

    Salut

  12. #12
    Membre habitué
    Homme Profil pro
    Administrateur systèmes et réseaux
    Inscrit en
    Décembre 2024
    Messages
    13
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Ain (Rhône Alpes)

    Informations professionnelles :
    Activité : Administrateur systèmes et réseaux

    Informations forums :
    Inscription : Décembre 2024
    Messages : 13
    Par défaut
    Citation Envoyé par Guesset Voir le message
    Bonjour invtrd,



    Sauf erreur, la contrainte ne s'applique pas seulement aux lignes contigües mais à toute paire de lignes, ce qui est sensiblement plus difficile.

    Salut
    Autant pour moi si c'est le cas. Ce que je propose est alors côté de la plaque.
    .
    Mais dans le même ordre d'idée en y reflechissant un peu plus (je lisais pensivement une liste donnée au post #4 qui n'a pas l'air d'aller sur cette indication). Mais je trouves aussi en y pensant que je suis passé également à côté de la simplicité de la solution si paire de lignes contigues. Sinon, je vois mentalement 20 lignes qui satisferont sur toute paire de lignes choisies aléatoirement qui partageront le même couple.

    Je m'explique: si au hasard les valeurs (1,2) doiventt être communes à toutes les lignes, dans une boucle où i débute à 2, on génère une séquence de 6 nombres contrôlés avec j = i + 6, et k = i, on incrémente k de 1 tant qu'inférieur à j pour concatener ces valeurs au couple (1,2) , ensuite on incrémente i de 1 tant que i inferieur a 23. Voilà une piste. Au bout de ce traitement, il restera je crois 8 lignes à compléter dans la même logique linéaire en recommençant avec i = 3, on relance le même traitement. Il est possible de continuer ainsi, i = 4, ... pour trouver toutes les possibillités restantes sur le couple (1,2).

    Je penses que c'est une approche sans détour, pour résoudre la demande.
    Salut.

  13. #13
    Rédacteur/Modérateur

    Homme Profil pro
    Ingénieur qualité méthodes
    Inscrit en
    Décembre 2013
    Messages
    4 216
    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 216
    Par défaut
    La demande tient en ces 3 lignes :
    Générer une matrice M de dimensions 29×8 où :
    - Chaque ligne de la matrice représente un sous-ensemble de 8 entiers distincts, choisis parmi les entiers de 1 à 29.
    - Chaque paire de lignes doit avoir exactement deux éléments en commun.
    Et je pense que c'est sans ambiguité.
    Il y a eu des suggestions, qui amènent des contraintes supplémentaires.
    Mais, sans même ajouter de contraintes supplémentaires, c'est à peu près clair qu'il n'y a pas de solution.

    La proposition du message 4 correspond avec ces contraintes... sauf qu'il n'y a que 18 lignes et on en voudrait 29. On est loin du compte.
    A partir de cette position, on peut faire des recherches à la main, et on voit qu'on est bloqué.
    Par exemple, si on cherche une ligne qui commencerait par 12:16, on a déjà 12 et 16 en ligne 1, donc ça nous interdit les nombres 11:13:14;15;17;18 ; 12 et 16 sont aussi tous les 2 en ligne 8, ça nous interdit d'autres nombres...
    Tentons d'ajouter le nombre 19 ; 12 et 19 sont tous les 2 sur la 2ème ligne, ça nous interdit différents nombres, on bloque très vite.
    Si au lieu de 19, on essaie de compléter avec 20, pareil, on a un blocage.
    etc etc. Tester tous les cas à la main est très long, mais déjà, ne serait-ce que trouver un ensemble de 6 nombres, qui aurait au max 2 nombres en commun avec chacune des 18 lignes, on galère.
    En trouver 7, on galère encore plus,
    En trouver 8, qui ont au max 2 nombres en commun avec chacune des lignes, c'est encore plus dur.
    Et ce qu'on cherche, c'est encore plus dur :
    Trouver une ligne de 8 nombres, qui aurait exactement 2 nombres en commun avec chacune des lignes, on ne trouve pas.

Discussions similaires

  1. Optimiser algorithme C++
    Par CliffeCSTL dans le forum Débuter
    Réponses: 8
    Dernier message: 24/04/2014, 12h42
  2. Optimiser algorithme de kernel smoothing
    Par vampirella dans le forum MATLAB
    Réponses: 8
    Dernier message: 12/07/2010, 11h25
  3. Optimisation Algorithme ?
    Par Deva74 dans le forum Algorithmes et structures de données
    Réponses: 1
    Dernier message: 13/03/2010, 08h51
  4. [Optimisation] Algorithme de réduction
    Par tromaltsec dans le forum Algorithmes et structures de données
    Réponses: 8
    Dernier message: 06/08/2009, 14h26
  5. Optimisation algorithme de programmation
    Par mp_moreau dans le forum Algorithmes et structures de données
    Réponses: 2
    Dernier message: 29/07/2007, 19h24

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