그래서 나는 2^n
을 계산하는보다 효율적인 방법을 구현하려고합니다.반복의 효율성 대 지수의 반복
나는 이것을 O(logn)
이되도록 분할 할 수 있으며 재귀를 사용하여 쉽게 할 수 있음을 알고 있습니다. 당신은 2로 나누기를 계속하고 그것의 이상 (또는 그런 것)이있을 때 그것을 더 낮은 힘으로 곱하십시오. 문제는 큰 숫자에 대한 곱셈 방법을 손으로 썼다는 것입니다. 따라서 하나 이상의 매개 변수를 반환해야합니다.
제가 생각할 수있는 한 가지 해결책은 모든 필요한 정보가 포함 된 쌍을 만드는 것입니다. 그 외에도 반복을 사용하여 작성하는 방법을 알아 내려고 노력했습니다. 내가 볼 수있는 유일한 방법은 일종의 데이터 구조를 사용하고 n을 2로 나누고 n이 홀수 일 때 값을 저장하는 것입니다. 그런 다음 for 루프를 작성하고 값이 데이터 구조에 포함되어 있으면 각 반복마다 점검하십시오. 이것은 비교적 비용이 많이 드는 작업처럼 느껴집니다.
재귀 버전보다 효율성이 떨어질 가능성이 있습니까?
- 내가 얻을 수없는 한나라당 작업 :
나는이 때문에하고 있어요.
- 큰 숫자 클래스를 작성하고 함께 작업하는 것을 배우고 있다고 생각합니다.
비트 이동을 시도해 보셨습니까? 또는 매우 큰 숫자의 경우 10 진수로 표시해야합니까? – Mysticial
저는 자연수 만 사용하고 있습니다 만, 2^100000만큼 큰 숫자는 정확해야합니다. 현재 내 프로그램은 반복 횟수가 간단하므로 지수가 2의 거듭 제곱이면 13 초가 걸리지 만 그렇지 않으면 효율적인 알고리즘을 한 지점까지 누른 다음 2를 곱하기 시작하여 소요 시간을 늘립니다. – emschorsch
관련 : http://stackoverflow.com/questions/8771713/efficient-exponentiation-for-huge-numbers-im-talking-googols 답변을 바이너리가 아닌 십진수로 표시하려는 경우. 그렇다면 이진에서 십진수로 효율적으로 변환하는 방법에 대한 질문이 더 많습니다. – Mysticial