我这是788个数据,跑了半天没跑出来!
追答数据量太大,组合种类太多,请减少数据量。如果有重复数据请先去重。
追问哭,哭,哭,没法减少数量!
追答800个数据,如果其中100个可自由组合得到结果,则C(800, 100)=800!/(100!*700!),此数字是天文数字级别,超级计算机可能都需要很多年才能输出所有组合,你的个人电脑算100年也算不完其中的1%。即便能够算出所有结果,你还需要数以万计的TB级硬盘来保存它们。
追问非常感谢,我能问一下,你这个是只要满足了条件都输出一个?还是所有都遍历完才最后一次性输出?
追答此方法称为回溯法,原理是将问题一步步分解为子问题并求解子问题的所有解,子问题求解完毕或无解时再向上回溯。
求解[2,3,4,5,6,7,8,10,12,13,23,34,56]中所有和为22的组合的过程是:
①求2 和 [3,4,5,6,7,8,10,12,13,23,34,56]中所有和为20的组合
②求[2,3] 和 [4,5,6,7,8,10,12,13,23,34,56]中所有和为17的组合
按此顺序递归进行求解,当最终求解完毕问题①后,向上回溯,继续求解3 和 [4,5,6,7,8,10,12,13,23,34,56]中所有和为19的组合,以此类推。
嗯,是一次性输出哈!