Suites de Collatz de longueur donnée

Discussion générale entre passionnés et amateurs de mathématiques sur des sujets mathématiques variés
syrac

Suites de Collatz de longueur donnée

par syrac » 22 Fév 2016, 16:48

Il ne s’agit plus ici de suites de Collatz impaires mais de suites dites compressées, qu’on obtient en appliquant l’algorithme suivant à n0 :

Image

Pour calculer une valeur de n0 produisant une suite de longueur (ou nombre de termes) L donnée il fallait jusqu’à présent procéder en commençant par 1 et en remontant jusqu’à la valeur adéquate de n0, ce qui posait le problème de la divisibilité potentielle de chaque prédécesseur par 3. L’idéal est donc de calculer directement cette valeur de n0. Je vais montrer comment y parvenir.

Lorsqu’on construit la liste des entiers impairs dont la suite compressée est de longueur L, on doit les tester tous à partir de 3 (par exemple) jusqu’à une limite supérieure arbitraire au-delà de laquelle on ne sait pas s’il en existe d'autres. Je définirai plus loin cette limite, mais dans l’immédiat voici à titre d’exemple ce qu’on obtient lorsqu’on recherche les valeurs de n0 qui produiront une suite compressée de longueur 17 :

25, 77, 81, 241, 245, 267, 725, 739, 753, 803, 805, 2261, 2275, 2417, 2421, 7253, 7281, 21845

On peut classer ces nombres ainsi :

Image

Le type de la suite (et par extension de n0 lui-même) correspond au nombre de termes impairs intérieurs qu’elle contient, n0 et 1 n’étant pas comptabilisés puisqu’ils sont communs à toutes les suites. Le type 0 ne contient aucun terme impair intérieur ; cette valeur de n0 est de la forme (2^(L-1) – 1)/3 et n’est présente que lorsque L est impair. Notons que la valeur correspondante de n0 est sensiblement 3 fois plus grande que celle de son prédécesseur dans la liste.

Les valeurs de n0 produisant des suites de type 0 et 1 ne peuvent pas se calculer de la même manière que celles produisant des suites d’autres types. Voici comment on les obtient (syntaxe Mathematica) :

Image

Lorsqu’on désire calculer toutes les valeurs de n0 dont la suite compressée est de longueur L, le plus grand entier impair à tester est Max(n0max(L)). Aller jusqu’à n0 de type 0, lorsque L est impair, entraine toutefois une augmentation importante du temps de calcul, surtout qu’il n’existe aucune valeur pertinente de n0 entre la plus grande de type 1 et celle en question.

Pour continuer avec notre exemple, n0max(17) = {7253, 7281, 21845}
Avec L pair : n0max(18) = {13653, 14549, 14563}

Calcul des valeurs de n0 de type supérieur à 1

A titre d’exemple, les valeurs de n0 de type 2 produisant des suites de longueur L = 10, 11, 12, 13, 14, …, 20 sont 17, 35, 69, 141, 277, 565, 1109, 2261, 4437, 9045, 17749. Ces nombres sont définis par la relation de récurrence suivante :

Image

Pour calculer la valeur de n0 de rang r donné dans cette suite d’entiers, il est donc nécessaire de connaître la valeur de (a1, a2, a3) ainsi que la longueur de la suite produite par n0 = a1. Pour reprendre l’exemple précédent, si on cherche la valeur de n0 produisant une suite de type 2 de longueur 15, son rang r sera égal à 15 – 10 +1 = 6, ce qui donnera n0 = 565.

Il n’existe malheureusement pas de formule magique donnant (a1, a2, a3) pour un type de suite donné. Il faut effectuer ce calcul à la main (je l’ai fait avec l’aide d’un bon algorithme, mais ça m’a quand même pris beaucoup de temps). Le tableau suivant contient tous les quadruplets nécessaires au calcul d’une valeur de n0 produisant une suite compressée de type 2 à 50 et de la longueur désirée. Ils sont composés comme suit :

Image

Ce qui frappe lorsqu’on observe ce tableau, ne serait-ce que les valeurs successives de L min, c’est la totale incohérence des données qu’il contient. Il faut cependant admettre que des données initiales réellement incohérentes ne conduiraient pas à quelque chose d’aussi ordonné, ce qui donne à penser qu’il existe sans doute une structure sous-jacente. Mais si c’est le cas elle est bien cachée…

Le tableau est suivi de la fonction suiteLt(L, t), qui renvoie la suite compressée de longueur L et de type t.

Image

Pour retrouver notre valeur précédente de n0 = 565 il suffit de faire suiteLt(15, 2), et on obtient

565, 848, 424, 212, 106, 53, 80, 40, 20, 10, 5, 8, 4, 2, 1

Sa longueur est bien 15 et elle contient 2 termes impairs intérieurs. Si on veut produire une suite de type 2 et de 60 termes, on obtiendra une suite comportant (en comptant n0 et 1) 60 – 4 = 56 termes pairs et une très grande valeur de n0, comme suiteLt(60, 2), qui renvoie

