f(n,m)表示把n個元素的集合分為m個子集,有多少種分法?
理解一下return count(ln - 1, lm - 1) + lm * count(ln - 1, lm)
n個元素的集合可以劃為f(n,m)個不同的由m個非空子集組成的集合。參考文件考慮3個元素的集合,可劃分為:
① 1個子集的集合: }
② 2個子集的集合: ,} , ,} , ,}
③ 3個子集的集合:,,}
所以 f(3,1)=1
f(3,2)=3
f(3,3)=1
如果要求f(4,2)該怎麼辦呢?
a.往①裡新增乙個元素 ,得到,}
b.往②裡的任意乙個子集添乙個4,得到
,} , ,}
,} , ,}
,} , ,}
所以f(4,2) = f(3,1)+2*f(3,2) = 7
以此推廣得,f(n,m) = f (n-1,m-1)+ m * f(n-1,m)
**實現
/**
* 分治法
* n個元素m個非空子集
* 可以組成多少種集合
* 即f(n,m)表示把n個元素的集合分為m個子集
* 有多少種分法
* * @author allenhush
*//**
* 宣告全域性變數
* 開始
*/const n =
4// 全集包含n個元素
const m =
2// m個非空子集
/** * 計算函式
* 開始
*/var
count
=(ln, lm)
=>
else
else}}
/** * 主函式入口
* 開始`
*/var
main=(
)=>
/** * 程式入口
* 執行main函式
*/main
()
分治——分而治之
node的輸入流還沒研究明白
rl.question總是不給我處理輸入值
或許是作用域問題
待研究以上。
分治法 整數劃分問題
問題 將給定正整數n表示成一系列正整數之和n n1 n2 nk,其中n1 n2 nk 1,k 1。求正整數n的不同劃分個數p n 有些問題本身都具有比較明顯的遞迴關係,因而容易用遞迴函式直接求解。而有些問題遞迴關係卻不明顯。在本例中,如果設p n 為正整數n的劃分數,則難以找到遞迴關係,因此考慮增加...
整數劃分 分治法
整數劃分經典演算法了,不做解釋,自己做了一下,鍛鍊遞迴能力!1 include 2 3int bufferarray 1000 快取陣列 4int bufferlenth 0 快取陣列的當前長度 5int outputsignal 1 當前輸出的控制訊號 6int total 0 劃分的總數 78 ...
貪婪演算法 動態規劃 分治法比較
1,貪婪演算法 一步步走,每走一步都是當前最優的。使用要求 無後向性,比如n個活動安排,只要安排了某個活動,那麼後面活動怎麼安排和前面的選擇無關。注 每一步都是選最棒的,那麼這個最棒是怎麼定義的?什麼標準 看下面這個例子 貪心法標準的選擇 設有n個正整數,將它們連線成一排,組成乙個最大的多位整數。例...