0

只需使用加法、减法和移位就可以将两个数字相乘。该过程的重要部分是找到此类操作的最小(最佳)序列。使用蛮力找到序列会导致难度呈指数增长,因此使用了各种启发式方法,也许最常见的是Robert Bernstein的论文乘以整数常数。

乘以 113 的示例,如Vincent Lefevre的乘以整数常数中所述:

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

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

4

1 回答 1

0

这确实是可能的。但是请注意,这个问题是 NP 难的。

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

基本上结果相当令人失望。专门的算法要快得多。

于 2016-05-22T21:08:39.793 回答