Existe t-il une formule ?

Discussion générale entre passionnés et amateurs de mathématiques sur des sujets mathématiques variés
MarcusStGraal
Messages: 5
Enregistré le: 30 Mar 2022, 18:37

Existe t-il une formule ?

par MarcusStGraal » 30 Mar 2022, 18:59

Bonjour la communauté ,
Je me passionne pour les combinaisons de nombres par exemple :
1/ 1 -2-3-4-5
2/ 1-2-3-4-6
3/ 1-2-3-4-7
...
n/ ?
...
8568/ 14-15-16-17-18
Ma question est la suivante : existe t-il un moyen par le calcul de trouver la nième combinaison?



Pisigma
Habitué(e)
Messages: 3058
Enregistré le: 22 Déc 2014, 00:38

Re: Existe t-il une formule ?

par Pisigma » 30 Mar 2022, 19:33

Bonjour,

si tu nous donnais encore quelques valeurs

1/ 1 -2-3-4-5
2/ 1-2-3-4-6
3/ 1-2-3-4-7
4/ ?
5/ ?
6/ ?
7/ ?
.
.
.
.
100/?


lyceen95
Membre Complexe
Messages: 2255
Enregistré le: 15 Juin 2019, 00:42

Re: Existe t-il une formule ?

par lyceen95 » 30 Mar 2022, 20:47

Dans l'esprit de l'OP, on a uniquement les nombres entre 1 et 18
Avec ces 18 nombres, on peut constituer 18*17*16*15*14/120=8568 groupes (a,b,c,d,e) avec (a<b<c<d<e),
et la combinaison n°8568 est donc la dernière : 14,15,16,17,18.
A partir d'un nombre n, on peut trouver la combinaison correspondante, sans avoir à lister toutes les combinaisons, mais c'est lourd.

Pas de temps maintenant... peut-être en fin de soirée ?

lyceen95
Membre Complexe
Messages: 2255
Enregistré le: 15 Juin 2019, 00:42

Re: Existe t-il une formule ?

par lyceen95 » 30 Mar 2022, 23:12

Imaginons n=4000 par exemple.

Il y a 17*16*15*14/24=2380 combinaisons qui commencent par un 1, 16*15*14*13/24=1820 combinaisons qui commencent par un 2 etc etc.
si n est inférieur ou égal à 2380, la combinaison commence donc par un 1
si n est entre 2381 et 2380+1820, la combinaison commence donc par un 2
etc etc
Et une seule qui commence par un 14.

Parmi toutes les combinaisons qui commencent par un 2, on peut aisément compter le nombre de combinaisons qui commencent par 2.3, 2.4 etc etc
Et on sait donc déterminer le 2ème nombre de notre combinaison.
Etc etc

GaBuZoMeu
Habitué(e)
Messages: 6019
Enregistré le: 05 Mai 2019, 10:07

Re: Existe t-il une formule ?

par GaBuZoMeu » 31 Mar 2022, 17:53

Bonjour,

Les logiciels de calcul formel font ça. Je prends l'exemple du logiciel libre et gratuit SageMath :

Code: Tout sélectionner
S=Subsets(range(1,19),5)

S.cardinality()
8568

SageMath commence à numéroter à 0. Si on veut commencer à numéroter à 1, il faut prendre ses précautions.

Code: Tout sélectionner
def rang(L) :
    return S.rank(L)+1

rang({1,3,5,7,9})
665

Code: Tout sélectionner
def derang(n) :
    return S.unrank(n-1)

derang(4000)
{2, 9, 10, 12, 15}

MarcusStGraal
Messages: 5
Enregistré le: 30 Mar 2022, 18:37

Re: Existe t-il une formule ?

par MarcusStGraal » 04 Avr 2022, 11:03

Pisigma a écrit:Bonjour,

si tu nous donnais encore quelques valeurs

1/ 1 -2-3-4-5
2/ 1-2-3-4-6
3/ 1-2-3-4-7
4/ ?
5/ ?
6/ ?
7/ ?
.
.
.
.
100/?


Bonjour Pisigma,
Merci pour ta réponse; un moyen simple d'avoir d'autres combinaisons est d'aller sur octave online par exemple (https://octave-online.net/) et de lancer la commande: nchoosek(1:18,5)

MarcusStGraal
Messages: 5
Enregistré le: 30 Mar 2022, 18:37

Re: Existe t-il une formule ?

