【问题标题】:Dynamically created operators动态创建的运算符
【发布时间】:2010-09-11 16:02:46
【问题描述】:

我使用 dev-cpp 和 wxwidgets 创建了一个程序来解决一个难题。

用户必须填写操作块和结果块,程序将解决它。我正在使用蛮力解决它,我使用递归算法生成所有非重复的 9 长度数字组合。它的速度非常快。

到这里为止一切都很好!

但问题是当我的程序根据块上的字符运行时。它非常慢(它永远不会得到答案),因为与 +、-、* 等的字符比较。我正在做一个 CASE。

是否有某种方式或某种编程语言允许动态创建运算符?所以我可以将操作符 ROW1COL2 定义为 +,其他操作也一样。

我留下了应用程序的屏幕截图,以便更容易理解拼图的工作原理。

http://www.imageshare.web.id/images/9gg5cev8vyokp8rhlot9.png

PD:算法有效,我用一个简单的谜题试了一下,很快就解决了。

【问题讨论】:

    标签: c++ dynamic operators wxwidgets


    【解决方案1】:

    不确定这是否真的是您要寻找的,但是..
    任何面向对象的语言(例如 C++ 或 C#)都允许您创建“Operator”基类,然后从该基类派生“PlusOperator”或“MinusOperator”等。这是避免此类案例陈述的标准方法。

    但我不确定这是否能解决您的性能问题。
    对此类问题使用简单的蛮力将导致您获得指数解决方案。对于少量输入,这似乎很快就会起作用 - 比如完成所有数字。但是,如果您想完成操作,这是一个更大的问题,有更多的可能性。
    因此,即使没有 CASE,您的程序也可能无法解决它。

    尝试解决此类问题的正确方法是使用一些使用启发式函数的高级搜索方法。例如,请参阅A* (A-star) algorithm

    祝你好运!

    【讨论】:

      【解决方案2】:

      您可以将数字和运算符表示为对象,因此解析只在求解开始时进行一次。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2020-01-09
        • 1970-01-01
        • 2015-06-16
        • 1970-01-01
        • 1970-01-01
        • 2021-08-22
        • 1970-01-01
        • 2022-12-21
        相关资源
        最近更新 更多