Algorithm 从一组双倍数中找出最小的比例因子,得到整数十分之一以内的每个数
假设我们有一套双打,类似这样:Algorithm 从一组双倍数中找出最小的比例因子,得到整数十分之一以内的每个数,algorithm,language-agnostic,math,Algorithm,Language Agnostic,Math,假设我们有一套双打,类似这样: 1.11, 1.60, 5.30, 4.10, 4.05, 4.90, 4.89 我们现在想找到最小的正整数比例因子x,s的任何元素乘以x都在整数的十分之一以内 对不起,如果这不是很清楚,请要求澄清,如果需要 请将答案限制为C语言或算法伪代码 谢谢 要回答Vlad修改过的问题(如果你想在乘法后得到精确的整数),答案是已知的。如果你的数字是有理数a1/b1,a2/b2,…,aN/bN,分数减少(ai和bi相对素数),那么你需要乘以的数字是b1,…,bN的最小公倍数
1.11, 1.60, 5.30, 4.10, 4.05, 4.90, 4.89
我们现在想找到最小的正整数比例因子x,s的任何元素乘以x都在整数的十分之一以内
对不起,如果这不是很清楚,请要求澄清,如果需要
请将答案限制为C语言或算法伪代码
谢谢 要回答Vlad修改过的问题(如果你想在乘法后得到精确的整数),答案是已知的。如果你的数字是有理数
a1/b1,a2/b2,…,aN/bN
,分数减少(ai
和bi
相对素数),那么你需要乘以的数字是b1,…,bN
的最小公倍数。这不是一个完整的答案,但有一些建议:
注:我用“s”表示比例因子,“x”表示双精度
首先,问问你自己,暴力是不是行不通。例如,尝试s=1,然后s=2,然后s=3,依此类推
我们有一个数字列表x[i],公差t=1/10。我们想找到最小的正整数s,这样对于每个x[i],有一个整数q[i],使得| s*x[i]-q[i]|此外,如果需要每个x的公差
a_1,…,a_n
和一个正实数epsilon
,你想找到整数P_1,…,P_n
和Q
,这样Q*a_j-P_j
,希望Q
越小越好
这是一个用已知算法研究得很好的问题。但是,您应该知道,找到Q
的最佳近似值是NP困难的,其中Q
是规范的另一部分。据我所知,这与您的问题无关,因为您有一个固定的ε
,并且想要最小的Q
,而不是相反
解决这个问题的一种算法是(Lenstra–Lenstra)–Lovász的晶格简化算法。我想知道我是否能为你找到什么好的推荐人。提及问题和算法,但可能没有直接帮助。Wikipedia对该算法有一个详细的描述,包括一个相当大的实现列表。比例因子不一定是整数或十的幂,对吗?对于上面的例子,你希望x的值是多少?顺便说一句,最小的正比例因子是零。“我们也应该考虑负面的吗?”弗拉德:对。没有那种真正的要求。在你的例子中,数字是100。。。