Je travaille sur une thèse concernant les séquences Jacobsthal (A001045) et la manière dont elles peuvent être considérées comme étant composées d'un certain nombre de sous-séquences distinctes. J'ai fait un commentaire sur A077947 en indiquant cela et j'ai inclus un programme Python. Malheureusement, le programme comme écrit laisse beaucoup à désirer et, bien sûr, je voulais passer à Stack pour voir si quelqu'un ici sait comment améliorer le code!
La séquence A077947 est générée par 6 séquences de préservation de racines numériques
cousu ensemble; par le code Python Ces séquences initient à la
Valeurs de graines A-F. Le nombre d'itérations requises pour calculer une donnée
A077947 A (N) est ~ N / 6. Le code lorsqu'il est exécuté renvoie toutes les valeurs de
A077947 jusqu'à la plage (x), ou ~ x * 6 termes d'A077947. Je trouve le répété
Racines numériques intéressantes comme je cherche la préservation des racines numériques périodiques
dans les séquences comme méthode permettant d'identifier les modèles dans les données. Pour
Exemple, les séquences de conservation des racines numériques permettent une analyse des séries chronologiques de
grands ensembles de données lors de l'estimation du statut true-ou faux des alarmes en grand
les écosystèmes qui subissent une maintenance (environnements mod7); Une telle analyse est
également liée à la prévision de la demande des consommateurs / des schémas de comportement.
Appropriant ces méthodes d'analyse, sculpture A077947 en 6 numériques
Les séquences de préservation des racines visaient à réduire la complexité; le code Python
reproduit A077947 sur 6 "canaux" avec des valeurs de graines A-F. Cette longue
le paragraphe se résume à la déclaration: "Les racines numériques des termes de la
répéter la séquence dans le motif (1, 1, 2, 5, 9, 9). "La déclaration plus grande
est-ce que toutes les séquences dont les racines numériques se répètent avec un motif peuvent être
partitionné / séparé en un nombre égal de séquences distinctes et de celles
Les séquences peuvent être calculées indépendamment. Il y avait une prime liée à
cette séquence. p>
blockQuote> Ce code est laid mais je ne peux pas sembler avoir la bonne réponse sans le coder de cette façon; p> Je n'ai pas compris comment écrire cela comme une fonction en raison du fait que je ne peux pas sembler obtenir les valeurs de récurrence à stocker correctement dans une fonction. p> donc bien sûr si cela Conspose de bons résultats Nous espérons relier la discussion aux références de l'OEIS. P> Voici un lien vers la séquence: strong>
https://oeis.org/a077947 p> P>
4 Réponses :
Cela se comportera de manière identique à votre code et est sans doute plus jolie. Vous verrez probablement des moyens de rendre les constantes magiques moins arbitraires. Pour calculer une seule des sous-séquences, il suffirait de garder i code> corrigé comme vous itérer. p> p>
Traceback (appel le plus récent): fichier "testoeis.py", ligne 7, dans
Typo, désolé! Cela aurait dû être facteurs [i] code>, pas
i code>. Maintenant, il correspond à votre séquence
Je le vois maintenant. Il génère la séquence souhaitée.
Voici une solution alternative de le faire sans une seconde pour la boucle: [modifier] En regardant les valeurs que j'ai remarquées que cette séquence particulière pourrait également être obtenue avec: p> n [i + 1] = 2 * N [I] + (-1,0,1 en rotation) p> ou p> n [i + 1] = 2 * N [i] + i mod 3 - 1 (supposer un index à base de zéro) em> p> donc une boucle plus simple pour produire la séquence pourrait être : P> printSeq("A001045",20,lambda x,s,c,p: 64*s + 21*(-1)**(x*p+c),[0,1,1,3,5,11])
Joli. Je n'ai pas vu [n = 2 * N + I% 3 - 1] du tout! Élégant.
Si cela est de valeur, chaque tiers d'entrée de la séquence est un nombre pair. Cela signifie que vous pouvez trouver la valeur suivante dans la séquence à partir de deux valeurs consécutives connues (sans connaître l'index) à l'aide de N [i + 1] = n [i] * 2 - N [i]% 2 + n [I-1 ]% 2 (semblable à la séquence Fibonacci)
Voici une version alternative utilisant des générateurs: et voici un moyen sûr de l'utiliser: p> j = Jacobsthal()
for _ in range(10):
print(j.send(None))
N'essayez pas ca a la maison!
Ctrl + C est votre ami :-)
Comme vous pouvez le voir à partir de l'annotation de l'OEIS, vous n'avez besoin que de 3 valeurs initiales et 1 récursives de 3 éléments de séquence précédents, A (N-1), A (N-2) et A (N-3). Vous pouvez ensuite obtenir facilement la série.
# a(n-1)+a(n-2)+2*a(n-3) # start values: 1, 1, 2 a1, a2, a3 = 1,1,2 #initial vales m3, m2, m1 = 1,1,2 #multipliers for a(n-1):m3 a(n-2):m2 and a(n-3):m1 print a1, a2, a3, for i in range(16): a1,a2,a3=a2,a3,a3*m3+a2*m2+a1*m1 print a3,
Voulez-vous l'améliorer esthétiquement, la performance ou les deux? Il me semble que la réponse d'Alain est soignée.
Tous les deux; Je suis moins préoccupé par la lisibilité que la compacité. La séquence la plus intéressante est l'A001045, mais là où cette séquence est composée de 6 sous-préquendances indépendantes A001045 a quelque chose comme 18, obtenir une solution compacte ici permettra une bien meilleure solution sur A001045. Il y a beaucoup de ces types de séquences .....