배열의 연속 된 하위 배열의 합계 수 계산


12

모든 과 함께 배열 이 제공 됩니다.a [ i ] > 0a[1n]a[i]>0

이제 우리는 서브 어레이 배열, 즉, 연속 된 범위이다 (그 서브 어레이로부터 형성 될 수 얼마나 많은 고유 합 찾아야 일부 , 합계 모두의 합은 하위 배열의 요소). 예를 들어, 이면 답은 4입니다. 를 구성 할 수 있습니다 .j , k a = [ 1 , 2 , 1 ] 1 , 2 , 3 , 4a[jk]j,ka=[1,2,1]1,2,3,4

시간 에 고유 한 합계 수를 계산하는 방법을 알고 있습니다.O(n2)

또한, 이것이 문자열의 별개의 하위 문자열 수를 찾아야하는 고전적인 문제와 유사하다는 것을 깨달았습니다. 접미사 배열을 구성하고 비슷한 방식으로 ( O(n) 시간으로) 해결할 가능성을 생각하고있었습니다 . 그러나 여기서 작동하도록 수정하는 방법을 알 수 없었습니다. 예를 들어, a = [1,2,1]에 접미사 배열을 사용하면 a=[1,2,1]수용 가능한 4 개의 케이스 대신 5 개의 케이스를 얻게됩니다. 접미사 배열을 사용 하여이 작업을 수행 할 수 있습니까? 아니면 잘못된 방향으로 생각하고 있습니까?

또한 내가 생각한 방향이 하나 더 있습니다. 나누고 정복하십시오. 마치 단일 요소로 축소 될 때까지 배열을 두 부분으로 나누는 것처럼. 단일 요소는 하나의 합계를 가질 수 있습니다. 이제 두 개의 단일 요소를 결합하면 두 가지 방법으로 수행 할 수 있습니다. 두 단일 범위에 동일한 요소가있는 경우 2 개의 다른 합을 얻거나 두 요소가 다른 경우 3 개의 다른 합을 얻습니다. 그러나 길이가 1보다 큰 배열을 병합하기 위해 이것을 일반화 할 수는 없습니다. 두 개의 m 크기 배열을 병합하고 O (m)로 답을 얻을 수 O(m)있습니까?


최대의 하위 배열 문제 의 구조는 설명하는 문제와 유사하며 에서 실행되는 분할 및 정복 솔루션이 있습니다. . O(n lg n)
Isaac Kleinman 1

다음 문제로 시작하는 것이 좋습니다. 같은 합계의 간격이 두 개인 지 여부를 결정하기가 어렵습니까? 이 문제의 3SUM 경도를 증명하고 싶지만 지금까지는 할 수 없었습니다.
Yuval Filmus

답변:


2

다른 합의 수가 수 있기 때문에 최악의 경우 보다 거의 나아질 수 없습니다 .Θ ( N 2 )O(n2)Θ(n2)

예를 들어 배열 . 여기서 각각의 연속 서브 어레이는 서로 다른 합을 갖습니다.n ( n + 1 )[1,2,4,8,,2n]n(n+1)2


"거의 확실하게"는 문제가 출력 값으로 합계 값을 필요로하지 않기 때문입니다. 그러나 적어도 대부분의 값을 결정하지 않으면 중복을 피할 수 있다고 생각하지 않습니다.


나는 정답을 제시하면서 모든 가능성을 극복하는 방법을 피해야 할 특별한 이유가 없다고 생각합니다. 동적 프로그래밍 알고리즘이 일상적으로 수행합니다.
Yuval Filmus
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.