19515598385272149, 29273397577908224, 14636698788954112, 7318349394477056, 3659174697238528, 1829587348619264, …, 832, 416, 208, 104, 52, 26, 13, 20, 10, 5, 8, 4, 2, 1

A l’inverse, suiteLt(46, 23) produit une petite valeur de n0 :

111, 167, 251, 377, 566, 283, 425, 638, 319, 479, 719, 1079, 1619, 2429, 3644, 1822, 911, 1367, 2051, 3077, 4616, 2308, 1154, 577, 866, 433, 650, 325, 488, 244, 122, 61, 92, 46, 23, 35, 53, 80, 40, 20, 10, 5, 8, 4, 2, 1

En règle générale, l’ordre de grandeur de n0 est proportionnel à celui de L – t.

En raison du fait que l'algorithme s’appuie sur un tableau de données, toutes valeurs de L et de t données produiront toujours la même sortie. Néanmoins, j’ai pu observer que certains types permettent de produire plusieurs valeurs (a1, a2, a3), alors que d’autres types ne permettent qu’une seule configuration. On constate là encore une grande disparité de comportements, sans logique apparente.

Les utilisateurs de Mathematica 10 peuvent télécharger le notebook correspondant. Il se peut qu'il fonctionne également dans les versions antérieures.

PS : un modérateur aurait-il l'obligeance de supprimer le sujet "Partition d'un entier", qui n'a plus lieu d'être ? Merci d'avance !



syrac

Re: Suites de Collatz de longueur donnée

par syrac » 24 Fév 2016, 17:39

Je vais quand même m'expliquer un peu plus, à l'intention de ceux qui voudraient se pencher sur le problème.

Voici comment calculer n0 :

Image

avec L, la longueur d'une suite compressée, S = (L-1, a, b, c, …,k), une liste d'exposants de 2, et m, le nombre d'éléments de S. Il existe m -1 termes impairs intérieurs dans une suite (ce qui représente son type). Ils correspondent au nombre de paramètres a, b, ..., k.

On sait que L-1 > a > b > c > ... > k, et que (L-1) - a = 4 au début du calcul (a diminue ensuite).

Voici un exemple, dans lequel on cherche des valeurs de n0 produisant des suites de 21 termes de type 3 (le dernier nombre de chaque ligne est la valeur résultante de n0) :

Image

Calcul de n0 en fonction du contenu de S :

Image

Exemples avec des valeurs de n0 tirées du tableau ci-dessus :
11605, 17408, 8704, 4352, 2176, 1088, 544, 272, 136, 68, 34, 17, 26, 13, 20, 10, 5, 8, 4, 2, 1
12931, 19397, 29096, 14548, 7274, 3637, 5456, 2728, 1364, 682, 341, 512, 256, 128, 64, 32, 16, 8, 4, 2, 1

Je me suis orienté vers la solution basée sur les quadruplets parce qu'à partir du type 2 (et ça ne fait que s'empirer avec l'augmentation du numéro du type) le calcul des paramètres a, b, c, ... tient de l'impossible (du moins pour moi).

