2n个整数分为两组,使两组和差的绝对值最小

http://blog.sina.com.cn/s/blog_6f194ed3010114vt.html

最近建模看到作业这个题,一开始想了很久。在网上发现竟然没有完备的算法。不过最后想到一个可以Lingo实现的线性规划模型。

 
严格说,这不是一个算法,Lingo是如何实现0-1规划的我并不清楚。有可能也是枚举法,不过对于具体问题至少可以解决。因为是TeX编译的,重新打一遍太麻烦,所以正文用截图。最后提一个不成熟的算法。
 
问题重述:有2n个整数,试将其平均分为两组(每组n个),使两组元素和的差值最小。
 
2n个整数分为两组,使两组和最小(Lingo实现)

2n个整数分为两组,使两组和最小(Lingo实现)
 
 
(这里有一点打错了。“从另一个角度看”后的等式要加绝对值号。另外这里要注意需要限定S1较大,之所以如此是因为带绝对值号的min显然是比较难实现的。不过我并不清楚Lingo能不能实现绝对值的min...我接触Lingo才几天。)
 
 


2n个整数分为两组,使两组和最小(Lingo实现)

2n个整数分为两组,使两组和最小(Lingo实现)
 
这个问题可以扩展到多维变量,并可扩展到分为多组。下面就多元、多组的情况讨论一个想法。
 
一开始我设想了一个算法,但是感觉问题多多,只能有时间再深入想:
 
多元统计分析中有一个动态算法:K均值聚类。其基本思想是,假定目标是聚为k类,任意划分为k组,并分别计算其均值。然后任选一个样本点,计算其到所有k类中心的距离。寻找最小距离,若对应的中心不是自身所在组,则将其调至改组,再重新计算各组中心,并重复本步骤;如果其对自身所在组中心的距离为最小,则保持不变,继续寻找下一个点,直到所有的点都不需要调整。
 
类似这个想法,是否可以反其道行之,每次都将较远的元素与组调在一起。假设存在一个调整,可以使组内均值向量更靠近总体均值向量,则进行该调整,直到不存在调整空间,则停止算法。
 
 
 
这个问题看起来好像没什么实际意义,纯粹是一个数字游戏,其实可以很广泛的加以应用。比如给定你一队人马,每个人能力不同,如何分配才能保证每组实力相近以求得公平?或者一些施工人员,你想要他们产生竞争激励,分组时就不应该偏心而应尽可能保证每组实力接近。该问题就是这些实际问题的抽象。
 

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值