Динамически созданные операторы - PullRequest
1 голос
/ 20 сентября 2008

Я создал программу с использованием dev-cpp и wxwidgets, которая решает загадку.
Пользователь должен заполнить блоки операций и блоки результатов, и программа решит это.
Я решаю это, используя брутфорс, я генерирую все неповторяющиеся комбинации чисел с 9 длинами, используя рекурсивный алгоритм. Делает это довольно быстро.
До здесь все отлично!
Но проблема в том, что моя программа работает в зависимости от персонажа на блоках. Это чрезвычайно медленно (он никогда не получает ответа), из-за сравнения символов с +, -, * и т. Д. Я делаю CASE.
Есть какой-то способ или какой-то язык программирования, который позволяет динамически создавать операторы? Таким образом, я могу определить оператор ROW1COL2 как +, так же, как и для всех других операций.
Я оставляю скриншот приложения, чтобы было легче понять, как работает головоломка.
http://www.imageshare.web.id/images/9gg5cev8vyokp8rhlot9.png


PD: Алгоритм работает, я попробовал его с тривиальной загадкой и решил за секунду.

Ответы [ 2 ]

1 голос
/ 20 сентября 2008

Не уверен, что это действительно то, что вы ищете, но ..
Любой объектно-ориентированный язык, такой как C ++ или C #, позволит вам создать базовый класс «Оператор» и затем извлечь из этого базового класса «PlusOperator» или «MinusOperator» и т.д. это стандартный способ избежать таких случаев.

Однако я не уверен, что это решит вашу проблему с производительностью.
Использование простой грубой силы для такой проблемы приведет к экспоненциальному решению. это будет работать быстро для небольшого ввода - скажем, завершение всех чисел. Но если вы хотите завершить операции, это гораздо большая проблема с большим количеством возможностей.
Поэтому вполне вероятно, что даже без CASE ваша программа не сможет ее решить.

Правильный способ решения проблем такого рода - использование некоторых расширенных методов поиска, в которых используется эвристическая функция. См., Например, A * (A-star) алгоритм .

Удачи!

0 голосов
/ 20 сентября 2008

Вы можете представлять числа и операторы как объекты, поэтому анализ выполняется только один раз в начале решения.

...