par MarcusStGraal » 04 Avr 2022, 11:08

lyceen95 a écrit:Imaginons n=4000 par exemple.

Il y a 17*16*15*14/24=2380 combinaisons qui commencent par un 1, 16*15*14*13/24=1820 combinaisons qui commencent par un 2 etc etc.
si n est inférieur ou égal à 2380, la combinaison commence donc par un 1
si n est entre 2381 et 2380+1820, la combinaison commence donc par un 2
etc etc
Et une seule qui commence par un 14.

Parmi toutes les combinaisons qui commencent par un 2, on peut aisément compter le nombre de combinaisons qui commencent par 2.3, 2.4 etc etc
Et on sait donc déterminer le 2ème nombre de notre combinaison.
Etc etc

Merci lyceen95,
Cette approche est très intéressante, c'est la plus proche de ce que je cherche à obtenir; Je vais creuser dans ce sens

MarcusStGraal
Messages: 5
Enregistré le: 30 Mar 2022, 18:37

Re: Existe t-il une formule ?

par MarcusStGraal » 04 Avr 2022, 11:14

GaBuZoMeu a écrit:Bonjour,

Les logiciels de calcul formel font ça. Je prends l'exemple du logiciel libre et gratuit SageMath :

Code: Tout sélectionner
S=Subsets(range(1,19),5)

S.cardinality()
8568

SageMath commence à numéroter à 0. Si on veut commencer à numéroter à 1, il faut prendre ses précautions.

Code: Tout sélectionner
def rang(L) :
    return S.rank(L)+1

rang({1,3,5,7,9})
665

Code: Tout sélectionner
def derang(n) :
    return S.unrank(n-1)

derang(4000)
{2, 9, 10, 12, 15}

Merci GaBuZoMeu,
C'est une solution mais ça ne répond pas à mon problème car en effet, je souhaite pouvoir le résoudre à la main par des calculs simples

GaBuZoMeu
Habitué(e)
Messages: 6019
Enregistré le: 05 Mai 2019, 10:07

Re: Existe t-il une formule ?

par GaBuZoMeu » 05 Avr 2022, 09:36

Il y a des fois où une jolie formule permet de trouver facilement le résultat recherché. Et des fois où ça demande d'utiliser un algorithme plus ou moins coûteux. Lyceen95 en a esquissé un.
Ces algorithmes sont implémentés dans des systèmes de calcul formel. On peut bien sûr tenir absolument à les exécuter à la main ...

MarcusStGraal
Messages: 5
Enregistré le: 30 Mar 2022, 18:37

Re: Existe t-il une formule ?

par MarcusStGraal » 13 Avr 2022, 20:50

GaBuZoMeu a écrit:Il y a des fois où une jolie formule permet de trouver facilement le résultat recherché. Et des fois où ça demande d'utiliser un algorithme plus ou moins coûteux. Lyceen95 en a esquissé un.
Ces algorithmes sont implémentés dans des systèmes de calcul formel. On peut bien sûr tenir absolument à les exécuter à la main ...


L' intérêt d'obtenir une formule ou un algorithme apparaît évident sur un très grand nombre de donnés par exemple des combinaisons de 5 numéros parmi 500; je ne pense pas qu'il n'y ait beaucoup de systèmes capables de donner la nième combinaison rapidement

GaBuZoMeu
Habitué(e)
Messages: 6019
Enregistré le: 05 Mai 2019, 10:07

Re: Existe t-il une formule ?

par GaBuZoMeu » 13 Avr 2022, 21:44

Code: Tout sélectionner
S=Subsets(range(1,501),5)
S.cardinality()
255244687600

Code: Tout sélectionner
def derang(n) :
    return S.unrank(n-1)

%time derang(10**11)
CPU times: user 2.73 ms, sys: 682 µs, total: 3.42 ms
Wall time: 3.43 ms

{65, 228, 48, 435, 221}

Est-ce assez rapide ? Peux-tu espérer aller plus vite à la main ?

 

Retourner vers ⚜ Salon Mathématique

Qui est en ligne

Utilisateurs parcourant ce forum : Aucun utilisateur enregistré et 30 invités

Tu pars déja ?



Fais toi aider gratuitement sur Maths-forum !

Créé un compte en 1 minute et pose ta question dans le forum ;-)
Inscription gratuite

Identification

Pas encore inscrit ?

Ou identifiez-vous :

Inscription gratuite