乘以常数乘以最少的增加和移位

时间:2016-05-22 19:56:42

标签: z3 multiplication smt sat

可以使用addition, subtraction and shift乘以两个数字。该过程的重要部分是找到这种操作的最小(最佳)序列。使用蛮力找到序列导致难度呈指数增长,因此使用了各种启发式方法,也许最常见的是罗伯特·伯恩斯坦的论文Multiplication by integer constant

由Vincent Lefevre在Multiplication by an Integer Constant中给出的乘以113的示例:

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

我偶然发现了一个非常有趣的answer让我想知道:是否可以使用Z3(或类似的)来找到最小的运算符序列,将数字乘以给定的常数?我对所有这些SAT和SMT都很陌生,所以我不确定它在布尔可满足性问题的背景下是否有意义?

1 个答案:

答案 0 :(得分:0)

确实有可能。但请注意,问题是NP难。

前一段时间我们做了一个实验,有一个更普遍的问题(多次常数乘法):http://web.ist.utl.pt/nuno.lopes/pubs/mcm-pb10.pdf

基本上结果非常令人失望。专业算法要快得多。