社区
数据结构与算法
帖子详情
一堆数分成两份,求这两份的差值最小
guzhilei1986
2007-10-08 01:26:53
如题所述,给出n个正整数,求将这n个数分成两份,一份有m(m<n)个数,那么另一份就有n-m个数。然后每一份求和,要求得到的差值的绝对值最小。谢谢。
...全文
1130
7
打赏
收藏
一堆数分成两份,求这两份的差值最小
如题所述,给出n个正整数,求将这n个数分成两份,一份有m(m<n)个数,那么另一份就有n-m个数。然后每一份求和,要求得到的差值的绝对值最小。谢谢。
复制链接
扫一扫
分享
转发到动态
举报
写回复
配置赞助广告
用AI写文章
7 条
回复
切换为时间正序
请发表友善的回复…
发表回复
打赏红包
guzhilei1986
2007-10-11
打赏
举报
回复
谢谢各位。我用0-1背包把这个问题给解决了。
这是这道题的链接
,各位大哥要有兴趣可以看一下,挺有意思的。
mathe
2007-10-10
打赏
举报
回复
Do any of you encounter the same problem as me in CSDN?
I could not login the CSDN in my XP machine and now I have to use Linux machine.
Hehe, I do not like NPC problem. I am not familar with the theory.
I think "0-1背包问题" should be different since it should handle very large integer.
tailzhou
2007-10-10
打赏
举报
回复
好象O(N*Sum)并不能说明不是NP;
就象0-1背包问题,用动态规划来求解其复杂度也可以说是o(N*Sum),sum代表背包的容量;
但这个题比一般0-1背包要特殊;
mathe给个理论的证明?
mathe
2007-10-10
打赏
举报
回复
This is not NP problem. Could be solve in O(N*Sum)
Ref: http://community.csdn.net/expert/topicView.asp?id=3655455
In the refrence, it is to find two subarray with same sum. The code for this problem is very similar
tailzhou
2007-10-10
打赏
举报
回复
是不是NP就不清楚了,因为比普通的0-1背包要特殊(重量跟价值一样)
我只是想说可以用动态规划来求解;
但可能存在更好的解决方法;
zgg___
2007-10-10
打赏
举报
回复
tailzhou的帖子表明了问题的难度,
而且,这个问题感觉上非常象NP问题。
但是,这个问题就是NP问题吗?
tailzhou
2007-10-10
打赏
举报
回复
假设数组为A[1..n]
首先计算数组元素的和s;
那么这个题就可以对应到0-1背包问题:
有n个物品,每个物品的重量为A[i],其价值为A[i];
背包的容量为s/2;
背包问题变形(动态规划),
求
一堆
数
字
分成
两组,使得两组和的
差值
最小
。...
这个问题类似于背包问题,我们只要稍微改编一下就行。也就是相当于从
一堆
数
字里面挑选一些
数
,然后使其接近总和的1/2。然然加入的每个
数
字的价值都看成1。下面附上python写的源代码,供大家参考。 import numpy as np#n个物体的重量(w[0]无用)w = np.array([0, 2, 5, 6, 9, 4, 5, 8, 5])#n个物体的价值(p[0]无用)p = [0, 1,...
数
集划分问题 两集合
求
最小
差值
提问: 将N个整
数
的集合
分成
2堆,使这2堆的
差值
最小
,
求
这2堆集合(S1,S2),2堆集合长度不要
求
一样。 或则问题可以转换成这样,
最小
差值
已经确定为MIN,即
求
sum(S1)- sum(S2)= MIN 的2堆集合。 回答: 看过一篇类似的帖子,但是也只是
求
出2堆集合的
最小
值,并没有对2堆集合具体做划分 1 将N个
数
排序,称集合A 2 取出A中最大两个
数
a,b,相减得c 3 ...
数
组
分成
两组
差值
最小
python_将
数
组
分成
两部分使得两部分的和的差
最小
题目有点拗口,举个例子,有1,2,3一共3个
数
,将这三个
数
分成
两部分,有3种分法1 | 2,3或者1,2| 3 或者1,3|2,然后计算每部分所有
数
的和,1 | 2,3 -> 和为1,5,和的差是41 2| 3 -> 和为3,3,和的差是01 3|2 -> 和为4,2,和的差是2所以按照1,2| 3分得到的和的差
最小
。那么任意给定一个
数
组,如何找出
最小
值呢?思路:差
最小
就是说两部...
将
数
组
分成
两部分,使得这两部分的和的差
最小
将一个
数
组
分成
两部分,不要
求
两部分所包含的元素个
数
相等,要
求
使得这两个部分的和的
差值
最小
。比如对于
数
组{1,0,1,7,2,4},可以
分成
{1,0,1,2,4}和{7},使得这两部分的
差值
最小
。 思路: 这个问题可以转化为
求
数
组的一个子集,使得这个子集中的元素的和尽可能接近sum/2,其中sum为
数
组中所有元素的和。这样转换之后这个问题就很类似0-1背包问题了:在n件物品中找到m件
把
一堆
数
字
分成
两堆,使两堆的和尽可能接近
把
一堆
数
字
分成
两堆比较好的方法是使用DP,把所有集合内元素能达到的部分和标记出来例如有
数
字{ 1, 3, 4, 5 }则可以达到的部分和从小到大为:1=13=34=45=56=1+57=3+48=3+59=4+510=1+4+5...然后只要从总和的一半开始,往少的方向寻找第一个存在的部分和就可以了,也就是最大的部分和设总和为sum,最大部分和为partsum,则两堆
数
最小
的
差值
为 ( sum - partsum ) - partsum参考代码如下:#include #include #includ
数据结构与算法
33,028
社区成员
35,336
社区内容
发帖
与我相关
我的任务
数据结构与算法
数据结构与算法相关内容讨论专区
复制链接
扫一扫
分享
社区描述
数据结构与算法相关内容讨论专区
社区管理员
加入社区
获取链接或二维码
近7日
近30日
至今
加载中
查看更多榜单
社区公告
暂无公告
试试用AI创作助手写篇文章吧
+ 用AI写文章