Pergunta

Eu criei um programa usando dev-CPP e wxWidgets que resolve um enigma.
O usuário deve preencher os blocos de operações e os blocos de resultados, eo programa irá resolvê-lo.
Im resolvê-lo usando bruteforce, i gerar todos para não repetiu 9 Número comprimento combinações usando um algoritmo recursivo. Ele faz isso muito rápido.
Até aqui tudo é ótimo!
Mas o problema é quando o meu programa funciona dependendo do caráter sobre os blocos. Sua extremamente lento (ele nunca fica a resposta), por causa da comparation caracteres contra +, -, *, etc. Im fazendo um caso
. Existe alguma forma ou de alguma linguagem de programação wich permite a criação dinâmica de operadores? Para que eu possa definir o ROW1COL2 operador para ser um +, e da mesma forma para todas as outras operações.
Deixo uma imagem do aplicativo, assim é mais fácil de entender como funciona o quebra-cabeça.
http://www.imageshare.web.id/images/9gg5cev8vyokp8rhlot9.png

PD:. As algoritmo funciona, eu tentei isso com um enigma trivial, e resolveu-o em uma segunda

Foi útil?

Solução

Não tenho certeza de que este é realmente o que você está procurando, mas ..
Qualquer linguagem Object Oriented como C ++ ou C # permite-lhe criar uma classe base "Operador" e, em seguida, para derivar dessa classe base um "PlusOperator" ou "MinusOperator" etc'. este é o modo padrão para evitar tais declarações de caso.

No entanto, eu não estou certo de que este irá resolver o seu problema de desempenho.
Usando força bruta simples para esse problema uma resultará-lo em uma solução exponencial. este parece que vai trabalhar rápido para entrada pequena - digamos completar todos os números. Mas se você quiser para completar as operações é um problema muito maior com muito mais possibilidades.
Então, é bem provável que, mesmo sem o caso do seu programa não vai ser capaz de resolvê-lo.

O caminho certo para tentar resolver este tipo de problemas é o uso de alguns métodos de pesquisa avançados que usam alguma função heurística. Veja a A * (A-estrela) algoritmo por exemplo.

Boa sorte!

Outras dicas

Você pode representar os números e operadores como objetos, então a análise é feita apenas uma vez no início da solução.

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top