시간 및 공간 에서 특정 수 결정 (최악의 경우)


10

감안할 A[1..n] 정수가되도록 0A[k]m 모두 1kn , 각각의 발생 A [1 \ ldotd n] 에서 특정 숫자를 제외한 숫자 A[1..n]는 홀수입니다. 발생 수가 짝수 인 숫자를 찾으십시오.

있다 Θ(nlogn) 알고리즘 : 우리 정렬 A[1..n]B[1..n] 및 브레이크 B[1..n] 요소의 값 많은 조각으로 따라서 각 요소의 발생 횟수를 계산할 수 있습니다.

최악의 경우 O(n) -time-and- O(n) -공간 알고리즘 을 찾고 싶습니다 .

m=Ω(n1+ϵ)\ epsilon> 0 이라고 가정하면 ϵ>0기수 정렬은 허용되지 않습니다. 이진 비트 단위 연산은 허용됩니다 (예 : A[1]xorA[2] .


아래 Aryabhata의 답변에 따르면 일반적인 경우는 좋지 않지만 추가 제한 사항이 있습니까? 간단한 (그러나 큰) 제한은 배열의 모든 항목의 크기 가 O (n) 이되도록 강제하는 것 O(n)입니다. 이것은 아주 간단한 선형 알고리즘을 제공합니다.
Luke Mathieson

1
@ LukeMathieson : 내가 인용 한 종이 가 수정없이 작동 할 것이라고 확신하지 못했기 때문에 그 대답을 삭제했으며 , OP는 균일 한 비용 RAM 모델에만 관심이있는 것으로 보입니다.
Aryabhata

@ Aryabhata : hehe, 그럼 거기에없는 대답! 흥미롭고 Frank에게도 유용하다고 생각한 결과 논문의 결과를 수정하는 데 어떤 문제가 있다고 생각 했습니까? 빠른 탈지가 적용을 제안했지만 분명히 읽지 않았습니다.
Luke Mathieson

@LukeMathieson : 다른 요소가 현재 문제에서 홀수 번 나타나야한다는 사실. 이후, 나는 ... 너무 증거를 통해 미끄러 져
아리 아바타

이론적 결과 나 실제 솔루션에 관심이 있다면 흥미로울 것입니다. 이론적 인 관점에서, 첫 번째 빠른 응답은 보다 빠른 정수 목록을 정렬 할 있다는 것 입니다. Han의 시간에 실행 되는 결정 론적 알고리즘 이 있습니다 . 무작위 알고리즘의 경우 더 나은 결과가 알려져 있습니다. 예를 들어 Han 및 Thorup은 예상 시간 알고리즘 을 찾았습니다 . 그러나 귀하의 문제는 정렬이 필요하지 않다고 생각합니다. O ( log log n ) O ( n O(nlogn)O(loglogn)O(nloglogn)
A.Schulz

답변:


2

다음은 간단한 알고리즘에 대한 아이디어입니다. 모든 사건을 세어보세요!

  1. 찾으십시오 . -시간m=maxAΘ(n)
  2. "할당"배열 . -시간 ¹O ( 1 )C[0..m]O(1)
  3. 를 찾을 때마다 반복하고 를 1 씩 증가시킵니다 . 경우 이었다 , 추가 선형리스트에 . -시간C [ x ] A [ _ ] = x C [ x ] 0 x L Θ ( n )AC[x]A[_]=xC[x]0xLΘ(n)
  4. 반복 하고 와 함께 요소를 찾습니다 . -시간 .x e C [ x e ] O ( n )LxeC[xe]O(n)
  5. 반환 .xe

결국 이것은 많은 메모리를 (할당하는 의미로) 사용할 수있는 선형 시간 알고리즘을 제공합니다. 독립적으로 일정한 시간에 에 랜덤 액세스 할 수있는 것이 중요합니다.mCm

우주에 바운드 된 추가적인 은이 접근법으로 더 어렵다. 시간 조회 를 제공하는 사전 데이터 구조를 모르겠습니다 . 여기에 예상 조회 시간 ( 테이블의 크기, 저장된 요소 수) 으로 구현 된 해시 테이블을 사용할 수 있으므로 선형 공간에서 임의로 좋은 결과를 얻을 수 있습니다. 모든 값 이 동일한 해시 값에 매핑되면 문제가 해결 된 것입니다.O ( 1 ) O ( 1 + K / N ) N KO(n)O(1)O(1+k/n) nkA


  1. RAM에서는 암시 적으로 수행됩니다. 시작 위치와 끝 위치 만 있으면됩니다.

0

그러나 공간 을 사용하는 거의 사소한 솔루션 은 해시 맵을 사용하는 것입니다. 해시 맵은 요소를 추가하고 찾아보기 위해 런타임 을 상각했음을 상기하십시오 .O ( 1 )Θ(n)O(1)

따라서 다음 알고리즘을 사용할 수 있습니다.

  1. 해시 맵 할당하십시오 . 반복 . 각 요소 에 대해 발생 횟수를 증가시킵니다 예 : .A i A H ( i ) + +HAiAH(i)++

  2. 해시 맵의 키 세트를 반복하고, 짝수의 발생 횟수를 가진 키를 확인하십시오.

이제 이것은 실제로 큰 트릭을 사용하지 않는 간단한 알고리즘이지만 때로는 충분합니다. 그렇지 않은 경우 어떤 공간 제한을 적용할지 지정할 수 있습니다.


다항식 공간을 사용 하는 비 랜덤 화 시간 알고리즘 이 있는지 알고 싶습니다 . 특히, 유일한 짝수 항목을 찾는 것이 유일한 홀수 항목을 찾는 것보다 어렵다는 이론적 증거가 있습니까? O(n)
A.Schulz

@ A.Schulz 해시 테이블을 사용하여 - 예상 시간 알고리즘 이라고 생각 합니다. 누군가가 스택과 함께 알고리즘 (또는 특별한 경우, odd = 1 및 even = 2)을 말했지만 기억할 수는 없습니다. O ( n )O(n)O(n)
Yai0Phah

모든 해시 테이블 구현에이 속성이있는 것은 아닙니다. 일반적으로 조회는 이 아니며 상각되지도 않습니다 (afaik). 실제로, 이전의 논의 는 일정한 시간 조회를 갖는 구현을 산출하지 않았다. 더 자세하게 얘기해 주 시겠어요? O(1)
라파엘
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.