숫자와 같은 이항 계수를 찾는 복잡성


19

이진수 인코딩에서 비트를 사용하여 숫자 얻는다고 가정하십시오 .O ( 로그 m )mO(logm)

얼마나 빨리 찾기 (또는 존재하지 않는 결정) 할 수

n,kN,1<kn2:(nk)=m
?

예를 들어, 입력 m = 8436285가 주어지면, n = 27, k = 10을m=8436285 출력 할 수 있습니다 .n=27,k=10


문제에 대한 순진한 알고리즘은 n의 가능한 모든 값을 검토 하고 속성을 만족시키는 kn 값을 검색 합니다.k

간단한 관찰 필요 값이 확인 없음이다 n 보다 작은 logm 또는보다 큰 O(m) . 그러나 ( n 값 당 O(1) 가능한 k 값만 확인할 수 있더라도 ) 이것은 입력 크기에서 지수적인 비효율적 인 알고리즘으로 끝납니다.n

다른 방법은 k 의 가능한 값 k( \ {2,3, \ ldots, 2 \ log m \} 을 확인하기에 충분 함 {2,3,,2logm})과 가능한 n 값을 확인할 때마다 확인하는 것입니다 . 그러면

(nk)k<(nk)<nkk!

따라서 주어진 k 대해 [\ sqrt [\ leftroot {-2} \ uproot {2} k] {m \ cdot k!}, \ sqrt [\ leftroot {-2} \ 범위의 n 값만 확인 하면 됩니다 [mk!k,mkk] , 이진 검색을 사용하면 ( k 가 고정되고 (nk) cho k 가 단조롭게 증가하는 경우 n ) O(log2m) .

이것은 여전히 ​​비효율적 인 것으로 보이며 이것이 선형 시간 (입력 크기)으로 해결할 수 있다고 생각합니다.


4
지금까지 뭐 해봤 어? 힌트 : n 도 주어 졌다고 가정하십시오 . 그럼이 문제를 해결할 수 있습니까? n 에 가능한 값의 범위는 무엇입니까 n? 또는 k 가 주어 졌다고 가정하십시오 . 이 경우 해결할 수 있습니까? k 에 가능한 값의 범위는 무엇입니까 k?
DW

답변:


1

(nk) ^ k <{n \ choose k} 는 사실이 아닙니다 (nk)k<(nk). 예를 들어 (92)=36<49=(92)2 입니다.

나는 이항 계수의 산술 속성을 사용하여 미묘한 솔루션을 찾지 못했지만 도움이된다면 다소 무차별 한 것을 제안 할 수 있습니다.

각 에 대해 초기 추측 (예 : ) 을 취하고 Newton-Raphson과 같은 분석 방법을 사용하여 을 풀 수 있습니다. 을 풀고 싶습니다 . 대한 왼쪽의 미분 값 은 여기서 는 디 감마 함수이므로 계산하기 쉽습니다. .n k kn( nk!mkn((nk)m=0n ψ(ψ(n+1)ψ(nk+1))(nk)ψ

Newton-Raphson 검색의 복잡성은 함수와 그 파생물을 계산하는 복잡성과 솔루션에 필요한 자릿수 (이 경우 가장 가까운 정수만 필요)에 따라 다릅니다.

그래서 전반적으로 각각 검색을해야합니다 , 대한 경계를 사용하여 알고리즘 따라서 총 복잡성 (당신은 이항 계수를 계산하는 것은 일정한 시간이 걸립니다, 할 것 같다로서, 가정) 것을 .O ( 1 ) K의 O ( 로그 ( m ) )kO(1)kO(log(m))


2
나는 한계가 벗어났다는 것에 동의하지만 (편집, 감사합니다) 가 취하는 이유를 설명 할 수 있습니까? O ( 1 )kO(1)
RB
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.