gpt4 book ai didi

java - 快速计算两个算术级数的交点

转载 作者:塔克拉玛干 更新时间:2023-11-03 05:35:04 26 4
gpt4 key购买 nike

进程A遵循以下规则:
每一个值都是所有奇数的总和,包括n个子i。
n第4小节。
1+3+5+7 = 16
进程B遵循这个规则。
取平方根乘以2加1的上限。从天花板弹齿本身减去N继续添加奇数。
N=33。
天花板(√33)=6.
6*2+1=13。
36-33=3。
3+13=16。
停止,因为16在进程A和B中。是否可以快速完成此操作?即最小的1步或2步解决方案?一个java或通用实现会很方便
*问题*
What is the output you desire? Simply abool saying they do meet? Or do you want the indices at which they do meet, i.e.A[4]=16 andB[17]=16? Or do you just want the number at which they meet, i.e.16? And what if they don't meet exactly? Do you want the indices (or number) before, or after, the intersection? Finally, when or how do you decide to halt, if, say, the two sequences will never meet? (I know in this case they do, but I mean in the general case.)
我期望的输出是值16,或者它可能是b找到的值,因为两者都是等价的,因为索引只是第i项。如果他们不见面,我意识到这是一个非终止程序。这种情况我不在乎。

最佳答案

我将在这里总结我的评论,以便新访客更容易理解。
正如其他人所指出的,序列A仅仅是一个正方形序列;正如OP通过他的评论所阐明的那样,序列B将是不断变化的。
重述OP的问题可能是
有没有比计算序列中的每个项更快的方法来确定递增序列中的第一个平方?
确实有。显而易见的想法是设计一种方法来“跳过”一些术语的计算,基于对平方增长率和序列的洞察。但是很难通过编程获得关于任意序列的信息。
一个更可靠的解决方案可能是将问题重新表述为找到以下最小零:

B(x) - x^2 = 0

因此,有可能存在“AA>”。如果不需要找到最小的零,那么就更简单了:实现任何根查找算法,观察算法收敛到零,添加 x^2来补偿重新计算,就可以得到它。
编辑
(评论框太小,无法回复您的评论。)
当我说“二等分”时,我实际上是指“二进制搜索”。这需要一个上限,所以并不真正适用于您的问题。
首先,让我提供一个简单的算法,尽管您可能已经考虑过这一点。
计算 B(1)。假设它是 1692(不是正方形)。
计算 B(2)假设它是 1707(不是正方形)。
计算 B(2)-B(1),称之为“增量”,例如 1707-1692,或 15。把这看作是对 B增长率的一个天真的估计。当然,这几乎是绝对错误的,但我们在这里的目标是以某种方式跳过术语。那是以后要优化的。
下一个大于 1707的正方形是什么?公式 (floor(sqrt(1707))+1)^2产生 1764
我们应该跳过多少个条件才能达到那个水平?另一个公式 (1764-1707)/15产生 3.8,我们可以将其舍入为 4
计算 B(2+4) = B(6)
如果小于 1764,则需要继续。但在这种情况下,你节省了计算3项的时间你到底是如何选择继续前进的,只是另一种选择您可以计算 B(7)并转到步骤3(将 B(7)-B(6)作为新的增量计算)您可以直接转到步骤3(将 (B(6)-B(2))/4作为新的增量进行计算)(如果不描述 B的可能函数,就不可能真正知道什么是最好的)
如果大于 1764,则需要返回。还有很多方法。二进制搜索实际上是一种简单、合理的方法。计算 B(4),因为它直接位于 B(2)B(6)之间如果小于 1764,请尝试 B(5)如果大于 1764,请尝试 B(3)。如果两者不匹配,则从 B(7)开始。使用二进制搜索,最多可以进行 log(N)计算。
听起来不错吧?你要么跳过一些计算,要么最多做 log(N)。(或者,你会找到更好的优化方法。)但是,很明显,这并不是那么简单,因为你要做额外的计算来找到这些三角形、投影、二进制搜索等等。因为正方形增长非常缓慢(正方形之间只有这么多整数),我觉得这样的算法只会胜过“线性搜索”(计算每个词)。如果你处理的是大整数,或者是非常复杂的 B序列(但是考虑到 B总是要增加,那么一个序列到底有多复杂?)关键是找到一个适合所有序列的特征,并通过找到一个特定的优化来利用它。
我仍然不知道你的应用程序是什么,但在这一点上,你不妨尝试一下,并在现实的数据集上对它进行基准测试(相对于线性搜索)这将立即告诉您是否有任何实际收益,以及是否应该在优化上投入更多时间它将比尝试做所有的理论计算,描述序列和其他东西更快。

关于java - 快速计算两个算术级数的交点,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14031995/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com