이진수 인코딩에서 비트를 사용하여 숫자 얻는다고 가정하십시오 .O ( 로그 m )
얼마나 빨리 찾기 (또는 존재하지 않는 결정) 할 수
예를 들어, 입력 m = 8436285가 주어지면, n = 27, k = 10을 출력 할 수 있습니다 .
문제에 대한 순진한 알고리즘은 n의 가능한 모든 값을 검토 하고 속성을 만족시키는 k 값을 검색 합니다.
간단한 관찰 필요 값이 확인 없음이다 보다 작은 또는보다 큰 . 그러나 ( n 값 당 가능한 값만 확인할 수 있더라도 ) 이것은 입력 크기에서 지수적인 비효율적 인 알고리즘으로 끝납니다.
다른 방법은 k 의 가능한 값 ( \ {2,3, \ ldots, 2 \ log m \} 을 확인하기에 충분 함 )과 가능한 값을 확인할 때마다 확인하는 것입니다 . 그러면
따라서 주어진 대해 [\ sqrt [\ leftroot {-2} \ uproot {2} k] {m \ cdot k!}, \ sqrt [\ leftroot {-2} \ 범위의 값만 확인 하면 됩니다 , 이진 검색을 사용하면 ( 가 고정되고 cho k 가 단조롭게 증가하는 경우 ) .
이것은 여전히 비효율적 인 것으로 보이며 이것이 선형 시간 (입력 크기)으로 해결할 수 있다고 생각합니다.