Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/algorithm/11.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Algorithm 从一组双倍数中找出最小的比例因子,得到整数十分之一以内的每个数_Algorithm_Language Agnostic_Math - Fatal编程技术网

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[i]生成一个有序列表,那么合并这些元素以找到适用于所有元素的最小s就足够简单了。其次,注意答案只取决于x[i]的分数部分

重新安排上面的测试,我们有| x-q/s | 不幸的是,这并不是你所需要的,因为一旦你达到了你的容忍度,你不一定需要继续变得越来越好——同样的容忍度也会起作用。下一个明显的事情是使用这个来跳到第一个可行的数字,然后从那里开始使用蛮力。不幸的是,对于任何数字,第一个s的最大值都是5,所以这并不能给你们买那么多。然而,这种方法会找到一个有效的方法,而不是最小的方法。如果存在的话,我们能用这个来找到一个更小的吗?我不知道,但这会给暴力行为设定一个上限


此外,如果需要每个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。。。