다음 문제를 고려하십시오.
입력 : 길이 의 배열 와 두 개 ( 여기서 는 정렬 된 순서)
질의 : 않습니다 와 (자신의 다양성과) 같은 항목을 포함?
이 문제에 대한 가장 빠른 결정 론적 알고리즘 은 무엇입니까 ?
정렬하는 것보다 빠르게 해결할 수 있습니까? 이 문제를 결정적인 선형 시간으로 해결할 수 있습니까?
다음 문제를 고려하십시오.
입력 : 길이 의 배열 와 두 개 ( 여기서 는 정렬 된 순서)
질의 : 않습니다 와 (자신의 다양성과) 같은 항목을 포함?
이 문제에 대한 가장 빠른 결정 론적 알고리즘 은 무엇입니까 ?
정렬하는 것보다 빠르게 해결할 수 있습니까? 이 문제를 결정적인 선형 시간으로 해결할 수 있습니까?
답변:
계산 모델을 지정하지 않았으므로 비교 모델을 가정하겠습니다.
배열 가리 스트 { 1 , 2 } × { 3 , 4 } × ⋯ × { 2 n - 1 , 2 n } 에서 나오는 특별한 경우를 고려하십시오 . 즉, i 번째 요소는 2 i - 1 또는 2 i 입니다.
I는 항 알고리즘칩니다 경우 그 및 B는 알고리즘의 각 요소에 비해 것으로, 동일한 구성 요소를 포함하는 B를 그것의 대응에 . 실제로 알고리즘이 있다는 결론을한다고 가정 와 B가 같은 요소를 포함, 그러나 결코의 첫 번째 요소 비교 B를 에서의 대응에 . 첫 번째 요소를 바꾸면 답이 다르더라도 알고리즘은 정확히 같은 방식으로 진행됩니다. 이는 알고리즘이 첫 번째 요소 (및 다른 요소)를 A의 해당 요소와 비교해야 함을 보여줍니다 .
이는 와 B 가 동일한 요소를 포함 하는 경우이를 확인한 후 알고리즘이 A 의 정렬 순서를 알고 있음을 의미합니다 . 따라서 최소한 n 이 있어야합니다 ! 잎이 다르므로 시간 Ω ( n log n ) 이 걸립니다 .
이 답변은 다른 비용 계산 모델 인 단가 RAM 모델을 고려합니다. 이 모델에서 기계어의 크기는 이며 이들의 연산에는 O ( 1 ) 시간이 걸립니다. 우리는 또한 하나 개의 기계 단어의 각 배열 요소 맞는이 (그래서 대부분에 있음을 단순화를 위해 가정 N O ( 1 ) 크기에서).
우리는 선형 시간을 구성합니다 무작위 일방적 인 오류로 알고리즘을인지 두 배열을 결정하는 더 어려운 문제에 대한 (알고리즘은 그렇지 않은 경우에도 같은 요소를 포함하는 두 개의 배열을 선언 할 수 있음) 1 , ... , 을 n 과 b 1 , … , b n 은 같은 원소를 포함합니다. (우리는 그것들 중 어떤 것도 정렬 할 필요가 없다.) 우리의 알고리즘은 최대 1 / n 확률로 에러를 만든다 .
아이디어는 배열이 동일한 요소를 포함하는 경우 다음과 같은 동일성을 유지한다는 것입니다. 이 다항식을 계산하는 데는 너무 많은 시간이 걸립니다. 대신 랜덤 소수 p 와 랜덤 x 0을 선택 하고 n ∏ i = 1 ( x 0 − a i ) ≡ n ∏ 인지 테스트합니다.
결론적으로, 적어도 n 2 개의 다른 소수 집합과 임의의 x 0 모듈로 p 중 대략 n 2 크기 의 임의의 를 선택 하면 배열에 동일한 요소가 포함되어 있지 않으면 테스트가 실패합니다. 확률 1 - O ( 1 / n ) . p 는 일정한 수의 기계어에 적합 하므로 테스트를 실행하는 데 시간 O ( n ) 가 걸립니다 .
다항식 시간 소수성 테스트를 사용하여 크기의 소수의 밀도 이후 약 인 Ω ( 1 / 로그 N ) , 우리는 임의의 주요 선택할 수있는 페이지 시간 ( 로그 N ) O ( 1 )를 . 랜덤 x 0 모듈로 p를 선택하는 것은 다양한 방법으로 구현 될 수 있으며, 우리의 경우에는 완전히 균일 한 랜덤 x 0이 필요하지 않기 때문에 더 쉬워졌습니다 .
결론적으로, 알고리즘은 시간 에서 실행되며 배열에 동일한 요소가 포함되어 있으면 항상 YES를 출력하고 배열에 동일한 요소 가 포함되어 있지 않으면 확률 1 - O ( 1 / n )로 NO를 출력 합니다. 상수 C에 대해 오차 확률을 1 - O ( 1 / n C ) 로 향상시킬 수 있습니다 .
나는 다른 알고리즘 (또는 적어도 그러한 알고리즘의 계획)을 제안 할 것입니다
min
max
min
두 배열에서 모든 값에서 빼기 (여기서 하나의 배열이 이미 정렬 된 순서에 있다는 사실은 고려되지 않았으며, 이는 아마도 향상 될 수 있음)
max-min
참고 위의 알고리즘 방식은 많은 실제 상황에서 매우 빠른 (deterministicaly)이 될 수 있습니다.
위의 알고리즘 체계는 " 이동 질량 "을 사용하는 선형 시간 정렬 알고리즘의 변형입니다 . " 질량 이동 "정렬 알고리즘 의 실제 직관 은 다음과 같습니다.
각 항목의 값이 실제로 질량 크기를 나타내고 모든 항목을 한 줄로 정렬하고 동일한 가속력을 적용 한다고 가정합니다 .
그런 다음 각 항목은 질량과 관련된 거리, 더 적은 거리 및 그 반대로 이동합니다. 그런 다음 정렬 된 항목을 검색하려면 이동 한 거리별로 항목을 역순으로 수집하면됩니다.
이와 관련하여 위의 알고리즘은 숫자 기반 정렬 알고리즘과 유사합니다 (예 : 기수 정렬 , 개수 정렬 )
이 알고리즘은 그다지 의미가 없다고 생각할 수도 있지만 적어도 한 가지를 보여줍니다. 즉, " 기본 "은 물리적 수준에서 임의의 숫자 정렬은 항목 수의 선형 시간 연산입니다.