演算法 分治法求集合劃分JavaScript版本

2021-09-17 22:23:59 字數 1169 閱讀 5222

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個正整數,將它們連線成一排,組成乙個最大的多位整數。例...