导航:首页 > 编程语言 > 双重背包问题python

双重背包问题python

发布时间:2022-10-23 16:52:53

① 0/1背包问题python

看到这样贴code的就犯愁。。。看你的code还要自己格式化一遍,太折腾人了。。。


1、格式!

2、knapsack_dynamic 这个函数是哪里跳出来的? 和定义的函数不论名字还是参数个数,都对不上。

3、显示中文,至少要声明文件编码。比如要在脚本第一行声明

#encoding:utf-8

② 高分求python大神帮忙解答,实在有难度,做不出来

"""用itertools的组合工具combinations生成所有组合方案"""

importitertools

defsameSums(alst):
allsummary=sum(alst)
ifallsummary%2:
#数组总和不能被2整除既不可均分为等值的两部分
returnFalse
halfsum=allsummary/2#总和的半值为检测目标
forlinxrange(1,len(alst)/2+1):
#方案第一部分的数组长度从1位到数组半长
forsubinlist(itertools.combinations(alst,l)):
#按指定长度遍历组合方案
ifsum(sub)==halfsum:
#若当前方案的和为目标值则当前方案有效
#another为方案的第二部分数据列表
another=alst[:]
forxinsub:
another.pop(another.index(x))
printsub,tuple(another)
returnTrue
returnFalse


defoptsamesum(alst):
"""优化一下"""
allsummary=sum(alst)
ifallsummary%2:
returnFalse
halfsum=allsummary/2
ifmax(alst)>halfsum:
returnFalse
sortedlst=sorted(alst)[::-1]
forlinxrange(1,len(alst)/2+1):
forsubinlist(itertools.combinations(sortedlst,l)):
ifsum(sub)<halfsum:
break
ifsum(sub)==halfsum:
another=sortedlst[:]
forxinsub:
another.pop(another.index(x))
printlist(sub),another
returnTrue
returnFalse

if__name__=="__main__":
sameSums([4,7,6,3])
sameSums([3,3])
sameSums([4,12,16])
sameSums([5,1])

③ 请教我用python的贪心法做0/1背包问题

动态规划,可以给你说下思路。
我们用一个二维的矩阵A来存储中间结果,A[i][j]代表前i个物体装入容量为j的背包时可以得到的最优解,相当于是原问题的一个子问题,然后我们就可以写出递推式来更新这个矩阵,具体可以参考下详细的讲解,网上的博客非常多不用我再写一遍。

比如这种:http://zh.wikipedia.org/zh-cn/%E8%83%8C%E5%8C%85%E9%97%AE%E9%A2%98
先自己读一遍吧,有问题可以再问。

④ python急求简单作业给一个数组a找出是否有3个元素和为一个定值背包问题

#!/usr/bin/python
#encoding:utf-8

importitertools


defiter_result(alist,target):
formaybeinitertools.combinations(alist,3):
ifsum(maybe)==target:
yieldmaybe

a=[1,5,8,2,6,55,90]
forxiniter_result(a,103):
printx

先不必考虑背包问题的解法,这个问题就是简单地将所提供列表的任意三个元素抽取为子集--组合问题。python的itertools提供的combinations恰巧提供了这个功能。

⑤ Python动态背包问题,怎么解决

defbag(n,c,w,v):
res=[[-1forjinrange(c+1)]foriinrange(n+1)]
forjinrange(c+1):
res[0][j]=0
foriinrange(1,n+1):
forjinrange(1,c+1):
res[i][j]=res[i-1][j]
ifj>=w[i-1]andres[i][j]<res[i-1][j-w[i-1]]+v[i-1]:
res[i][j]=res[i-1][j-w[i-1]]+v[i-1]
printres
returnres

defshow(n,c,w,res):
print'最大价值为:',res[n][c]
x=[Falseforiinrange(n)]
j=c
foriinrange(n,0,-1):
ifres[i][j]>res[i-1][j]:
x[i-1]=True
j-=w[i-1]
print('选择的物品为:')
foriinrange(n):
ifx[i]:
print'第',i,'个,'
print('')

if__name__=='__main__':
n=5
c=10
w=[2,2,6,5,4]
v=[6,3,5,7,6]
res=bag(n,c,w,v)
show(n,c,w,res)

⑥ Python中如何实现每循环一次,符号变一次

可以单独设置的。
问题的名称来源于如何选择最合适的物品放置于给定背包中。相似问题经常出现在商业组合数学,计算复杂性理论密码学和应用数学等领域中。也可以将背包问题描述为决定性问题,即在总重量不超过W的前提下。
背包算法的一个早期应用是在测试的构建和评分中,测试者可以选择他们回答哪些问题。对于小例子来说,这是一个相当简单的过程,为测试者提供这样的选择。例如,如果考试包含12个问题,每个问题的价值为10分,测试者只需回答10个问题即可获得100分的最高分。

