【发布时间】:2012-10-25 06:41:42
【问题描述】:
我正在寻找一种算法来找到两个整数值x,y,以便它们的乘积尽可能接近给定的双精度值k,而它们的差异很小。
示例:矩形的面积是k=21.5,我想找到该矩形的边长,约束条件是它们必须是整数,在这种情况下,一些可能的解决方案是(不包括排列)(x=4,y=5),(x=3,y=7) 和愚蠢的解决方案(x=21,y=1)
事实上,(3,7) 夫妇和(21,1) 夫妇有相同的区别
21.5-3*7=0.5 = 21.5-21*1
对于(4,5) 夫妇
21.5-4*5=1.5
但是(4,5)这对夫妇更可取,因为他们的区别是1,所以矩形“更平方”。
有没有一种方法可以提取那些x,y 值的差异最小并且它们的乘积与 k 的差异也最小的方法?
【问题讨论】:
-
对于 33,你想要 3*11、5*6 还是 6*6?
-
取平方根并上下四舍五入怎么样?
-
由于
4,5比3,7更可取,尽管距离21.5 更远,所以您优先考虑最小化|x-y|而不是最小化|x*y - k|。所以最好的答案是x == y。那么剩下要解决的唯一问题是哪个平方数最接近k。正如尼莫所说,它将是k平方根的天花板或地板的平方。我怀疑实际上矩形“更方形”而不是“更准确”的重要性是有限度的,但你还没有描述你想如何解决两者之间的紧张关系。 -
@Lundin:他不能开始舍入或截断 k。如果 k 为 21.5,他事先并不知道 xy = 21 还是 xy = 22 会给出更好的解。如果他选错了,他会得到错误的答案。
-
您的问题没有明确定义。在找到乘积最接近 p 的 2 个整数 x,y 时,需要记住两个因素:我们必须考虑 x-y 和 p-xy。也许你可以想出一个公式之类的东西,假设 x,y 的质量是这样计算的: f(pxy)+g(xy) 其中 f,g 是两个函数 -> 那么你的问题将被很好地定义。