Algorithm 为什么这个嵌套循环的内存流量是N(N+1)而不是N^2?

Algorithm 为什么这个嵌套循环的内存流量是N(N+1)而不是N^2?,algorithm,memory,optimization,hardware,Algorithm,Memory,Optimization,Hardware,今天下午早些时候,我读了一本关于内存访问优化技术的教科书,比如展开和卡住,这本书提供了一个在优化之前考虑的例子: do i=1,N do j=1,N sum = sum + foo(A(i),B(j)) enddo enddo 看到这一点,我立刻想到的是内存流量应该是N^2。但是,代码后面的说明说明了总内存流量实际上是NN+1。为什么会这样 我的最佳猜测基本上是这样的:NN+1=N^2+N。N^2来自于加载所有大小为N的数组B,由于外循环,总共加载了N次,而N来自于加载所有大小

今天下午早些时候,我读了一本关于内存访问优化技术的教科书,比如展开和卡住,这本书提供了一个在优化之前考虑的例子:

do i=1,N
  do j=1,N
    sum = sum + foo(A(i),B(j))
  enddo
enddo
看到这一点,我立刻想到的是内存流量应该是N^2。但是,代码后面的说明说明了总内存流量实际上是NN+1。为什么会这样

我的最佳猜测基本上是这样的:NN+1=N^2+N。N^2来自于加载所有大小为N的数组B,由于外循环,总共加载了N次,而N来自于加载所有大小为N的数组a,当外循环运行到完成一次时,正好加载了1次


准确吗?或者加载foo的签名,或者读/写变量sum,或者其他我不认为会导致+1项的鬼鬼祟祟的事情,可能会发生吗?我知道这是一个相对简单的这类问题,但我想确保在进入更难的问题之前,我以正确的方式思考这类问题。

NN+1是指ONN+1吗?在这两种情况下,该算法的复杂度都是^2,不确定,但我认为不管N,最里面的函数在每次执行第二个循环时执行一次+最后一个对foo求和的操作。这就是为什么我们要添加一个,试着用决策树模型来思考。@TomerZ-事实上,我认为这也可能让我困惑。我非常习惯算法的复杂性,可能是因为太习惯了,所以我立即看到两次嵌套for循环,并假设它必须在^2上。我同意内存流量必须在^2上,但这本书确实特别指定了NN+1=\