Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/apache-kafka/3.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_Math_Sum_Discrete Mathematics - Fatal编程技术网

Algorithm 楼层求和算法

Algorithm 楼层求和算法,algorithm,math,sum,discrete-mathematics,Algorithm,Math,Sum,Discrete Mathematics,有没有一种快速算法可以计算 ??p、 q,k,l,A和B是整数。所谓“快”,我的意思是它应该比简单的O(B-a)循环快得多 相关的: 如果我们设置k=0,则有一个O(log(p)+log(q))算法可以解决这个问题。这里是时间O(q)的解决方案。(我假设p和q是相对素数,否则你应该先减少分数) 对于[A,A+q)范围内的每个整数r,可以确定 floor [p*(A+r)/q + k/l] 设为n(r),然后你可以将你的和重新表示为 sum_{r=0}^{q} sum_{y=0}^{y_max

有没有一种快速算法可以计算

??p、 q,k,l,A和B是整数。所谓“快”,我的意思是它应该比简单的O(B-a)循环快得多

相关的:
如果我们设置k=0,则有一个O(log(p)+log(q))算法可以解决这个问题。

这里是时间O(q)的解决方案。(我假设p和q是相对素数,否则你应该先减少分数)

对于[A,A+q)范围内的每个整数r,可以确定

floor [p*(A+r)/q + k/l]
设为n(r),然后你可以将你的和重新表示为

sum_{r=0}^{q} sum_{y=0}^{y_max(r)} (n(r)+p*y),
在哪里


现在,每个内部和都可以在O(1)中计算,因为它是完全显式的,所以得到O(q)总的来说。

因此,尽管
p
q
是整数,但您不需要整数除法?如果因子
p/q
k/l
是常量,那么在大O表示法中使用它们几乎没有意义。您要求的复杂性没有意义:您正在添加N个元素N=B-A;p,q,k,l不会影响计算最终和所采取的步骤数,因此不影响复杂性。也许你想要的是比公式给出的O(n)更好的东西。@Ivaylo Strandjev:有一个楼层函数阻止你这样做that@M欧姆,潘德雷:O(B-A)必须避免。复杂性来自于一个相关的算法,该算法在k=0时解决问题——该算法的复杂性为O(log(p)+log(q))。我编辑了这个问题陈述,因为它让很多人感到困惑。谢谢!但是,我仍然在寻找一些可以处理10^12.p,q,k,l,a,B或它们的任意组合的算法:)
y_max(r) = floor[ (B-A)/q ]