A moins que quelqu'un n'ait une solution viable, qui ne passe pas par une suite de boucles imbriquées (comme pour obtenir la valeur des paramètres dans l'exemple ci-dessus)...

syrac

Re: Suites de Collatz de longueur donnée

par syrac » 19 Mar 2016, 15:07

J'ai du nouveau.

Les explications figurent dans ce document (en fait trois documents zippés).

syrac

Re: Suites de Collatz de longueur donnée

par syrac » 21 Mar 2016, 15:54

Voici quelques explications.

Le nombre t de termes impairs différents de n0 et 1 que compte une suite est directement lié à L, sa longueur. Pour une valeur donnée de L il existe un nombre fini de types de suites. Par exemple, pour L = 130 il existe 72 types, de t = 72 à t = 1. Le plus grand est celui de n0min, égal à 8315, et dont la suite compte 74 termes impairs au total. Le plus petit nombre de termes impairs apparaît dans une suite de type 1 si L est pair, et dans une suite de type 0 si L est impair. Toujours avec L = 130, l’entier 70892159775195513221536376548285044053, qui est de type 1, ne compte au total que 3 termes impairs dans sa suite.

Si 8315 est de type 72 dans une suite de longueur 130, la plus petite valeur de n0 de type 72, c’est-à-dire n0tmin, est 4233, dont la suite est de longueur 129. Voici la liste des 16 premiers entiers impairs de type 72 : 4233, 4255, 8315, 8425, 8455, 8467, 8511, 8697, 8699, 16283, 16631, 16633, 16647, 16851, 16895, 16903. La longueur de leur suite respective est 129, 129, 130, 130, 130, 130, 130, 130, 130, 131, 131, 131, 131, 131, 131, 131. Je suppose que cette liste se poursuit à l’infini.

La prépondérance de n0tmin sur n0min vient du fait que les valeurs de n0 dont la suite est de longueur L sont de type variant continument de tmax à tmin (ou inversement). On ne connaît de manière certaine que tmin, égal à 1 si L est pair et à 0 si L est impair, ce qui permet de calculer les valeurs maximales de n0 dont la suite est de longueur L (c’est le rôle de la fonction n0max(L)). Mais on ne sait rien de tmax, qui est le type de la (ou des) plus petite valeur de n0 dans ce contexte. Pour le connaître, et donc en déduire cette valeur particulière de n0, il faut calculer toutes les valeurs de n0tmin, en partant de t = 2 puis en l’incrémentant, jusqu’à tomber sur celle dont la longueur minimale de la suite, Ltmin, est supérieure à L ; on sait alors qu’il n’existe pas de valeur de n0 de ce type dont la longueur de la suite serait L, et que tmax est égal à la valeur précédente de notmin ; la valeur de n0 qui en est déduite est donc la plus petite possible. C’est ce que fait la fonction lg2n0(L).

n0min ne veut rien dire en soi, il n’a de sens que par rapport à L, et rien ne permet de relier n0min pour L à n0min pour L+x. Mais en ce qui concerne n0tmin ce lien existe. C’est justement grâce à lui qu’on peut calculer les valeurs de n0 de type croissant de tmin à tmax et dont la suite est de longueur L : on calcule le triplet (u, v, Ltmin) pour t donné, puis d = L – Ltmin, puis k = d + 1 + (-1)^d, et on obtient n0 = (u 2^(L-v-1) – 2^k - 3) /9. Le lien dont je parlais est donc celui qui existe entre L et Ltmin, la plus petite longueur d’une suite de type t. Toute la difficulté tient dans la notation : on a L d’un côté et Ltmin de l’autre. Qu’ont-ils en commun ? L désigne la longueur d’une suite, et toute suite possède un type. Si on réunit la longueur et le type en un seul concept, alors on parle du lien qui existe entre Lt et Ltmin, ce qui rend les choses plus claires et lève l’ambigüité liée, d’un côté, à une suite de type indéfini et de longueur L variable, et de l’autre côté à une suite de type défini et de longueur Ltmin invariable. Ainsi, lorsqu’on pose d = L – Ltmin on effectue implicitement le calcul de Lt – Ltmin. Autrement dit, le type de la suite de longueur L est défini par Ltmin. La valeur de n0 déduite ensuite du triplet (u, v, ltmin) sera donc de ce type-là.

syrac

Re: Suites de Collatz de longueur donnée

par syrac » 06 Avr 2016, 16:45

Comme il m'a été demandé de fournir quelques explications supplémentaires à propos de la formule de la page 1 de mon document, je l'ai réécrite. J'y explique à quoi correspond exactement la suite d'entiers (a, b, c, ..., k). Mais je suppose que nombre d'entre vous l'aviez trouvé seuls.

J'en ai profité pour porter la valeur maximale de t, le type, à 262, et la plus grande longueur L d'une suite à 441. J'ai également ajouté une fonction qui permet de calculer des valeurs de n0 de type donné et dont la longueur de la suite est croissante à partir de Ltmin (la plus courte suite de ce type). Dans l'exemple suivant on calcule 15 valeurs de n0 de type 11, c'est-à-dire dont la suite de Collatz compte 11 termes impairs entre n0 et 1 :

typ2n0(11, 15) = 105, 211, 421, 845, 1685, 3381, 6741, 13525, 26965, 54101, 107861, 216405, 431445, 865621, 1725781

La longueur des suites de 105, 211, ..., 1725781 est 27, 28, 29, 30, ..., 40, 41. Le nombre de valeurs de n0 passé en paramètre (ici 15) est illimité.

J'ai ajouté dans l'archive une image de l'arbre des valeurs de n0tmin (le plus petit entier impair de type t). Cet arbre permet de mesurer la complexité de leur ordonnancement, et donc toute la difficulté de concevoir une formule ou un algorithme permettant de les calculer.

Connaître la suite des valeurs de n0tmin est primordial, et pas seulement pour calculer des valeurs de n0 de longueur et de type donnés. Dans le ratio (t+1)/(L-1), dit "ones-ratio", ce sont les valeurs successives de n0tmin qui croissent jusqu'au maximum supposé être 0.606061, comme l'image suivante le démontre :

Image

Je pense qu'ensuite elles décroissent, mais jusqu'où ? Jusqu'à 0 ? Existe-t-il un cycle de croissances-décroissances ? Pour le savoir il faut, soit posséder un superordinateur Cray, soit trouver une méthode de calcul des valeurs de n0tmin.

Le maximum trouvé jusqu'ici de ce ratio est reporté sur la page http://www.ericr.nl/wondrous/comprecs.html. Il est atteint par n0tmin = 7219136416377236271195, de type 1119. Mais comme ce nombre est relativement petit, il doit bien se passer quelque chose au-delà de lui...

L'archive mise à jour est téléchargeable à cette adresse.

 

Retourner vers ⚜ Salon Mathématique

Qui est en ligne

Utilisateurs parcourant ce forum : Aucun utilisateur enregistré et 18 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