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_Data Structures_Modular Arithmetic - Fatal编程技术网

Algorithm 整数在一个范围内的乘法

Algorithm 整数在一个范围内的乘法,algorithm,data-structures,modular-arithmetic,Algorithm,Data Structures,Modular Arithmetic,是一个最多包含105个整数的数组 我们必须以log(N)复杂度(其中,N=数组中的元素数)对此数组执行两种操作 操作1,给定v,i,j,我们必须把v加到A[k](i,因为看起来你必须访问范围内的所有元素[i,j],复杂性取决于该范围的线性大小,有可能j-i是N的顺序,你必须改变它们中的每一个。这使得任何算法都比O(N)快正如Paul所说,不可能。K不是问题的参数,它只是一个变量,因此Bidhan的答案中的log(K)毫无意义 现在,如果问题不是关于时间复杂性本身,而是关于大规模并行操作树的高度(

是一个最多包含105个整数的数组

我们必须以log(N)复杂度(其中,N=数组中的元素数)对此数组执行两种操作


操作1,给定v,i,j,我们必须把v加到A[k](i,因为看起来你必须访问范围内的所有元素
[i,j]
,复杂性取决于该范围的线性大小,

有可能j-i是N的顺序,你必须改变它们中的每一个。这使得任何算法都比O(N)快正如Paul所说,不可能。K不是问题的参数,它只是一个变量,因此Bidhan的答案中的log(K)毫无意义

现在,如果问题不是关于时间复杂性本身,而是关于大规模并行操作树的高度(例如,您在CUDA上所做的),那么,给定足够的线程,由于所有操作的独立性,您将在O(1)中执行操作1,而在O(log(N))中执行操作2通过乘以mod M对相邻元素(需要100000/2个线程),然后乘以对相邻结果等,直到得到答案


然而,这不是问题所在。除非进行大规模并行计算,否则无论您如何执行,每个操作的复杂性都是O(N)。

好的,第一个操作可以在log(K)中完成通过使用某些数据结构实现的复杂性,其中K是该范围的线性大小。第二种可能也可以使用数据结构技术在相同的复杂性下实现。然后找到一种不必访问所有元素的方法:P@DennisMeng-虽然我一定会这样做,但我不能这样做并不能证明这一点这是不可能的。@IVlad我实际上是在和Paul谈话,但我还想区分必须单独访问每个元素(这将导致线性时间最坏情况),以及能够使用一些处理来避免这样做。是的,您可以缓存
O(n^2)
(使用n~10^5)中的所有范围复杂性,然后在
O(1)
中运行上面的内容。我真的看不出这能绕过基本上是
O(n)的事实
问题。对于操作1,您真的是指
添加v
还是
乘以v
?对于
乘以v
,我的解决方案更容易调整。我仍然认为分段树是
O(log N)的可行选项
solution,但我不知道如何执行操作1。你用spoj标记了它,你能链接到spoj问题吗?@IVlad我还发现,对于乘以v,它可以通过段树或二元索引树来完成。这不是一个特定的spoj问题,但知道这个技巧将有助于我解决spoj的几个问题我也相信次线性是可能的。我还没有完全解决这些问题,但我愿意打赌,这将涉及(从
0
m-1
的整数,加法模
m
,乘法模
m
)形成一个字段的事实。“你必须改变它们中的每一个。”不遵循。即使比
O(N)
快也是不可能的(我对此深表怀疑),这不是一个证明。您不必更改它们中的每一个,存储关于它们已更改并且仍然能够回答Operation 2查询的某些信息就足够了。是的,正如Ivad所说,您不需要访问每个元素来计算答案。以及日志(K)对于具有段树知识的人来说,这非常有意义。