Nombre de colonnes minimum necessaires

@ntoine

XLDnaute Nouveau
Bonjour à tous

Voici mon petit problème.

Un tableau de 28 colonnes sur 28 lignes avec les caractéristiques suivantes:

Chaque colonne est remplie aléatoirement sur X/(TAILLE) lignes de la valeur 1.
(On peu varier ce nombre de valeurs (TAILLE))
Le tableau en sa totalité remplis tel qu'aucune ligne ne soit oublié

Je cherche une méthode pour trouver la combinaison de colonnes minimum nécessaire pour obtenir
un résultat de 28 lignes entièrement couverte de valeurs 1.

Par Exemple:

La premiere colonne contient les valeurs 1 en lignes 1 / 6 / 10 / 13 / 18
J'ai donc 5 valeurs sur les 28 possibles d'une colonne pleine de valeurs 1 , il reste donc 23 lignes non couvertes.

je passe à la seconde colonne qui contient les valeurs 1 au lignes 2 / 6 / 15 / 20 / 28
1 seule ligne commune avec la colonne 1 soit la ligne 6, cela rajoute 4 nouvelles lignes de valeur 1 , il reste 19 lignes non couvertes
pour atteindre 28 .
La colonne 2 n'étant pas obligatoirement celle ayant le moins de lignes communes avec la premiere colonne, on controle la colonne suivante .

Avec un remplissage de 5 valeur par colonne et 28 lignes par colonnes, cela donnerait en théorie
28/5 soit une combinaison de 6 colonnes "nécessaires au minimum" pour obtenir un résultat de 28 lignes de valeur 1 couvertes.

Vous remerciant pour toute astuce.
 

Pièces jointes

  • Nombre Colonnes Minimum_.xls
    166.5 KB · Affichages: 79
Dernière édition:

Tibo

XLDnaute Barbatruc
Re : Nombre de colonnes minimum necessaires

Bonjour @ntoine et bienvenue sur XLD,

Tu nous indiques :

...Je cherche une méthode pour trouver le nombre de colonnes minimum nécessaire pour obtenir
une colonne de 28 lignes entièrement couverte...

Qu'appelle-tu une colonne de 28 lignes entièrement couverte ?

Couverte de quoi ? de 1 ? ou d'autre chose ?

A te (re)lire avec suffisamment de précisions.

@+
 

mapomme

XLDnaute Barbatruc
Supporter XLD
Re : Nombre de colonnes minimum necessaires

Bonsoir à tous,

En examinant rapidement le PB (et si j'ai bien compris), je pense qu'il est probable que seul Taille = 28 assure un résultat de 28 pour la cellule B33.

Pour illustrer, j'ai commis un fichier avec deux macros.

1) macro: Sub chercheOK28()
Cette macro pour une taille donnée recherche au bout de combien de calcul on obtient un résultat de 28 pour la cellule B33.
(intéressant pour des petite valeurs de Taille)

2) macro: Sub chercheKO28()
Cette macro pour une taille donnée va tenter de faire 50000 (modifiable) essais. Si un essai donne un résultat différent de 28 pour la cellule B33, cela signifie que Taille n'assure pas un remplissage complet à coup sûr.
(intéressant pour des grandes valeurs de Taille, ex: 7,8,9) -> pour 9 et 10, on trouve encore des résultats différents de 28. Pour 11 aussi, mais c'est de plus en plus rare.

Attention ! les macros peuvent éventuellement laisser le mode 'Calcul manuel' activé. A la fermeture du classeur, le mode automatique devrait être rétabli.

le code dans le module de Feuil1:
VB:
 Sub chercheOK28()
Dim i As Long, N As Long, Cpt As Long
Application.ScreenUpdating = False

N = -1
[a33] = 0
N = Application.InputBox("Borne haute de la boucle ?", Type:=2, Default:=10000)
If N <= 0 Then Exit Sub
Application.Calculation = xlCalculationManual
For i = 1 To N
  If i Mod 1000 = 0 Then
    Application.ScreenUpdating = True
    [a33] = i
    Application.ScreenUpdating = False
  End If
  Application.Calculate
  If [b33] = 28 Then Exit For
Next i
If [b33] = 28 Then
  MsgBox "28 atteint au " & Format(i, "# ##0") & " eme essai"
  [a33] = i
Else
  MsgBox "28 pas atteint"
  [a33] = "*****"
End If
End Sub

Sub chercheKO28()
Dim i As Long, N As Long, Cpt As Long
Application.ScreenUpdating = False

N = -1
[a33] = 0
N = Application.InputBox("Borne haute de la boucle ?", Type:=2, Default:=50000)
If N <= 0 Then Exit Sub
Application.Calculation = xlCalculationManual
For i = 1 To N
  If i Mod 1000 = 0 Then
    Application.ScreenUpdating = True
    [a33] = i
    Application.ScreenUpdating = False
  End If
  Application.Calculate
  If [b33] <> 28 Then
    MsgBox "Pas de concordance au premier calcul à la " & Format(i, "# ##0") & " eme tentative"
    [a33] = i
    Exit For
  End If
Next i
If [b33] = 28 Then
  MsgBox "Toutes les concordances ont eu lieu au 1er essai sur " & _
    N & " tentatives"
End If
End Sub
 

Pièces jointes

  • Nombre Colonnes Minimum v1.xls
    194.5 KB · Affichages: 44
Dernière édition:

Discussions similaires

Réponses
6
Affichages
190
Réponses
22
Affichages
944

Statistiques des forums

Discussions
312 845
Messages
2 092 764
Membres
105 529
dernier inscrit
StarExcel