Re: [問題] 數學的組合

看板Prob_Solve (計算數學 Problem Solving)作者 (喲)時間12年前 (2012/02/29 11:24), 編輯推噓1(100)
留言1則, 1人參與, 最新討論串2/2 (看更多)
※ 引述《chengchieh (cc)》之銘言: : 其實只是要做C n 取 m 的功能 : 有一個array...長度為n : 每次從中取出元素個數為m的array : 預定的採用數值為C 13 取 5(標準的撲克牌手牌牌型查驗~) : 目前瑣事有點多...腦袋不太靈光 : google的資料量太多...手邊排不出時間來整理 : 不知道有沒有人可以幫忙一下的... : 感謝.. 幫忙什麼事? 是幫忙告訴你怎麼做嗎? 如果問題定位為n取m的全部都要取出,基本型就是 boolean Comb(set, n, m, result) { if (m == 0) return true; //結果在result中. if (n < 0) return false; boolean found; Element a = set.firstElement; Set set1 = set.removeFirst(); found = Comb(set1, n-1, m, result); Set result1 = result.add(a); found = found & Comb(set1, n-1, m-1, result1); } 呼叫這個程序,是用 Comb(set, set.length(), m, {}). 另外 "非遞迴" 的組合求法,就是像在一根桿子上移動一些串珠那樣的求法. 先給一個陣列包含n個元素,元素內容是boolean,表示選取或不選取的狀態. 一開始陣列左端m個元素設定為true. 為了方便說明,我們把false的元素說成是一個空的格子. 1. 將最右端連續空的格子消除: 也就是將最右邊的連續空格子之右邊的元素向左推, 結果是使最右邊的連續false的右邊找不到任何true. 2. 將最右邊一個可以右移的格子向右移: 所謂可以右移,就是格子本身為true,並且 右邊一格為false. 3. 記錄目前true元素的狀態: 此時標記為true的m個元素,是n取m的一種情況. 4. 如果不是最右邊m個元素標記為true,則從第1步重新執行. -- ※ 發信站: 批踢踢實業坊(ptt.cc) ◆ From: 61.231.66.119

02/29 14:25, , 1F
感謝...
02/29 14:25, 1F
文章代碼(AID): #1FJPfuAu (Prob_Solve)
討論串 (同標題文章)
本文引述了以下文章的的內容:
完整討論串 (本文為第 2 之 2 篇):
文章代碼(AID): #1FJPfuAu (Prob_Solve)