今日は、考えられるすべての数学方程式を生成します。
次のような構文が与えられた場合:[1,0][+,-][2,3]
これは、最初の文字として1または0、2番目の文字として+または-、3番目の文字として2または3のすべての文字列が必要であることを意味します。
つまり、8つの可能な組み合わせです
1+2
1+3
1-2
1-3
0+2
0+3
0-2
0-3
私のアプローチは機能しますが、値が少し大きい場合はかなり遅くなります。上記の構文を解析し、トークンごとに可能な値の配列を作成し、それを配列に配置します。
equation_set = [];
tokens = [['1','0'],['+','-'],['2','3']]
// Initialize empty equation_set
token = tokens.pop();
foreach symbol in tokens
question_set.add(symbol)
// We now have a question_set = ['1','0']
// and tokens = [['+','-']['2','3']]
//
// Now we need to fill out the rest of the possible equations
foreach token in tokens
new_question_set = []
foreach symbol in token
foreach question in question_set
new_question_set.add(question + symbol)
question_set = new_question_set
それで私が望む結果が得られるはずですが、それらすべてのforeachは私をかなり緊張させます。このアルゴリズムを理解したばかりですが、明らかな何かが欠けているように感じます。私たちは組み合わせ論をいじっているので、それが極端に遅いとしても驚かないでしょうが、これは特別なことではないように感じます。
乾杯!