10
votes

Algorithme pour trouver le numéro suivant dans une séquence

depuis que j'ai commencé à programmer cela a été quelque chose que j'ai été curieux. Mais semble trop compliqué pour que je puisse même tenter.

J'adorerais voir une solution. P>

1, 2, 3, 4, 5    // returns 6 (n + 1)
10, 20, 30, 40, 50   //returns 60 (n + 10)
10, 17, 31, 59, 115  //returns 227 ((n * 2) - 3)


5 commentaires

Les deux premiers sont-ils faciles, mais comment généraliser?


Je pense que la deuxième ligne retourne 60 ...


Ouais, merci Maurizio. Raté ça. : p


En ce qui concerne votre 3ème exemple, voyez ceci: RECHERCHE.ATT.com/~njas/Equences/...


Il y a infiniment de nombreuses fonctions; Qui a pour dire que le prochain numéro est vraiment 6?


9 Réponses :


4
votes

Désolé de décevoir, mais ce n'est pas tout à fait possible (en général), car il existe un nombre infini de séquences pour toutes les valeurs données k . Peut-être avec certaines contraintes ..

Vous pouvez jeter un coup d'oeil à ce 2 Poste, qui pointe de Lagrange Polynomial .


9 commentaires

Oui, il peut y avoir beaucoup de possibilités, mais ne pouvions-il pas simplement trouver celui qui fonctionne pour le tableau donné et l'utiliser? Il n'a pas nécessairement besoin de couvrir toutes les possibilités. Cela a-t-il du sens?


Le problème est que le numéro suivant peut être littéralement n'importe quoi, et vous pouvez comprendre un motif / polynôme pour s'adapter à ce nouveau modèle. Par exemple, il y a un motif qui s'adapte, 1, 2, 3, 4, 5, 6, mais aussi 1, 2, 3, 4, 5, 5, 5, 5, 5, 5 ..


Mais je veux dire simplement trouver une formule pour adapter ces 5 numéros puis utiliser cela pour obtenir le 6ème.


Cela dit, la déclaration "avec certaines contraintes" n'est pas une jetaresse, si vous avez certaines contraintes (disons que vous les limitez à un ordre polynomial 2, hache ^ 2 + bx + C ) Vous pourriez être capable de trouver quelque chose. Mais en général, ce n'est pas le cas.


Vous pouvez trouver un nombre infini de formules qui correspondent aux 5 numéros pour obtenir un 6ème.


@Larry, je pense qu'il est prudent d'assumer dans ce cas, que les chiffres suivent un modèle représenté dans les données données. Sinon, la question n'a pas de sens.


1, 2, 3, 4, 5 // retourne 0 (n% 6)


Dans tous les cas, jetez un coup d'œil à l'ensemble des liens - la discussion est probablement ce que vous attendez.


Sur une note latérale, il y a plusieurs années, j'ai écrit une de ces tests en ligne de "séquences" amusants pour voir la quantité de "geek mathématique" que vous êtes, avec la compréhension de ce que j'ai prétendu ci-dessus en tant que responsabilité de non-responsabilité. Je reçois toujours des courriels fâchés à ce jour sur la façon dont il est inutile. ;)



0
votes

J'aime l'idée et la séquence qu'un et deux me sembleraient que cela est possible, mais encore une fois, vous ne pouvez pas généraliser car la séquence pourrait totalement sortir de la base. La réponse est probablement que vous ne pouvez pas généraliser, ce que vous pouvez faire est d'écrire un algorithme pour effectuer une séquence spécifique connaissant le (n + 1) ou (2n + 2) etc.

Une chose que vous pourrez peut-être faire est une différence entre l'élément I et l'élément I + 1 et l'élément I + 2. P>

par exemple, dans votre troisième exemple: P>

10 17 31 59 115


0 commentaires

0
votes

Vous pouvez essayer d'utiliser extrapolation . Cela vous aidera à trouver des formules pour décrire une séquence donnée.

Je suis désolé, je ne peux pas vous dire beaucoup plus, car mon enseignement mathématique s'est passé il y a tout à fait. Mais vous devriez trouver plus d'informations dans de bons livres.


0 commentaires

