우리는 계산할 수


11

문제에 대한 효율적인 알고리즘을 찾고 있습니다.

입력 : 일부 정수 n 0에 대한 양의 정수 3n (비트로 저장 됨) .n0

출력 : 숫자 n .

질문 : 우리가 계산할 수 n 의 비트에서 3n 에서 O(n) 시간은?


이것은 수학에 대한 나의 대답 에 의해 동기 부여 된 이론적 질문입니다 .SE 질문 이 bijection에 대한 공식을 찾는 방법은 무엇입니까? . 이 질문에서, 저자는 및 자연수 N = { 1 , 2 , } 에서 bijection을 찾고자했습니다 . I 제안 2 m 3 N2 미터 ( 2 , N + 1 )

{2n3m:n0 and m0}
N={1,2,}
2m3n2m(2n+1)
해결책으로. 또 다른 대답은 "단순한 공식이 없다"고 주장하며, 제안 된 솔루션이 얼마나 간단하게 계산되는지 궁금해집니다.

내 제안 된 솔루션을 우리는 알고있는 경우 m , 우리는 쉽게 계산할 수 2 m ( 2 N + 1 ) (의 이진수 쓰기 N 다음을 다음에 m의 제로). 이것은 O ( n + m ) 시간 이 걸립니다 .nm2m(2n+1)n1mO(n+m)

m2m3n3nO(m)

nn3nO(n)O(n2)O(n2)

3


2
O(1)log23

3
downvoter가 downvote를 설명 할 수 있습니까? 전혀 사소한 질문처럼 보이지 않습니다. 합리적인 계산 모델에서 최고의 실행 시간은 얼마입니까?
Yuval Filmus

1
O(1)

질문
J.-E.

Ω(n)

답변:


9

확실한 접근 방식은 다음과 같습니다.

log2(3n)ϵO(log1ϵ)ϵ1/2

log2(3)O(logn)

(3) (1)에 대한 답을 (2)에 대한 답으로 나누고 가장 가까운 정수로 반올림합니다.

따라서 첫 번째 단계는 선형 시간 ( 단일 헤드 Turing 기계 와 같은 일부 전력이 공급되지 않는 컴퓨터의 경우는 아니지만 대부분의 계산 모델 )이 필요하고 나머지 단계는 다항식이어야합니다.


3
log2(3)tO(M(t)logt)M(t)O(tlogt2logt)t

참조 해 주셔서 감사합니다. 너무 게으르다 보니 죄송합니다.
David Eppstein

9

n>03nL=log2(3n)+1

L2log23nL1log23.
L13L
n=L1log23.

4

k3n3nmod10k3nmod5k35k3φ(5k)=5k1×4

따라서 이산 로그와 Hensel 리프팅을 사용하면 의 낮은 자리 에서 를 매우 효율적 으로 계산할 수 있어야한다고 생각합니다 . 다시 말해, 의 이산 로그를 기본 인 모듈로 로 가져 와서 의 낮은 자릿수에서 를 계산하여 시작합니다 . 이것은 시간 안에 수행 될 수 있습니다 . 그런 다음, 의 이산 로그를 기본 , modulo ; 이것은 과 같이 수행 할 수 있습니다nmodφ(5k)k3nnmod43n3nmod535nmod4O(1)3nmod25e25nmod20O(1) 시간 (의 지식을 활용 단지가 가능성은 당신이 시도해야합니다). 반복합니다. 각 단계에서, 당신의 지식을 사용하여 효율적의 이산 로그 계산하는 데 도움 에만 존재한다는 사실을 이용, 가능한 가지 값 .nmod45nmodφ(5k1)3nmod5kN 개조 φ ( 5 K )5nmodφ(5k)

이제 충분히 크게두면 이 나타납니다 .nkn

실행 시간이 인지 여부를 해결해야 하지만 그럴 수도 있습니다. 충분하다고 생각하고 시간에 총 반복 시간 동안 각 반복을 수행 할 수 있다고 생각합니다 .k = O ( n ) O ( 1 ) O ( n )O(n)k=O(n)O(1)O(n)

당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.