2011-04-24 7 views
2

가능한 중복 : 나는 알고
The most efficient way to implement an integer based power function pow(int, int)양의 정수를 찾는 가장 빠른 알고리즘은 무엇입니까?

유일한 두 가지 방법,

  1. 루프 단일 : 매우 느린

  2. 재 작성 enter image description here 재귀 적으로 계산하다.

이 두 알고리즘보다 빠른 알고리즘이 있습니까? 모든 bitwise 기술을 환영합니다. 고맙습니다. 두 알고리즘

C#을 데모 :

 class Math { 
     static public Int64 recurPow(Int64 a, Int64 e) { 
      if (e == 0) 
       return 1; 
      if (e == 1) 
       return a; 
      if ((e % 2) == 0) 
       return recurPow(a * a, e/2); 
      else 
       return recurPow(a * a, (e - 1)/2); 
     } 

     static public Int64 iterPow(Int64 a, Int64 e) { 
      Int64 result = a; 
      for (Int64 i = 1; i < e; ++i) 
       result *= a; 
      return result; 
     } 
    } 
+0

@ 존 Zwinck : 고마워요. 3 번 검색했지만 해당 스레드를 찾을 수 없습니다. – Chan

+0

가장 빠른 알고리즘은 거의 항상 미리 계산 된 테이블 조회입니다 .-) – paxdiablo

+0

두 번째 재귀 호출은이 recurPow (a *, (e-1)/2) * a와 같아야합니다. 그것을 = 2, e = 5에서 시험하십시오. –

답변

2

최적의 알고리즘은 NP-완료, 당신은 아마 해당 페이지도 꽤 좋은 답변을 제공 휴리스틱 알고리즘의 숫자에 링크 http://en.wikipedia.org/wiki/Addition-chain_exponentiation

참조 그들 중 하나를 원해.

당신은 comp3212도하고 있습니까?

+0

고마워요. 나는 그 수업을 듣지 않고 수학 서적을 읽을 때 그것을 알게됩니다. – Chan

+0

우리는 그 문제를 우리에게 할당했습니다. 강사는 해결할 수없는 문제를 "실수로"할당하는 습관이 있습니다. – riri

관련 문제