20
votes

Ce que vous voulez faire est appelé interpolation polynomiale em>. Il existe de nombreuses méthodes (voir http://fr.wikipedia.org/wiki/polynomial_interpolation ), Mais vous devez avoir une limite supérieure U sur le degré des valeurs polynomiales et au moins u + 1.

Si vous avez des valeurs séquentielles, il y a un simple algorithme. p>

donné une séquence x1 , x2, x3, ..., let delta (x) être la séquence des différences X2 - X1, X3 - X2, X4 - X3, .... Si vous avez des valeurs consécutives d'un degré N polynomial, le NTH ItéRy of Delta est une séquence constante. P>

Par exemple, le polynôme N ^ 3: P>

6, 6, 6, 6 = 6, ...
12, 18, 24, 30, 36 = 30 + 6, ...
7, 19, 37, 61, 91, 127 = 91 + 36, ...
1, 8, 27, 64, 125, 216, 343 = 216 + 127, ...


1 commentaires

Ya, c'est vraiment la base du moteur de différence Babbage. Déterminez que la nième dérivée est une constante et simplement une addition vous donne le numéro suivant.



0
votes

Ce type de série numérique fait souvent partie des "tests de renseignement", ce qui me conduit à penser aux termes d'un tel algorithme étant quelque chose de passage (au moins une partie de) un Turing Test , qui est quelque chose de difficile à accomplir.


0 commentaires

4
votes

officiellement, il n'y a pas de valeur suivante unique à une séquence partielle. Le problème comme généralement compris peut être clairement indiqué comme suit:

Supposons que la séquence partielle exposée est suffisante pour contraindre une certaine règle génératrice, déduire la règle la plus simple possible et présenter la valeur suivante générée.

Le problème tourne le sens de "la plus simple" et n'est donc pas vraiment bon pour les solutions algorithmatiques. Il peut être fait si vous confinez le problème à une certaine classe de formes fonctionnelles pour la règle génératrice, mais les détails dépendent de quelles formes vous êtes prêt à accepter.


0 commentaires

1
votes

Le livre Recettes numériques a des pages et des pages d'algorithmes pratiques réels pour faire ce genre de choses. Ça vaut la peine de lire!

Les deux premiers cas sont faciles: xxx

Le troisième cas nécessiterait une résolution d'une fonction non linéaire.


0 commentaires

0
votes

Pour une fonction arbitraire, il ne peut pas être fait, mais pour une fonction linéaire comme dans chacun de vos exemples, c'est assez simple.

Vous avez f (n + 1) = A * F (N) = A * F (N) + B et le problème permet de trouver a et b .

donné au moins trois termes de la séquence, vous pouvez faire Ceci (vous en avez besoin trois parce que vous avez trois inconnues - le point de départ, a et b ). Par exemple, supposons que vous ayez f (0) , f (1) et f (2) .

nous Peut résoudre les équations: xxx

la solution est: xxx

(vous voulez résoudre séparément le boîtier où f (0) = f (1) pour éviter la division par zéro.)

une fois que vous avez A B , vous pouvez appliquer à plusieurs reprises la formule à votre valeur de départ pour générer n'importe quel terme dans la séquence.

On pourrait également écrire une procédure plus générale qui fonctionne lorsque vous donnez tout trois points la séquence (par exemple 4ème, 7ème, 23e, ou autre). . . C'est juste un exemple simple.

à nouveau, cependant, nous devions faire des hypothèses sur la forme de notre solution. . . Dans ce cas, il faut être linéaire comme dans votre exemple. On pourrait supporter qu'il s'agisse d'être un polynôme plus général, par exemple, mais dans ce cas, vous avez besoin de plus de termes de la séquence pour trouver la solution, en fonction du degré du polynôme.


0 commentaires

0
votes

Voir aussi le chapitre "Pour rechercher une séquence" du livre "Concepts fluides et analogies créatifs: modèles informatiques des mécanismes fondamentaux de la pensée" de Douglas Hofstadter

http: //portal.acm. org / citation.cfm? id = 218753.218755 & Coll = Guide & DL = Guide & CFID = 80584820 & CFTOGN = 18842417


0 commentaires