J'ai expérimenté des algorithmes génétiques récemment et maintenant je voudrais construire des expressions mathématiques à partir des génomes (pour parler facilement, il faut trouver une expression qui correspond à un certain résultat) . J'ai des génomes constitués de gènes qui sont représentés par des octets, un génome peut ressembler à ceci: {12, 127, 82, 35, 95, 223, 85, 4, 213, 228}. La longueur est prédéfinie (bien qu'elle doive tomber dans une certaine plage), pas plus que la forme qu'elle prend. C'est-à-dire que n'importe quelle entrée peut prendre n'importe quelle valeur d'octet.Traduire une chaîne binaire en expression mathématique
Maintenant, l'astuce consiste à traduire cela en expressions mathématiques. Il est assez facile de déterminer les expressions de base, par exemple: Choisissez les 2 premières valeurs et traitez-les comme produits, choisissez la 3ème valeur et choisissez-la comme opérateur (+, -, *, /, ^, mod), choisissez la 4ème valeur comme un produit et choisir la 5ème valeur en tant qu'opérateur à nouveau sur le résultat du 3ème opérateur sur les 2 premiers produits. (ou juste le gérer comme une expression postfix)
La complexité augmente lorsque vous commencez à autoriser les règles de priorité. Maintenant, quand par exemple l'entrée sous l'index 2 représente un '(', vous devez avoir un ')' quelque part plus loin sauf pour l'entrée 3, mais pas forcément l'entrée 4
Bien sûr, il en va de même pour beaucoup de choses. ne peut pas finir avec un opérateur à la fin, vous ne pouvez pas vous retrouver avec un nombre en vrac, etc.
Maintenant, je peux faire une énorme déclaration de commutateur (par exemple) en prenant toutes les possibilités possibles, mais cela fera le code illisible. J'espérais que quelqu'un là-bas connaisse une bonne stratégie sur la façon de prendre celui-ci.
Merci d'avance!
** EDIT **
Sur demande: le but que je suis en train de réaliser est de faire une application qui peut résoudre une fonction pour un ensemble de nombres. Comme pour l'exemple que j'ai donné dans le commentaire ci-dessous: {4, 11, 30} et il pourrait venir avec la fonction (X^3) + X
Utiliser une langue avec un Eval() fonction –
Je crois que vous devez fournir quelques exemples de plus pour nous de comprendre ce que vous voulez accomplir. – aioobe
est-ce juste moi ou essayez-vous de créer un algorithme de compression hardcore ?! – ComputerSaysNo