Grad-ProbAsk 板


LINE

※ 引述《nonagoner (哈)》之銘言: : Given a set of integers X={x1,x2,...,xn} and an integer bound B, design an : algorithm that determines whether a subset X' of X exists such that all : element of X' sum to exactly B. : 本來想寫成從大的整數開始取至小的不大於B的總和看是否存在子集,但是好像會忽略一 : 些排列順序,請問這題要怎麼取出正確子集呢?感謝高手解答 題目想找:是否存在 某個X子集,其整數和正好是B這個數 max(X') :取出集合中的最大值 count(X'): X'的元素個數 function main() { for(int i=1;i <= n;i++) //收集小於等於B的元素 { if(Xi <= B) X' += Xi; } while (count(X')!=0) // 用while迴圈 + 遞迴去解 { if XD(max(X')) return true; else X'-= max(X'); } return false; //若脫離上方的while迴圈,表示沒有此子集! } function XD(int A) //遞迴副程式 { if (A==B) return true; for(int i=1;i <= count(X'),i++) { A = A + Xi; //嘗試 新A值=A值+Xi值 if (A==B) //新A值若等於B,即成立。回傳true給呼叫此副程式的位置 return true; else if(A>B) //若大於,減回去,回到上方for迴圈繼續下一個Xi A = A - Xi; //因為是大於,不用去考慮後續, //因為再怎麼遞迴加還是大於。 else if(A<B) //若小於,以此 新的A值去做 遞迴 { //若後續的遞迴有成功達成 A==B,就回傳true。 X' -= Xi; //暫時減去 if XD(A) //遞迴去做,若XD(A)接受到的是true, return true; //即是後續 成功達成 A==B,就回傳true給呼叫此副程式的位置 else X' += Xi; //失敗就把剛剛移除的Xi放回,回到上方for繼續檢測下一個Xi值 } } } 本來是想用文字敘述~~可是越寫越長~而且用文字敘述有點亂~ 結果就變成 遞迴程式碼了 XD ㄧ開始會取出一個 大的子集 ,其內容元素:單ㄧ個都小於等於B (因為 集合中 大於B的數 沒用途!) 若此大集合的個數為0 => X每個元素都大於B~不可能有其和=B的子集=>false 若此大集合的個數>0 先取最大值 檢測是否=B? 若小於 去ㄧ層遞迴檢測 (A+某Xi)=B? 若(A+某Xi)再小於B 去第二層遞迴檢測 (A+某Xi+某Xj) =B? ... .. 遇到大於 就for迴圈 換ㄧ個Xi重新加回 ,繼續往下遞迴檢測 -- ~剝好了,小心燙喔~ ◢◤ ◢︴◤ ▆ ▆喔喔~ ◢ ˋ◢██◣ ◢██◣◢ 哇~ ◢◤ ◣◢██◣◥█ ρ◤ ██◢◤ █◥◥◥ ◤◤◤ █ ˊ你好體貼喔~ ◢◤ █ ◥◥◥ ∴ ◣ ██◢◤ ◤ ● ●⊿ ●●▄ ◥ ◢◤唉呀! ◤ ● <ζ█◥◣ ◢◤ ◥██ ◤◣ ◥▼"█◤◣ ◢◤好燙~ˋ ◢◥█"▅/▊█◣ ◢◤ ◢◣██◤ ◢▏█▉◣ ◢◤ ◢██╲ █︴◤ --



※ 發信站: 批踢踢實業坊(ptt.cc)
◆ From: 114.39.216.58
1F:推 polomoss:這種考試想得出來嗎~? 02/21 20:23
2F:→ qazwsxee:應該有別的方法XD,不然此法太花時間思考了 02/21 20:34
3F:推 FRAXIS:Dynamic Programming.... 02/21 21:11
4F:→ qazwsxee:3樓說的方法,我沒學過~(在演算法嗎) 02/21 21:20
5F:推 FRAXIS:wiki上面subset sum problem的介紹就寫了.. 02/22 00:06
6F:→ qazwsxee:了解,A(B)=max{Xi + A(B - Xi) | Xi<= B},A(0)=0 感謝 02/22 02:34
7F:推 nonagoner:沒學過+1 謝謝解答~ 02/22 14:45







like.gif 您可能會有興趣的文章
icon.png[問題/行為] 貓晚上進房間會不會有憋尿問題
icon.pngRe: [閒聊] 選了錯誤的女孩成為魔法少女 XDDDDDDDDDD
icon.png[正妹] 瑞典 一張
icon.png[心得] EMS高領長版毛衣.墨小樓MC1002
icon.png[分享] 丹龍隔熱紙GE55+33+22
icon.png[問題] 清洗洗衣機
icon.png[尋物] 窗台下的空間
icon.png[閒聊] 双極の女神1 木魔爵
icon.png[售車] 新竹 1997 march 1297cc 白色 四門
icon.png[討論] 能從照片感受到攝影者心情嗎
icon.png[狂賀] 賀賀賀賀 賀!島村卯月!總選舉NO.1
icon.png[難過] 羨慕白皮膚的女生
icon.png閱讀文章
icon.png[黑特]
icon.png[問題] SBK S1安裝於安全帽位置
icon.png[分享] 舊woo100絕版開箱!!
icon.pngRe: [無言] 關於小包衛生紙
icon.png[開箱] E5-2683V3 RX480Strix 快睿C1 簡單測試
icon.png[心得] 蒼の海賊龍 地獄 執行者16PT
icon.png[售車] 1999年Virage iO 1.8EXi
icon.png[心得] 挑戰33 LV10 獅子座pt solo
icon.png[閒聊] 手把手教你不被桶之新手主購教學
icon.png[分享] Civic Type R 量產版官方照無預警流出
icon.png[售車] Golf 4 2.0 銀色 自排
icon.png[出售] Graco提籃汽座(有底座)2000元誠可議
icon.png[問題] 請問補牙材質掉了還能再補嗎?(台中半年內
icon.png[問題] 44th 單曲 生寫竟然都給重複的啊啊!
icon.png[心得] 華南紅卡/icash 核卡
icon.png[問題] 拔牙矯正這樣正常嗎
icon.png[贈送] 老莫高業 初業 102年版
icon.png[情報] 三大行動支付 本季掀戰火
icon.png[寶寶] 博客來Amos水蠟筆5/1特價五折
icon.pngRe: [心得] 新鮮人一些面試分享
icon.png[心得] 蒼の海賊龍 地獄 麒麟25PT
icon.pngRe: [閒聊] (君の名は。雷慎入) 君名二創漫畫翻譯
icon.pngRe: [閒聊] OGN中場影片:失蹤人口局 (英文字幕)
icon.png[問題] 台灣大哥大4G訊號差
icon.png[出售] [全國]全新千尋侘草LED燈, 水草

請輸入看板名稱,例如:iOS 或 站內搜尋

TOP