2008-09-20 7 views
1

J'ai créé un programme en utilisant dev-cpp et wxwidgets qui résout un puzzle.
L'utilisateur doit remplir les blocs d'opérations et les blocs de résultats, et le programme le résoudra. En le résolvant en utilisant bruteforce, je génère toutes les combinaisons de nombres de longueur non répétées en utilisant un algorithme récursif. Ça fait vite.
Jusqu'à ici tout est génial!
Mais le problème est quand mon programme fonctionne en fonction du caractère sur les blocs. C'est extrêmement lent (il n'obtient jamais la réponse), à ​​cause de la comparaison des caractères contre +, -, *, etc. Je fais un CAS.
Existe-t-il un langage ou un langage de programmation permettant la création dynamique d'opérateurs? Donc, je peux définir l'opérateur ROW1COL2 comme un +, et de la même manière pour toutes les autres opérations.
Je laisse une capture d'écran de l'application, il est donc plus facile de comprendre comment fonctionne le puzzle.
http://www.imageshare.web.id/images/9gg5cev8vyokp8rhlot9.png


PD: Les travaux de l'algorithme, je tryed avec un casse-tête trivial, et résolu dans une seconde.Opérateurs créés dynamiquement

Répondre

1

Pas sûr que ce soit vraiment ce que vous cherchez, mais ..
Tout objet langage comme le C++ ou C# vous permettra de créer une classe de base « opérateur », puis tirer de cette classe de base d'une "PlusOperator" ou "MinusOperator" etc '. C'est la manière standard d'éviter de telles déclarations de cas.

Cependant, je ne suis pas sûr que cela va résoudre votre problème de performance. L'utilisation d'une force brutale pour un tel problème vous donnera une solution exponentielle. cela semblera fonctionner rapidement pour de petites entrées - dire compléter tous les nombres. Mais si vous voulez compléter les opérations c'est un problème beaucoup plus grand avec beaucoup plus de possibilités.
Il est donc probable que même sans le CAS votre programme ne sera pas en mesure de le résoudre.

La meilleure façon d'essayer de résoudre ce genre de problèmes est d'utiliser des méthodes de recherche avancées qui utilisent une fonction heuristique. Voir le A* (A-star) algorithm par exemple.

Bonne chance!

0

Vous pouvez représenter les nombres et les opérateurs en tant qu'objets, de sorte que l'analyse est effectuée une seule fois au début de la résolution.

Questions connexes