Python 两两求和的运行时复杂性是多少?

Python 两两求和的运行时复杂性是多少?,python,algorithm,numpy,data-structures,big-o,Python,Algorithm,Numpy,Data Structures,Big O,我认为这是计算总和的默认算法(这也得到了numpy github存储库的一位专家的确认) 因此,对于下面这样的代码片段: data = np.ones((1000,1000)) sum = np.sum(data) print(sum) 两两求和的运行时复杂性是多少?由于它遵循一种类似于“分而治之”的贪婪方法,因此它必须在“对数”范围内,但我不确定确切的等式。成对求和执行与原始求和完全相同的加法次数 但是,如果你把浮点数相加,那么简单的求和最终会在接近尾端的大数和小数相加。这会导致接近尾端的

我认为这是计算总和的默认算法(这也得到了numpy github存储库的一位专家的确认)

因此,对于下面这样的代码片段:

data = np.ones((1000,1000))
sum = np.sum(data)

print(sum)

两两求和的运行时复杂性是多少?由于它遵循一种类似于“分而治之”的贪婪方法,因此它必须在“对数”范围内,但我不确定确切的等式。

成对求和执行与原始求和完全相同的加法次数

但是,如果你把浮点数相加,那么简单的求和最终会在接近尾端的大数和小数相加。这会导致接近尾端的数字出现较大的舍入误差


因此,两两求和是首选。两两求和与原始求和执行的加法数完全相同

但是,如果你把浮点数相加,那么简单的求和最终会在接近尾端的大数和小数相加。这会导致接近尾端的数字出现较大的舍入误差


因此,两两求和是首选。

您链接到的维基百科文章说,“两两求和是NumPy[4]和Julia技术计算语言[5]中的默认求和算法,在这两种情况下,它的速度与朴素求和相当(由于使用了大的基本情况)。”仍然需要Ω(n)的时间才能将任意数相加
n
。两两相加只是以可预测的方式管理舍入误差。如果NumPy的实现是有效的,那么复杂性将是Θ(n)。获得次线性复杂性的唯一方法是利用正在求和的数据的某些特殊属性。(例如,您可以使用公式
sum(1..n)=n(n+1)/2在O(1)时间内将数字1添加到
n
)分治本身不提供任何加速;这只是组织子问题的一种方式。由于分而治之,快速排序并不快;它的速度很快,因为每个子阵列都可以在适当的位置进行排序。二进制搜索速度很快,因为实际上只解决了其中一个子问题。您链接到的维基百科文章说,“成对求和是NumPy[4]和Julia技术计算语言[5]中的默认求和算法,在这两种情况下,它的速度都与朴素求和相当(由于使用了一个大的基本情况)“仍然需要Ω(n)的时间来计算任意数。两两相加只是以可预测的方式管理舍入误差。如果NumPy的实现是有效的,那么复杂性将是Θ(n)。获得次线性复杂性的唯一方法是利用正在求和的数据的某些特殊属性。(例如,您可以使用公式
sum(1..n)=n(n+1)/2在O(1)时间内将数字1添加到
n
)分治本身不提供任何加速;这只是组织子问题的一种方式。由于分而治之,快速排序并不快;它的速度很快,因为每个子阵列都可以在适当的位置进行排序。二进制搜索速度很快,因为实际上只解决了其中一个子问题。