如何使用最少的基本算术运算(add,sub,mult,div)以尽可能最佳的单位数整数计算任意整数?
0-9的数字有0成本。 其他数字必须使用基本操作从它们构建。
实施例: 25从5 * 5
构建123可以通过许多不同的方式建立,但最优的是5 * 5 * 5-2。
起初我想通过动态编程来解决这个问题,但是我不能通过引入乘法来解决它,我不认为这对于大数字来说是实用的。 但如果是,请告诉我该怎么做。
如果有人能引导我找到类似于此的正确问题,我将不胜感激。
答案 0 :(得分:0)
在阅读@JustKevin回答并重新思考问题后,我发现启发式对我来说可能已经足够了。
它基于动态程序并找到最短操作序列的长度以实现数字,但可以很容易地修改以创建该序列。
(如果有人可以修改格式,请,因为我正在通过手机写作而且它对我来说很奇怪)
所以:
数组M
为所有未设置的参数返回无穷大,而函数c(i,x)
描述将i转换为x的开销。 N是目标号码。
M[0..9]=0
c(i,x) =
min(
if x==i then 0,
if x>i then M[x-i] + 1, //addition
if x<i then M[-x+i] + 1, //subtraction
min( for y=2,9 yield c(i*y,x) + 1 end) //multiplication
)
for x=10,N do
for i=1,x-1 do
M[x]= min(M[x], M[i]+c(i, x)
end
end
答案在M[N]
。
如果您发现可能的错误,请通知我。