누락 된 요소 문제에 대한 시공간 균형


14

다음은 잘 알려진 문제입니다.

양의 정수 배열 가 주어지면 배열에 없는 가장 작은 양의 정수를 출력하십시오.A[1n]

문제는 공간 및 시간 에서 해결 될 수 있습니다 . 배열을 읽고, 1 , 2 , , n + 1이 발생 했는지 여부에 관계없이 O ( n ) 공간 에서 추적 상태를 유지 하고 가장 작은 요소를 스캔하십시오.O(n)O(n)1,2,,n+1

나는 당신이 시간을 위해 공간을 거래 할 수 있음을 알아 차 렸습니다. O 가있는 경우 ( n메모리에만k라운드로할 수 있으며시간O(kn)를얻을 수 있습니다. 특별한 경우, 분명히 일정한 공간 2 차 시간 알고리즘이 있습니다.O(nk)kO(kn)

내 질문은 :

이것이 최적의 트레이드 오프입니까, 즉 입니까? 일반적으로 그러한 유형의 경계를 어떻게 증명합니까?timespace=Ω(n2)

O (1)의 배열에 대한 제한된 산술 및 임의 액세스를 갖는 RAM 모델을 가정합니다.

이 문제에 대한 영감 : 단일 테이프 모델에서 회문에 대한 시공간 절충 (예 : 여기 참조 ).


2
아니요, 배열을 로 정렬 한 다음 누락 된 숫자 (첫 번째 숫자는 1이어야하고 두 번째는 2이어야합니다 ... 그렇지 않으면 찾을 것입니다)를 O (n)에서 찾을 수 있습니다.이 정렬을 수행 할 수 있습니다 인플레 이스 머지 소트 수단으로 O ( 1 ) 시간이되도록 여분의 공간 공간에 속하는 O ( N 로그 N ) . 나는 당신의 문제를 정확히 알았는지 알지 못합니다 (이 때문에 나는 대답하지 않았고 더 나은 범위가 있는지 모르겠습니다). O(nlogn)O(1)O(nlogn)

입력이 읽기 전용이라고 가정합니다. 그렇지 않은 경우 시간 / O ( 1 ) 공간 에서 문제를 최적으로 해결할 수 있습니다 . 입력에 2를 곱하고 패리티를 사용하여 O ( n ) / O ( n ) 알고리즘 을 시뮬레이션하십시오.O(n)O(1)O(n)/O(n)
sdcvvc

불변 공간 알고리즘은 무엇입니까? 나에게 "명백한" n 2 버전을 위한 공간 이 필요할 것 같다lognn2
Xodarap

이 모델에서 단어 크기 정수는 취합니다 . 더 편리한 경우 시간 space = Ω ( n 2O(1)상수k에대해 log k n ). timespace=Ω(n2logkn)k
sdcvvc

@ sdcvvc, 알고리즘을 이해할 수 없습니다 . 조금 더 설명해 주시겠습니까? (비트로 읽으려면 O ( log n )가 필요합니다 ). O(n)/O(1)O(logn)

답변:


2

이것은 O(nlogn) 워드 연산과 O(1) 메모리의 단어 (각각O(nlog2n) 시간을O(logn) 비트 레벨 RAM 모델 메모리). 실제로 솔루션은 다음 관찰을 기반으로합니다.

[ 1 , n + 1 ] 범위에 n0 짝수 및 n1 홀수 가 있다고 가정하십시오 (따라서 n 0n 1n 0 + n 1 = n + 1 ). 그러면 b [1,n+1]n0n1n0+n1=n+1b{0,1} 이 입력에패리티 b 가있는 최대nb1 값이있습니다. 실제로, 그렇지 않으면 적어도 n 0이 존재한다bn0입력에 짝수 및 적어도 n1 홀수 값이 있습니다. 즉, 입력에 적어도 n0+n1=n+1 값이 모순됨을 의미합니다 (모두 n 개만 있음 ). 홀수 또는 짝수 중 누락 된 숫자 만 계속 검색 할 수 있습니다. 더 높은 비트의 이진 표기법에도 동일한 알고리즘을 적용 할 수 있습니다.

따라서 알고리즘은 다음과 같습니다.

  1. 이제 있다는 것을 이미 우리 가정 x 나머지 모듈과 상기 입력의 값을 2b 에 동일하고 r[0,2b) 그러나 최소한 존재 x+1 범위의 숫자 [1,n+1] 이 그 나머지 r 모듈로 2b (시작에서 우리는 b=0,r=0 임을 확실히 알고 있습니다 ).

  2. 말 존재 x0 잉여와 상기 입력의 값 r 모듈 2b+1x1 나머지와 입력의 값 r+2b 모듈 2b+1 (우리는 입력을 통한 단일 패스에서 이러한 번호를 찾을 수 있음). 분명히 x0+x1=x 입니다. 또한, 나머지 r modulo 2 b 인 입력에 x+1 이상의 숫자가 있으므로 , 쌍 중 하나 이상r2b(r,b+1),(r+2b,b+1)1 단계의 요구 사항을 충족합니다.

  3. 우리는 2bn+1 때 누락 된 숫자를 찾았습니다 . [1,n+1] 범위에 하나의 숫자 만 남아 나머지 r modulo 2b ( 범위에있는 경우 r 자체)를 가질 수 있으므로 그러한 나머지를 가진 입력에서 대부분의 0 값. 따라서 r 은 실제로 누락되었습니다.

분명히, 알고리즘은 O(logn) 단계로 정지되며 , 각각 O(n) 시간이 필요합니다 ( 입력 배열을 통한 단일 패스). 또한, 메모리의 O(1) 워드 만 필요합니다.


나는 그 시간 이후에 질문에 대한 답변을
드리겠습니다

1

정의를 이해하면 일정한 공간을 가진 선형 시간 으로이 작업을 수행 할 수 있습니다. 적어도 전체 입력을 읽어야하기 때문에 이것은 가장 낮은 경계입니다.

이 질문에 주어진 답 만족합니다.

더 적은 시간이나 공간으로 이것을 실행하는 것은 불가능하며, 여분의 시간이나 공간을 추가하는 것은 쓸모가 없으므로 여기에는 시공간 상충 관계가 없습니다. ( 지키십시오 . 따라서 관찰 된 트레이드 오프는 어떤 경우에도 무의식적으로 유지되지 않습니다.)n=O(n/k)

일반적인 질문의 관점에서, 나는 당신이 시공간 타협점을 증명하는 데 도움이 될 좋은 정리를 모릅니다. 이 질문 은 (알려진) 쉬운 대답이 없음을 나타냅니다. 원래:

tsf,gLMf(t,s)g(t,s)

알 수 없으며, 강력한 답변은 많은 공개 문제 (주로 SC에 관한)를 해결하여 쉬운 해결책이 없음을 암시합니다.


nn+1

nkn/kk=n/snn/sn=sn time. So I think this proves what you want.

The difficulty is in showing that each time through we get only k bits. If you assume that our only legal operation is =, then we're good. However, if you allow more complex operations, then you'll be able to get more information.


3
The question you linked assumes that each number appears at most once. I do not make this assumption, so the solution does not apply. Thank you for second link.
sdcvvc

@sdcvvc: My mistake, I assumed you were using the version I'm familiar with. I don't have a complete answer, but it's too long for a comment - hopefully my edit is useful.
Xodarap

5
I don't buy your argument after "EDIT". Even if you can only collect k bits in a single pass, that's enough in principle to distinguish 2k possible outputs. So this argument can only imply a lower bound of n/2k passes, not n/k.
JeffE
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.