Re: [問題] 請教關於一些排列組合的問題

看板C_and_CPP (C/C++)作者 (我要加入劍道社!)時間16年前 (2009/04/24 11:42), 編輯推噓2(200)
留言2則, 2人參與, 最新討論串2/2 (看更多)
※ 引述《pran (小潘)》之銘言: : 我要算的是 : sum((p[i][0]^2)*p[i][1]) : sum((p[i][0]^2)*p[i][2]) : sum((p[i][1]^2)*p[i][0]) : sum((p[i][1]^2)*p[i][2]) : sum((p[i][2]^2)*p[i][0]) : sum((p[i][2]^2)*p[i][1]) : 分別的值 : 當然如果只有三組的話 就是p3取2 =6 有6種情形 : 就可以用硬幹的 : 但是現在我要推廣到n組數據 : 能夠有方法算嗎? 話說,這個問題可以被轉換成簡單的矩陣乘法。 我們先把上面的式子一般化: 令 R[m][n] = Σ p[i][m]^2 * p[i][n] 所以 R[0][1] = sum((p[i][0]^2)*p[i][1]) R[0][2] = sum((p[i][0]^2)*p[i][2]) ... 所以你要求的結果,就是 R[0][1]、R[0][2]、R[1][0]、R[1][2] 等等 R 是一個矩陣,除了對角線的元素外,其它元素都是你想要的答案。 那要怎麼算 R?我們發現 R 當中的元素定義符合矩陣乘法的定義, 若我們另外寫出兩個矩陣: | p[0][0]^2, p[1][0]^2, p[2][0]^2, ... | | p[0][1]^2, p[0][2]^2, p[0][3]^2, ... | A = | . . | | . . | | . . | | p[0][0], p[0][1], p[0][2], ... | | p[1][0], p[1][1], p[1][2], ... | B = | . . | | . . | | . . | A[i][j] = p[j][i]^2 B[i][j] = p[i][j] 則 R[m][n] = Σ p[i][m]^2 * p[i][n] = Σ A[m][i] * B[i][n] 所以 R = A x B 所以,依照上面的規則去填寫 A 和 B 兩個矩陣,然後把兩個矩陣乘起來, 你就得到答案了。 矩陣乘法有許多函式庫可供利用,一般來說會比你自己寫迴圈計算要快一點。 -- ※ 發信站: 批踢踢實業坊(ptt.cc) ◆ From: 219.87.151.40

04/24 21:01, , 1F
原po好強... 寫程式碰到數學真的很苦手阿...
04/24 21:01, 1F

04/25 10:27, , 2F
多謝多謝,我的數學真的是不怎麼行,謝謝高手
04/25 10:27, 2F
※ 編輯: littleshan 來自: 59.121.113.147 (04/25 11:34)
文章代碼(AID): #19yJKYwx (C_and_CPP)
文章代碼(AID): #19yJKYwx (C_and_CPP)