从一个有n个数字的随机数列中随意取k个数,使其和等于m

xiulidefeng2012 2014-11-30 05:56:57
从一个有n个数字的随机数列中取出k个数字,使其和等于m。求出所有可能的k个数字的组合。这个在原始的穷举上面能做什么改进呢,求大神点拨。
...全文
1374 7 打赏 收藏 转发到动态 举报
写回复
用AI写文章
7 条回复
切换为时间正序
请发表友善的回复…
发表回复
熊熊大叔 2014-12-03
  • 打赏
  • 举报
回复
背包问题,动态规划算法。自己去baidu吧
xiulidefeng2012 2014-12-03
  • 打赏
  • 举报
回复
引用 6 楼 WizardOz 的回复:
我同意一楼的,但是他已经说完了,我就写个程序验证一下吧

import random

lst = list(range(1,21))
lst.reverse()

def solve(lst,goal,result = []):
    if goal > sum(lst):
        return
        
    for i in range(len(lst)):
        if lst[i] > goal:
            continue
        elif lst[i] == goal:
            print(result + [lst[i],])
            continue
        else:
            solve(lst[i + 1:],goal - lst[i],result + [lst[i],])

solve(lst,180)
请问这个算法时间复杂度是多少啊?
WizardOz 2014-12-03
  • 打赏
  • 举报
回复
我同意一楼的,但是他已经说完了,我就写个程序验证一下吧

import random

lst = list(range(1,21))
lst.reverse()

def solve(lst,goal,result = []):
    if goal > sum(lst):
        return
        
    for i in range(len(lst)):
        if lst[i] > goal:
            continue
        elif lst[i] == goal:
            print(result + [lst[i],])
            continue
        else:
            solve(lst[i + 1:],goal - lst[i],result + [lst[i],])

solve(lst,180)
cnmhx 2014-12-02
  • 打赏
  • 举报
回复
直接定义一种特殊的数据结构。 像在多维多项式展开中那样。 将特定阶数的单项全部列示出来就是了。
xiulidefeng2012 2014-12-02
  • 打赏
  • 举报
回复
引用 1 楼 truelance 的回复:
先对数字排序,然后回溯+剪枝。比如一个组合已经超过目标值,那么把其中一个值换成后面的值肯定还会超标
如果要求的和m 是最大值的情况呢,就是不会有超过它的情况出现
xiulidefeng2012 2014-12-01
  • 打赏
  • 举报
回复
如果要求的和m 是最大值的情况呢,就是不会有超过它的情况出现
熊熊大叔 2014-11-30
  • 打赏
  • 举报
回复
先对数字排序,然后回溯+剪枝。比如一个组合已经超过目标值,那么把其中一个值换成后面的值肯定还会超标

33,008

社区成员

发帖
与我相关
我的任务
社区描述
数据结构与算法相关内容讨论专区
社区管理员
  • 数据结构与算法社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