2011-04-24 48 views
2

可能重複:
The most efficient way to implement an integer based power function pow(int, int)尋找正整數的力量最快的算法是什麼?

只有兩個方法,我知道的是,

  1. 單一的for循環:極其緩慢

  2. 重寫enter image description here遞歸計算。

我不知道是否有比這兩個更快的算法?任何按位技術都是受歡迎的。謝謝。

兩個算法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

@John Zwinck:非常感謝。我搜索了3次,但無法找到該線程。 – Chan 2011-04-24 23:42:56

+0

最快的算法幾乎總是一個預先計算的表查找:-) – paxdiablo 2011-04-25 00:01:31

+0

我相信第二次遞歸調用應該是這樣'recurPow(a * a,(e - 1)/ 2)* a'。在a = 2上測試它,e = 5 – 2013-03-05 22:08:30

回答

2

的最優算法是NP完全問題,見http://en.wikipedia.org/wiki/Addition-chain_exponentiation

該頁面還鏈接了一些啓發式算法,給出不錯的答案,你可能想要其中之一。

你也在做comp3212嗎?

+0

謝謝。我不是在那個班上,只是在閱讀數學書時才瞭解它。 – Chan 2011-04-24 23:48:09

+0

那麼我們有這個問題分配給我們。講師有一種「意外」分配無法解決的問題的習慣。 – riri 2011-04-24 23:57:16

相關問題