动态创建的运算符
时间:2020-03-06 14:29:28 来源:igfitidea点击:
我使用dev-cpp和wxwidgets创建了一个解决难题的程序。
用户必须填充操作块和结果块,程序将对其进行解决。
我使用蛮力解决它,我使用递归算法生成所有非重复的9个长度数字组合。它做起来非常快。
到目前为止,一切都很好!
但是问题是当我的程序根据块上的字符运行时。由于与+,-,*等的字符比较,它的运行速度非常慢(始终无法得到答案)。我正在执行CASE。
是否有某种方式或者某种编程语言允许动态创建运算符?因此,我可以将运算符ROW1COL2定义为+,并对所有其他运算使用相同的方式。
我留下了该应用程序的屏幕截图,因此它更容易理解拼图的工作原理。
http://www.imageshare.web.id/images/9gg5cev8vyokp8rhlot9.png
PD:该算法有效,我尝试了一个小难题,然后很快就解决了。
解决方案
不确定这是否是我们真正要的东西,但是..
任何面向对象的语言(例如C ++或者C)都允许我们创建" Operator"基类,然后从该基类派生" PlusOperator"或者" MinusOperator"等。这是避免此类案例陈述的标准方法。
但是,我不确定这是否可以解决性能问题。
对这种问题使用简单的暴力破解将为我们提供指数解决方案。只需输入少量数字,这似乎就可以快速完成。但是,如果我们想完成操作,则可能会遇到更多更大的问题。
因此,即使没有CASE,程序也很可能无法解决它。
解决此类问题的正确方法是使用一些使用启发式功能的高级搜索方法。例如,请参阅A *(A星)算法。
祝你好运!
我们可以将数字和运算符表示为对象,因此在求解开始时仅进行一次解析。