4
이것은 내 previous question의 후속 조치입니다. I는스칼라에서 구현 한 부분 합계를 수정하는 방법은 무엇입니까?
, 나는 다음과 같이 s1, s1 + s2, s1 + s2 + s3, ...
내가 그것을 구현하는 새로운 스트림을 스트림 s = s1, s2, s3, ...
수신 및 생산 기능 partial_sums
을 작성하려합니다 (다만 운동 등) 혼자 s.scanLeft(0)(_ + _)
을 구현하고 싶습니다 :
def add_streams(s1:Stream[Int], s2:Stream[Int]) = (s1 zip s2) map {case (x, y) => x + y} def partial_sums(s:Stream[Int]):Stream[Int] = Stream.cons(s.head, add_streams(partial_sums(s), s.tail))
이 코드는 정상적으로 작동합니다. 그러나 partial_sums
의 n 번째 요소를 가져 오는 데 O (n)이 필요합니다. (즉, s [1] + s [2] + s [3] ... + s [n]). partial_sums[n] = partial_sums[n-1] + s[n]
을 코딩하고 싶습니다. O (1)을 사용하여 n 번째 요소를 계산합니다.
맞습니까? 코드를 어떻게 수정하겠습니까?
당신이 '에게의를 찾으셨습니까 오히려 대량으로 스트림을 추가하는 대신, 실행중인 총을 유지하는 것입니다 : 스트림 [지능]'I /'O S : String'? – Michael
빈 스트림에도 작동합니까? – Michael
수정했습니다. 감사. –