정수 목록의 두 제품을 비교합니까?


10

경계 정수의 양의 정수 목록이 두 개 있다고 가정하고 각 목록의 모든 요소의 곱을 가져옵니다. 어떤 제품이 더 큰지 결정하는 가장 좋은 방법은 무엇입니까?

물론 각 제품을 간단히 계산할 수는 있지만 제품의 자릿수가 용어 수에 따라 선형으로 증가하여 전체 계산이 2 차적이기 때문에보다 효율적인 접근 방식이 필요합니다.

곱하기 대신 추가하는 경우 첫 번째 목록에서 점진적으로 항목을 추가하고 두 번째 목록에서 빼는 "지퍼 링 전략"을 사용하여 (큰) 전체 합계를 계산할 필요가 없습니다. 제품에 대한 유사한 기술은 항목의 로그를 합산하는 것이지만 이제 문제는 로그를 계산할 때 부정확 한 산술을 사용해야한다는 것입니다. 수치 적 오류가 관련이 없음을 증명할 방법이 없다면?


우리가 최대 정수 값을 알고 있고 그것이 n과 독립적이라면 (즉, 상수 k), 1에서 k까지의 모든 숫자의 인자에 대한 룩업 테이블을 만들 수 있습니다. 이제 기본 [인수의 곱]으로 모든 것을 쓰면 그 기본과 선형 시간으로 제품을 계산 한 다음 한 자릿수가 다른 숫자보다 클 때까지 각 자릿수 (최고 순서 자릿수로 시작)를 차례로 비교할 수 있기 때문에 선형이된다고 생각합니다. 세부 사항은 약간 까다 롭지 만 k가 상 수면 작동해야한다고 생각합니다.
Phylliida

오히려 제품에 대한 유사한 기술은 합리적 숫자를 첫 번째 목록의 첫 번째 요소를 두 번째 요소의 첫 번째 요소로 나눈 값과 동일하게 유지하는 것입니다 (플러스 처리 초). 그러나 모든 숫자가 coprime이면 두 제품을 모두 계산하므로 실제로 도움이되지 않습니다. | 또한 순진한 알고리즘이 2 차인지 확실하지 않습니다. (A)의 생성물 컴퓨팅 N 크기의 정수 m은 걸릴 수 C ( m , m ) + C ( m , 2 m ) + . . . + C ( m , (0미디엄C ( X(미디엄,미디엄)+(미디엄,2미디엄)+...+(미디엄,(1)미디엄) x 비트 정수에 y 비트 정수를곱하는 비용입니다. 제품이 형식에 적합하다고 생각하지 않는 한C(x,y)xy
xavierm02


순진한 접근 방식의 개선 : 효율적인 동력 알고리즘을 사용하여 각 요인의 발생 횟수 (선형 시간)를 계산하고 마지막에 제품 만 계산합니다. 시간이 작동 이고, O ( NO(M(n)) 점근 빠른 방법을 사용하여 현재. O(nlogn2O(logn))
Emil Jeřábek

2
나는 로그에 필요한 정확도에 대해 생각할 것입니다. 실제로 더 효율적일 수 있습니다.
Emil Jeřábek

답변:


6

(입력 번호가 상수에 의해 제한되도록 문제에 대한 설명을 이해하므로 바운드에 대한 종속성을 추적하지 않습니다.)

이 문제는 로그의 합을 사용하여 선형 시간 및 로그 공간에서 해결할 수 있습니다. 더 자세하게 알고리즘은 다음과 같습니다.

  1. 이진 카운터를 사용하여 두 목록에서 가능한 각 입력 번호의 발생 횟수를 계산합니다.

이 걸리는 시간 및 카운터 공간 사용 O ( 로그 없음을 ) 각 카운터에 의해 제한 될 때, N 값.영형()영형(로그)

O ( 1 ) 아래의 소수라고 합시다 . 숫자 a 에 대한 각 카운터를 a 의 소인수에 분배 하고 (적절한 다중성으로) 다른 목록에서 한 목록의 수를 빼면 시간 O ( log n ) 에서 다음을 얻습니다 .1,,케이영형(1)영형(로그)

  1. 정수 O ( log n ) 비트로 계산하여 문제가 Λ : = k i = 1 β i log p i 의 부호를 결정하는 것과 같습니다 .β1,,β케이영형(로그)Λ: =나는=1케이β나는로그나는

  2. 경우 , 답 제품은 동일한 것이다.β1==β케이=0

그렇지 않으면 입니다. 에 의해 베이커의 정리 , 우리는 하한 수 | Λ | 특정 상수 C에 대해 > 2 - C log n . 따라서 다음은 Λ 의 부호를 올바르게 계산합니다 .Λ0

|Λ|>2로그
Λ
  1. 의 부호를 출력합니다 . 여기서 π ilog p i ~ m : = C log n + k + 1 비트 정확도 의 근사값입니다 .나는=1케이β나는π나는π나는로그나는미디엄: =로그+케이+1

을 2 개의 m- 비트 정수 의 곱셈 비용 이라고하자 . 현재 최고 한계는 M ( m ) =미디엄(미디엄)미디엄 , 여기서 우리는 사소한 O ( m 2 ) 곱셈 알고리즘을사용하더라도 큰 차이는 없습니다. 우리는 계산할 수 로그 P I를 에게 m의 시각 정밀도의 비트 O ( M ( m ) 로그 m ) 사용 AGM 반복 (예를 참조여기평가 후) 및 Σ 제가 β I π 나는 시간 소요 O를 ( M ( m )미디엄(미디엄)=영형(미디엄로그미디엄2영형(로그미디엄))영형(미디엄2)로그나는미디엄영형(미디엄(미디엄)로그미디엄)나는β나는π나는 . 전반적으로, 4 단계의 소요 시간 O ( M ( m ) 로그 m ) O ( 로그 N을영형(미디엄(미디엄)) .영형(미디엄(미디엄)로그미디엄)영형(로그영형와이(로그로그))

따라서, 알고리즘의 실행 시간은 제 1 단계의 에 의해 지배된다 .영형()


감사! 나중에 세부 사항을 검토해야하지만 이것은 매우 유망한 것 같습니다!
user168715
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.