JAVA實現排列組合

2021-08-07 11:50:17 字數 2440 閱讀 8959

/**

* 計算階乘數,即n! = n * (n-1) * ... * 2 * 1

*@param n

*@return

*/private

static

long

factorial(int n)

return sum;

}

/**

* 排列計算公式am

n = n!/(n - m)!

*@param m

*@param n

*@return

*/public

static

long

arrangement(int m, int n)

/**

* 組合計算公式cm

n = n! / (m! * (n - m)!)

*@param m

*@param n

*@return

*/public

static

long

combination(int m, int n)

//******優化排列組合*******//

/** * 替換階乘的另一種方式(從n開始遞減相乘,乘m個數)

*@param n

*@param m

*@return

*/private

static

long

factorialsec(int m, int n)

return sum;

}/**

* 排列

*@param m

*@param n

*@return

*/public

static

long

arrangementsec(int m, int n)

/*** 組合

*@param m

*@param n

*@return

*/public

static

long

combinationsec(int m, int n)

return factorial(m, n)/factorial(m, m);

}//******優化結束******//

雖然會提高一點效率,但是用int還是容易超出,大致思路是這樣,優化的**沒有詳細測試

/**

* 排列選擇(從列表中選擇n個排列)

*@param datalist 待選列表

*@param n 選擇個數

*/public

static

void

arrangementselect(string datalist, int n)

/**

* 排列選擇

*@param datalist 待選列表

*@param resultlist 前面(resultindex-1)個的排列結果

*@param resultindex 選擇索引,從0開始

*/private

static

void

arrangementselect(string datalist, string resultlist, int resultindex)

// 遞迴選擇下乙個

for (int i = 0; i < datalist.length; i++)

}if (!exists)

}}

/**

* 組合選擇(從列表中選擇n個組合)

*@param datalist 待選列表

*@param n 選擇個數

*/public

static

void

combinationselect(string datalist, int n)

/*** 組合選擇

*@param datalist 待選列表

*@param dataindex 待選開始索引

*@param resultlist 前面(resultindex-1)個的組合結果

*@param resultindex 選擇索引,從0開始

*/private

static

void

combinationselect(string datalist, int dataindex, string resultlist, int resultindex)

// 遞迴選擇下乙個

for (int i = dataindex; i < datalist.length + resultcount - resultlen; i++)

}

java實現排列組合

因為準備要做一道多維窮舉演算法題,所以必須要補一下排列組合的演算法知識,本來我剛接觸多維窮舉演算法的時候,還以為難點只是要找出如何判斷窮舉結果是否合法。但是想開始寫演算法的時候,才發現多維窮舉本身也是一大難點,至少對於像我這樣剛開始接觸演算法的小白,排列組合根本是很難想出來如何實現。public c...

排列組合實現

演算法 與網際網路 組合演算法 本程式的思路是開乙個陣列,其下標表示1到m個數,陣列元素的值為1表示其下標 代表的數被選中,為0則沒選中。首先初始化,將陣列前n個元素置1,表示第乙個組合為前n個數。然後從左到右掃瞄陣列元素值的 10 組合,找到第乙個 10 組合後將其變為 01 組合,同時將其左邊的...

實現排列組合

排列組合是組合數學的基礎,從n個不同元素中任務m個,約定1從n個不同元素中任取m個 約定1計算a n,m 與c n,m 只要簡單進行乘運算即可,要具體展現出排列的每一列與組合的每一組,絕非輕而易舉。我們應用遞迴設計來具體實現排列與組合。def p n,m,k,a global s if k m fo...