整數乘法優化問題(乘以常數)(轉…
阿新 • • 發佈:2019-01-07
如果n為偶數,則將它除以2,
如果n為奇數,則將它加1或者減1。
問對於一個給定的n,怎樣才能用最少的步驟將它變到1。
其實這個問題就是如何將整數變數乘上整數常數問題轉化為最少的移位運算和加法運算問題. 假設一個計算機只提供加減法和移位一位的指令,那麼這個問題就相當於如何用最少的加減法和移位指令來計算乘上一個整數常數的演算法.
這個演算法很簡單:
int cnt(int x){ int m; if(x==1)return 0; m=x%4; if(m==0||m==2)return cnt(x/2)+1; if(m==1)return cnt(x-1)+1; return cnt(x+1)+1;//if(m==3). } 也就是說,在x是偶數時採用除2。x是奇數(x>=5),如果除