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

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

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

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

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

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

  1. (笔试题)将数组分成两组,使两组的和的差的绝对值最小

    题目: 数组中的数分为两组,给出一个算法,使得两个组的和的差的绝对值最小数组中的数的取值范围是0<x<100,元素个数也是大于0,小于100 比如a[]={2,4,5,6,7},得出的两组 ...

  2. ACMNO.16用迭代法求 。求平方根的迭代公式为: X[n+1]=1/2(X[n]+a/X[n]) 要求前后两次求出的得差的绝对值少于0.00001。 输出保留3位小数 输入 X 输出 X的

    题目描述 用迭代法求 . 求平方根的迭代公式为: X[n+1]=1/2(X[n]+a/X[n]) 要求前后两次求出的得差的绝对值少于0.00001.输出保留3位小数 输入 X 输出 X的平方根 样例输 ...

  3. LeetCode简单题之通过翻转子数组使两个数组相等

    题目 给你两个长度相同的整数数组 target 和 arr . 每一步中,你可以选择 arr 的任意 非空子数组 并将它翻转.你可以执行此过程任意次. 如果你能让 arr 变得与 target 相同, ...

  4. C练题笔记之:Leetcode-1460. 通过翻转子数组使两个数组相等

    题目: 给你两个长度相同的整数数组 target 和 arr . 每一步中,你可以选择 arr 的任意 非空子数组 并将它翻转.你可以执行此过程任意次. 如果你能让 arr 变得与 target 相同 ...

  5. 数组分成两组差值最小 python_数组中的数分为两组,让给出一个算法,使得两个组的和的差的绝对值最小,数组中的数的取值范围是0x100,元素个数也是大于0, 小于100 。...

    比如a[]={2,4,5,6,7},得出的两组数{2,4,6}和{5,7},abs(sum(a1)-sum(a2))=0: 比如{2,5,6,10},abs(sum(2,10)-sum(5,6))=1 ...

  6. 用php求n个分数的和,php关于数组n个随机数分成x组,使每组值相近的算法

    主要原理是,将数组从大到小排序,数组1先取数取第一个,数组2第2取第2个,以此类推 取完第一次数组之后,判断下数组1,数组2,进行一次排序,将数据最大的排前面(理论上来说,数组1数据最大,因为从大到小 ...

  7. 写一个使两个整数进行交换的方法(不能使用临时变量) 【前端每日一题-27】...

    写一个使两个整数进行交换的方法(不能使用临时变量) 这道题是一个比较有意思的题,记录于此. var a=10; var b=20;...不用临时变量让a和b交换console.log(a); cons ...

  8. 计算两个日期之间的日期差。输入:第一行为一个整数T,表示有T组数据,每行三个整数year, month, day 分别代表年,月,日。输出:每组输出一个整数,表示从2012年3月12到给出的日期共几天

    # 输入:第一行为一个整数T,表示有T组数据,接下去T行,每行三个整数year, month, day 分别代表年,月,日. # 输出:对于每组数据输出1个整数,表示从2012年3月12日到给出的日期 ...

  9. Leetcode4-寻找两个正序数组的中位数原理及代码实现

    LeetCode4 hard 题目 寻找两个正序数组的中位数 给定两个大小为m和n的正序(从小到大)数组nums1和nums2.请你找出这两个正序数组的中位数,并且要求算法时间复杂度为O(log(m+ ...

最新文章

  1. 中国大巴租赁行业市场前瞻与投资战略规划分析报告
  2. 2020-09-20C++学习笔记之与C语言对比1
  3. 第九章 硬件抽象层:HAL 心得笔记
  4. error BK1506
  5. 迟到4个月的华为P50,没有5G只有4G,售价4488元起
  6. form 提交多个对象及springMVC接收
  7. CentOS安装oracleJDK
  8. Bootstrap中模态框多层嵌套时滚动条问题
  9. 【Transformer】SMCA: Fast Convergence of DETR with Spatially Modulated Co-Attention
  10. Linux命令【五】系统函数
  11. java泛型 包_Java泛型应用浅析
  12. Dubbo之Adaptive注解用法
  13. java上传文件怎么设置成777权限,777权限的改法是怎样的 将文件权限修改为777图文教程...
  14. 基于用户电影评价的分析预测
  15. Wallpaper Engine pkg壁纸文件提取工具
  16. 用Java实现杨辉三角
  17. 计算机最简单的爱情音乐,音乐里那些最动人的情话,适合一个人在家静静聆听...
  18. [SCOI2007]降雨量 线段树和区间最值(RMQ)问题
  19. EDA(Quartus II)——乐曲硬件演奏电路设计
  20. 收购Beat Game,Facebook离“VR游戏社交王国”梦还有多远?

热门文章

  1. centos下新建超级用户及sudoers权限问题
  2. 关于微信小程序的好奇和多事
  3. Leetcode 122. 买卖股票的最佳时机 II 解题思路及C++实现
  4. Ubuntu16安装CUDA9.0+Anaconda+Tensorflow1.8GPU(2018.08.20最新)
  5. CRUD-员工列表 大体流程
  6. 接口的作用(java)
  7. 把ASCII码的字符串转为数字的16进制
  8. 匹配printf()说明符的类型
  9. 子类继承父类,并重写父类方法
  10. opencv 线性滤波器