⑦ 求python用贪心算法实现01背包问题代码

numpy是科学计算用的。主要是那个array,比较节约内存,而且矩阵运算方便。成为python科学计算的利器。matplotlib是用于可视化的。只先学会XY的散点图,再加一个柱状图就可以了。其它的都可以暂时不学。几句话就成了。不用找本书。找个例子代码看完就会了。这两个只是计算用的。与机器学习有点儿关联。但还不是机器学习。 机器学习算法你可以使用R project,那个函数库更多些。 你要肯下功夫啃代码,最慢1小时就能掌握 numpy和matplotlib。如果你觉着难,总是想绕圈圈,想容易些,就很难弄会它。也许几天才会。

⑧ Python 如何将长度不同的字符串尽量均匀地分配到N个文件中每一行的字符串作为整体,不能打散。

背包问题的一个变种。或者说是一维装箱算法。

你将每一行字符串想象为一个物品,字符串的长度就是这个物品的大小。每个文件相当于不同的箱子,箱子的大小是固定的,装入的物品体积之和不能超过箱子的总容量。

问题就是:如何使用尽可能少的箱子来装入所有的物品,或者:如果使尽可能多的箱子空间利用率更高,以及类似的相关问题。

这类问题的答案不是一个简单的数字,它需要给出一个策略:物品1...n分别装入箱子1...m(m<=n).

对于二维装箱或三维等,区别主要在于解法的复杂度,但一个解法一般来说其思路是可以从一维扩展到二维或者三维的。


这类问题目前来说,没有全局最优解(即,没有一个算法能确保在所有情况下均能得到最好的结果),但可以得到局部最优解。算法有多种,如最常见的贪心算法,或动态规划。

贪心算法的思路比较简单:把所有的物品从大到小排好序,拿一个箱子,尝试装入最大的物品,如果不能装入,就尝试装入小一些的物品,如此循环,直到所有物品装入所有箱子。

算法很简单,但很多时候得到的结果并不理想。

⑨ 帮我看下这个程序有什么问题。。。。PYTHON中的背包问题,要求加起来20即可

你这个是背包问题吗?
维基网络上背包问题的定义是:
背包问题(Knapsack problem)是一种组合优化的NP完全问题。问题可以描述为:给定一组物品,每种物品都有自己的重量和价格,在限定的总重量内,我们如何选择,才能使得物品的总价格最高。问题的名称来源于如何选择最合适的物品放置于给定背包中。
好像和你这里解决的不一样吧?
要不你在你程序要解决的问题描述一下?

⑩ 想问下大神python的背包问题的源代码(最好玩也有伪代码,请用递归法实现),因为只学过递归法,所

递归有层数限制,所以最好不要用,能不用就不用,没有想到什么好的算法,弄了个简单粗暴的,包容量除以最小质量的,就是最多可以装多少个,然后全排列一遍三种商品,并计算价值,取最大的一个价值,代码如下:

a,b,c=2,2.5,3#三种商品质量
A,B,C=4,5,6#三种商品价值
m=100#包容量
ds=int(100/min(a,b,c))#最小质量取到最大数量

mx=0#最大价值
nl=[]#商品数量列表
fori1inrange(0,ds+1):#全排列
fori2inrange(0,ds+1-i1):
fori3inrange(0,ds+1-i1-i2):
#判断总质量超出则舍弃
n=i1*a+i2*b+i3*c
ifn>m:
continue
#计算总价值取最高值及排列并存储
j=i1*A+i2*B+i3*C
ifmx<j:
mx=j
nl=[i1,i2,i3]
#输出最大价值和组合
print(mx)
print(nl)
阅读全文

与双重背包问题python相关的资料

热点内容
阿里云服务器远程链接不成功 浏览:482
文件系统pdf 浏览:762
原神安卓区服什么意思 浏览:34
贝壳app怎么线上发布 浏览:157
如何挑选安卓系统机顶盒 浏览:53
安卓快充使用有什么注意事项 浏览:909
黑马程序员的云计算网课 浏览:946
endnotestyle文件夹怎么导入 浏览:460
讲解少儿编程演讲会开头 浏览:424
思科交换机基础命令 浏览:497
便签可以设置加密吗 浏览:339
免费漫画app怎么看书 浏览:27
华为笔记本电脑怎么安装抖音app 浏览:412
阿里云国际版试用的服务器怎么搞 浏览:895
java正则表达式工具 浏览:160
oa服务器怎么设置ftp 浏览:10
安卓如何安装obb 浏览:442
QQ聊天记录journal文件夹 浏览:118
苹果公司云服务器地址 浏览:85
加密记事本手机 浏览:437