로그베이스 1의 복잡성은 얼마나됩니까?로그 기능의 복잡성은 무엇입니까?
답변
이것은 실제로 로그의 값을 계산할 값의 도메인에 따라 다릅니다.
IEEE double 형의 경우 많은 프로세서가 단일 어셈블리 명령어로 로그를 취할 수 있습니다. 예를 들어, x86에는 FYL2X 및 FYL2XP1 지침이 있습니다. 일반적으로 이와 같은 지시는 일부 고정 된베이스에 대수를 취한다하더라도, 이들은
로그 B = 가 C B/ 로그 기록한다는 사실을 이용하여 임의의 기지의 대수를 취하는데 사용될 수있다 c a
두 개의 로그를 취하고 그 지수를 간단히 찾아서.
(임의의 정밀도의) 일반 정수의 경우 2 진수 검색과 결합 된 반복 제곱을 사용하여 O (로그 로그 n) 산술 연산만을 사용하여 로그를 취할 수 있습니다. 값을 초과하고 이진 검색을 수행 할 수 있기 전에 숫자 로그 로그를 n 번만 제곱 할 수 있습니다. some cute tricks with Fibonacci numbers을 사용하면 O (log n) 공간에서만이 작업을 수행 할 수 있습니다. binary logarithm을 계산하는 경우 비트 시프트로 값을 계산하는 데 사용할 수있는 귀여운 트릭이 있습니다 (점근 적 복잡도는 동일하지만).
임의의 실수에 대해서는 로직이 더 어렵습니다. 뉴턴의 방법이나 테일러 (Taylor) 시리즈를 사용하여 로그의 정확도를 계산할 수 있습니다. 그러나이 방법에 익숙하지 않다고 고백합니다. 그러나 실제로는 대부분의 실수가 IEEE double 형이기 때문에이 작업을 수행 할 필요가 거의 없으며이 경우 더 나은 알고리즘 (또는 하드웨어 지침)이 있습니다.
희망이 도움이됩니다.
정수의 경우 명령 (또는 짧은 시퀀스 인'CTZ (x & (x - 1))'또는'wordsize - LZC (x)') - 그러나 AFAIK는 전혀 시간 복잡성을 돕지 못합니다. (단지 실제 속도) – harold
@ harold- 사실, 이진 로그에만 유효합니다. . – templatetypedef
@templatetypedef 방금 설명한대로 다른 기본에서 로그를 얻기 위해 상수 요소를 곱할 수 있습니다. :) –
이 숙제가 있습니까? –
사용되는 알고리즘에 따라 다르지 않습니까? 예를 들어 찾아보기 테이블은 O (1)입니다. – Thilo
@ 토니 : [아니오] (http://math.stackexchange.com/questions/61759/project-euler-problem-25) –