Algorithm 添加4个最接近Pi的术语

Algorithm 添加4个最接近Pi的术语,algorithm,math,pi,Algorithm,Math,Pi,我有以下数学和编程问题: 我有一份大约14000件物品的清单。我必须选择4个项目,以便 a+b+c+d-pi=最小误差 放弃所有选项将花费太长的时间。 我应该构建一个程序,我正在用一个python脚本来解决这个问题 有什么想法吗 编辑:如果有帮助,项目为ek/10000-1 对于0到大约14400之间的每一个k,您可以对项目列表进行排序,这需要登录时间。然后,给定a+b+c,您可以使用二进制搜索找到最佳的d 您也可以根据数据,通过检查任何步骤的部分和是否太大或太小,从而有机会成为正确的解决方案,

我有以下数学和编程问题: 我有一份大约14000件物品的清单。我必须选择4个项目,以便 a+b+c+d-pi=最小误差

放弃所有选项将花费太长的时间。 我应该构建一个程序,我正在用一个python脚本来解决这个问题

有什么想法吗

编辑:如果有帮助,项目为ek/10000-1
对于0到大约14400之间的每一个k,您可以对项目列表进行排序,这需要登录时间。然后,给定a+b+c,您可以使用二进制搜索找到最佳的d

您也可以根据数据,通过检查任何步骤的部分和是否太大或太小,从而有机会成为正确的解决方案,来切割搜索树


通过采取这两个步骤,您应该能够大幅减少运行时间。

我建议您在以下设置中使用遗传算法:

染色体:[a,b,c,d]

适应度函数:| f10000a+f10000b+f10000c+f10000d-π|

交叉线Ch1,Ch2:Xover[a,b,c,d],[a',b',c',d']->[a,b,c',d'],[a',b',c,d]*

突变Ch:突变[a,b,c,d]->[a,b',c,d]**

这个问题对于遗传算法来说非常容易解决,如果你实现它,你会发现它在短时间内解决了这个问题。 *随机选择交叉点

**用一个可能的点替换随机选择的染色体中的一个基因

请注意,在这篇文章中,我只是给出了关键点,但是如果您对GA一点都不熟悉,您可以阅读整个主题,我将帮助您了解更多细节。

这是固定子集大小的一种变体。您正面临优化问题。 存在性解决方案是:线程中详细讨论了与pi精确求和的子集:

在您的问题中,优化问题-如果您可以重复一个元素不止一次-很容易在On2log中解决,On2额外空间如下:

创建一个大小为On2的数组,其中包含所有可能的对和。就这样吧。 排序arr-在^2logn上 对于arr的每个元素e,在arr中进行二进制搜索,以查找最接近pi-e的元素。 得出在步骤3中获得最佳结果的两对。
第3步的复杂度是每次迭代的Ologn和n2次迭代,以此类推^2logn总计。

到目前为止,您尝试了哪些算法?项目是独立的还是它们之间存在某种关系?我尝试使用4个循环来检查所有可能的组合,虽然这是不现实的,但复杂性在^4上,需要几年才能完成,我对思想持开放态度,因为这是限制子集和的一种变化。如果你可以多次选择一个数字,它很容易在^2日志中解决这是我喜欢遗传算法,但我没有你那么自信,这是一个很好的使用它们。你的交叉可能有效,但变异很可能会降低适应性。我们有很多关于这个问题的信息,这些信息在你选择染色体时没有表现出来,这导致了一个人工膨胀的搜索空间[a,b,c,d]=[b,a,c,d]和其他排列。我们也可以简单地解决一部分问题-使用GAs对数组进行排序并只在染色体中存储三个数字几乎总是一个好主意,使用二进制搜索查找第四个。@示例:我同意您关于此设置质量的看法,但我真的不知道他/她对GA了解多少,显然,在他/她请求更多或至少我得到反馈之前,我应该尽可能地简化解决方案。顺便说一句,关于在基因型中表示领域知识,我同意你的观点,这不是最好的选择,我说了原因,但你可能知道基因型不是使用领域知识的唯一地方,特别是,你可以在适应度函数中利用这些知识。所有这些+确保内部循环只在后面的索引上运行,如int i=0;这将导致立方运行时太慢,无法解决此问题。如果允许元素重复,它将位于^3 logn上,这确实比子集和解决方案慢。@riklund您可以根据允许重复和不允许重复的情况调整这两种算法,并获得相同的运行时:是否可以证明这是子集和问题的一个变种?或者至少给出这样一个证明?@mok我想amit的意思是它是子集的一个实例sum@NiklasB:有一个微妙的区别,问题是fa+fb+…-pi应该最小化,所以显然有一些相似之处,但是这个小的差异可能会导致巨大的差异,如果没有这样的差异,那么应该加以证明。@mok优化问题子集和要求您最小化子集的太阳和给定值之间的差异。不完全是这个,但已经够近了。这肯定是个背包,但那个太多了
更多general@NiklasB可以肯定的是,这根本不是一个证据,或者说是一个很接近的证据,至少我没有这样证明。看[6+75+89+226]确实离pi很远,但f2006+f20075+f20089+f200226是离pi最近的一组!我在某种程度上同意你所说的背包。我们可以把它看作是一个具有PI能力的背包。