看這些演算法很費,用了兩個多小時
1 全排列:迭代思想,未考慮重複元素
#include using namespace std;
void swap(char* a,char* b)
/*全排列思想:1)2個數全排列 ab ba,即第乙個數與後面的數交換。 視a不動,則bc排列 abc acb
2)迭代:把最後兩個數交換,前面其他的數看成乙個數。 a 與b交換後,視b不動 bac bca ;a與c交換後視c不動, cba cab
*/// 第m個數,共有len個數
void allrange(char* pstr,int m, int len)
else
return result;
}/*--------------------- 遞迴二分法實現階乘------------------------*/
int power2(int x,int n)
else if(1 == n)
else
else
}}/*-------------------------非遞迴的二分法-----------------------------*/
/*x^23寫成x^16 * x^4* x^2 * x,即23=16+4+2+1,而23 = 10111(二進位制),
所以只要將n化為二進位制並由低位到高位依次判斷如果第i位為1,則result *=x^(2^i)
*/int power3(int x, unsigned int n)
return result;
}/*---------------------------------改進非遞迴二分法------------------
如像48=110000(二進位制)這種低位有很多0的數,可以先過濾掉低位的0再進行計算,這樣也會提高一些效率*/
//計算x^n by morewindows( )
int power4(int x, unsigned int n)
else }
int result = x;
n >>= 1;
while (n != 0)
return result;
}int main()
{ int x=10,n=4,result=0;
result = power4(x,n);
cout<3參考
蠻力法的基礎工具 求冪集 全排列演算法
冪集物件 vectorint pwset 全排列物件 vectorint arrage 採用增量窮舉思想構造冪集 void getset int n void print pwset endl void print arrage endl void insert vector int vec,int...
基本演算法 List全排列演算法
現在有乙個列表,需要將列表第k個到第m個元素進行全排列,並且輸出。基本思想 一 當k m時,即待排序列不存在時,直接輸出0到m項的值。二 當k m時,依次將序列中每乙個元素排到第k位,然後再全排k 1到m項。演算法如下 protected void button1 click object send...
求序列的全排列演算法
所謂全排列,就是將集合中元素的所有排列情況依次輸出。比如的全排列為 123 132 213 231 312 321,共6種,滿足計算公式n n為集合中元素個數,不重複 當元素不重複時,全排列採用遞迴思想較容易實現,它的遞迴公式推導步驟類似 1 要求得123的全排列,只需求得 1並上23的全排列 1 ...