質問

dev-cppとwxwidgetsを使ってパズルを解くプログラムを作成しました。
ユーザーは操作ブロックと結果ブロックを入力する必要があり、プログラムがそれを解決します。
私はブルートフォースを使用してそれを解決しています。再帰アルゴリズムを使用して、繰り返されない9つの長さの数値の組み合わせをすべて生成します。それはかなり速く行われます。
ここまではすべて素晴らしいです!
しかし、問題は、プログラムがブロック上の文字に応じて動作する場合です。+、-、* などに対する文字の比較のため、非常に遅い (答えが得られない)。CASEやってます。
演算子の動的な作成を可能にする何らかの方法またはプログラミング言語はありますか?したがって、演算子 ROW1COL2 を + になるように定義し、他のすべての演算に対しても同様に定義できます。
パズルの仕組みを理解しやすいように、アプリのスクリーンショットを残しておきます。
http://www.imageshare.web.id/images/9gg5cev8vyokp8rhlot9.png


PD:アルゴリズムは機能するので、簡単なパズルで試してみたところ、すぐに解けました。

役に立ちましたか?

解決

これが本当にあなたが探しているものであるかどうかはわかりませんが、
C++ や C# などのオブジェクト指向言語では、「Operator」基本クラスを作成し、この基本クラスから「PlusOperator」や「MinusOperator」などを派生させることができます。これは、そのような case ステートメントを回避する標準的な方法です。

ただし、これでパフォーマンスの問題が解決されるかどうかはわかりません。
このような問題に対して単純な力技を使用すると、指数関数的な解決策が得られます。これは、小さな入力、たとえばすべての数値を入力する場合には高速に動作するようです。しかし、操作を完了したい場合は、より多くの可能性を伴うより大きな問題になります。
そのため、CASE がなくてもプログラムで問題を解決できない可能性があります。

この種の問題を解決する正しい方法は、ヒューリスティック関数を使用する高度な検索方法を使用することです。を参照してください。 A*(エースター)アルゴリズム 例えば。

幸運を!

他のヒント

数値と演算子をオブジェクトとして表すことができるため、解析は解析の開始時に 1 回だけ行われます。

ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top