2016-05-22 13 views
0

addition, subtraction and shiftを使用して2つの数を掛けることは可能です。この手順の重要な部分は、このような操作の最小限の(最適な)シーケンスを見つけることです。ブルートフォースを使用してシーケンスを見つけると、指数関数的に成長するので、さまざまな経験則が使用されます。おそらく最もよく知られているのは、Robert Bernsteinの論文Multiplication by integer constantです。ヴィンセントルフェーブルによってMultiplication by an Integer Constantで与えられるよう、113を掛けるための少数の加算とシフトで定数を掛けること

例:Z3(または類似)を使用することが可能である見つけること:

3x <- x << 1 + x 
    7x <- 3x << 1 + x 
113x <- 7x << 4 + x 

私は私は疑問に思ってしまった非常に興味深いanswerつまずい与えられた定数で数を掛ける最小の演算子列?私はこのすべてのSATとSMTにはとても新しいので、ブールの充足可能性の問題の文脈では意味があるのか​​どうか分かりません。

答えて

0

実際に可能です。ただし、この問題はNP困難です。

私たちは、より一般的な問題(複数の定数乗算)でしばらく前に実験を行った:http://web.ist.utl.pt/nuno.lopes/pubs/mcm-pb10.pdf

は、基本的な結果はかなり期待はずれでした。特殊化されたアルゴリズムははるかに高速でした。

関連する問題