스트림에서 숫자를 받고 있다고 가정합니다. 각 숫자를받은 후에는 마지막 숫자 의 가중치 합계를 계산해야합니다. 여기서 가중치는 항상 동일하지만 임의적입니다.
계산에 도움이되는 데이터 구조를 유지할 수 있다면 얼마나 효율적으로 할 수 있습니까? 우리는 보다 더 잘 할 수 있습니까 ? 즉 숫자를받을 때마다 합계를 다시 계산할 수 있습니까?
예를 들어, 가중치가 이라고 가정하십시오 . 어느 시점에서 우리는 마지막 숫자 의 목록과 가중 합계 입니다.N L 1 = ⟨ , B , C , D ⟩ > S (1) = w (1) * + w 2 * B + w 3 * C + w 4 * 디
다른 숫자 가 수신되면 을 얻기 위해 목록을 업데이트하고 를 계산해야합니다 .L 2 = ⟨ B , C는 , (D)는 , E는 ⟩ S 2 =를 승 1 * B + w 2 * C + w 3 * D + w 4 * E
FFT를 사용한 고려 사항 이 문제의 특별한 경우는 고속 푸리에 변환을 사용하여 효율적으로 해결할 수있는 것으로 보입니다. 여기서 우리 는 N의 배수로 계량 합계 를 계산합니다 . 다시 말해, 우리는 N 개의 숫자를 수신 한 후에 만 해당하는 N 개의 가중치 합계를 계산할 수 있습니다 . 이를 위해서는 총 2N-1 숫자의 N-1 개의 과거 숫자 (이미 합계가 이미 계산 된 숫자 )와 N 개의 새 숫자가 필요 합니다.
입력 번호의 벡터 및 가중치 벡터 경우 다항식의 계수 정의 및 있는 계수, 반전하여 제품의 볼 인 x ^ {N-1} 앞에서 x ^ {2N-2} 까지 의 계수 가 정확히 우리가 찾는 가중 합인 다항식입니다 . 이는 \ Theta (N * \ log (N)) 시간에 FFT를 사용하여 계산할 수 있으며 , 이는 입력 번호 당 평균 Θ (\ log (N)) 시간을 제공합니다.
그러나 이것은 새로운 숫자를받을 때 마다 가중 합계를 효율적으로 계산해야하기 때문에 계산 된 문제를 해결할 수 없기 때문에 계산 이 지연 될 수 없습니다.