看板 Math 關於我們 聯絡資訊
※ 引述《XII (Mathkid)》之銘言: : ※ 引述《recipro (FIFA13勒?????)》之銘言: : : 最近在算一些東西, : : 要一直解 : : x_1+x_2+...+x_n=k : : 0<=x_1,x_2,...,x_n<=m : : 的整數解組數. : : 可是我只會使用排容方法來加加減減, : : 因此想問問大家這種解有上限的問題是否有較為"簡化"的方法? : [x^k](1+x+..+x^m)^n : 然後交給電腦算係數吧>"< : 若 k > mn/2, 可將 k 換成 mn-k, 整數解個數相同 : 同樣的方法可以算 x_1+..+x_n=k, L_i≦x_i≦U_i, i=1,..,n 的整數解 --- (1+...+x^m)^n [1 - x^(m+1)]^n = ──────── (1-x)^n n n i (m+1)i ∞ n j = { Σ C *(-1) * x } * { Σ H x } i=0 i j=0 j i n n 所以 x^k 係數 = Σ (-1) *H C (i,j) j i (m+1)i+j=k = H(n,k) - H(n,k-m-1)*C(n,1) + H(n,k-2m-2)*C(n,2) - ... 這個答案型態其實跟直接用 排容原理 (duel form) 得到的結論是一樣的 ==== 我是覺得能寫出這樣的答案已經算 "很簡化了" 排列組合的很多問題都是 NP-complete / -hard 您想寫出一個簡單的 alg. 來計算都還不見得辦的到 能用一個 for-loop , 甚至是 explicit sol. 得解只能說你很 lucky 不要被高中的排列組合題目而影響對 computing 的 scope 高中的題目都是有經過設計的 不然就是事件情境單純許多 or 事件的數量級小到不行 例如對 linear diophantine eq. 加上 x_i < x_j 這類 constrain 手算就只能用 "土法煉鋼" ==== 回到原問題,那一串很醜的答案有沒有辦法整理出一個 closed form ? 我覺得可以,但需要分段討論 用訊號的角度來看,考慮一個離散訊號: x[i] = ┌ 1 if 0 <= i <= m └ 0 others 原問題其實就是將方波訊號,自我 convolution n次: y[i] := y_n[i] = x[i]‧x[i] ‧... ‧x[i] (conv n times) 則 y[k] 即為所求 例如 y_2[i] = ┌ 1+i if 0 <= i <= m │ 2m+1-i if m < i <= 2m └ 0 others 不難預期,每多做一次 conv, 訊號分段數會越來越多 若把它從 distrete -> continuous convolution 等同於不斷地計算曲面下的面積 算到最後,每段都有屬於自己的 closed form 但若把這些分段的結果 "組合" 成一個 final form (意即無須分段討論) 那最後的 form 應該會跟排容原理的結論一樣 (ps: 上面那句話是個人純屬猜測 ) 舉個例子, 考慮 H(n,k) - H(n,k-3)*C(n,1) + H(n,k-6)*C(n,2) - ... 用上面的概念,你可以將之化簡,但代價就是需分段討論 -- ※ 發信站: 批踢踢實業坊(ptt.cc), 來自: 210.61.82.125 ※ 文章網址: http://www.ptt.cc/bbs/Math/M.1399039466.A.C4E.html ※ 編輯: doom8199 (210.61.82.125), 05/02/2014 22:14:53
recipro :謝謝! 05/03 08:44