求解两个数组中总体平均的差的绝对值和最小
来源:互联网 发布:python数据分析 pdf 编辑:程序博客网 时间:2024/06/03 14:29
1.贪心策略:
由于需要最小化公式,所以对于A中的数需要求其在B中差值最小的。由此的具体方案,对A和B进行排序,这在A中的第i个数分配B中第i个数进行求差值。
2.贪心选择性:
给A中最小的数分配一个B中最小的数,然后在剩余的数组中重复配对,就能得到最小的绝对差值和
证明:
取i,j 是A中最小和i!=j的两个下标,且i<j,按照贪心策略配对,绝对差值为abs=|A[i]-B[i]|+|A[j]-B[j]|;假设不按照贪心策略配对,给Ai分配Bj,给Aj分配Bi,绝对差值为abs=|A[i]-B[j]|+|A[j]-B[i]|
下面分情况讨论:
1.A[i]<A[j]<B[i]<B[j],abs=B[i]-A[i]+B[j]-A[j],abs'=B[j]-A[i]+B[i]-A[j],abs=abs'
2.A[i]<B[i]<A[j]<B[j],abs=B[i]-A[i]+B[j]-A[j],abs'=B[j]-A[i]+A[j]-B[i],abs<abs'
3.A[i]<B[i]<B[j]<A[j],abs=B[i]-A[i]+A[j]-B[j],abs'=B[j]-A[i]+A[j]-B[i],abs<abs'
4.B[i]<A[i]<B[j]<A[j],abs=A[i]-B[i]+A[j]-B[j],abs'=B[j]-A[i]+A[j]-B[i],abs<abs'
5.B[i]<B[j]<A[i]<A[j],abs=A[i]-B[i]+A[j]-B[j],abs'=A[i]-B[j]+A[j]-B[i],abs=abs'
综上所述abs<=abs',可得如果不按照贪心策略进行配对的话,则绝对差值不是最小的,因此要按照贪心策略进行配对,每次分配一个最小的。
3.优化子结构:
当按照贪心策略配对后得到优化解abs,如果同时去除A和B中最大的两个数k和t,abs'=abs-|k-t|是去除k和t的优化解
证明:
假设abs'是不是去除A和B中最大的k和t 的优化解,当加上k和t 两个树
后,根据贪心策略,优化解abs''=abs’+|k-t|,于是abs''等于abs,而abs是优化解,出现矛盾,所以当按照贪心策略配对后得到优化解C,如果同时去除A和B中最大的两个数k和t,abs'=abs-|k-t|是去除k和t的优化解
4.伪代码:
function getMin_Sum_Abs
sort(A);//这里可以用时间复杂度为nlogn的算法,比如快排
sort(B);//同上
sum = 0
for i=0 to A.length
sum+=abs(A[i]-B[i]);
return sum;
5.算法复杂度:O(nlogn)
- 求解两个数组中总体平均的差的绝对值和最小
- 数组中的数分为两组,使得两个组的和的差的绝对值最小
- 将一个数组拆分成两个数组,两个数组的差的绝对值最小
- python两个数组差的绝对值
- 给定两个数组,交换它们的元素,使得两数组元素之和的差绝对值最小
- 找出整数数组中两个数差值的绝对值最小
- 找出整数数组中两个数差值的绝对值最小
- 已知元素从小到大排列的两个数组x[]和y[],请写出一个程序算出两个数组彼此之间差的绝对值中最小的一个,这叫做数组的距离
- 交换两个数组使两个数组和的差最小
- 交换两个数组使两个数组和的差最小
- 交换两个数组使两个数组和的差最小
- 交换两个数组使两个数组和的差最小
- 交换两个数组使两个数组和的差最小
- 数组差的绝对值
- 证明两个集合的划分最小绝对值差问题
- 交换两个长度均为n的无序数组的元素,使两数组元素的和之差的绝对值最小
- 求数组两两之差绝对值最小的值
- 整数数组中两两之差绝对值最小的值
- Java学习之StringBuffer和StringBuilder
- windows无法自动将IP协议堆栈绑定到网络适配器
- Range Sum Query
- SpringMVC接收页面表单参数
- uvm的config_db
- 求解两个数组中总体平均的差的绝对值和最小
- C/C++ 打印格式小结
- Struts中Action动态使用
- 搜索二叉树的后序遍历判断
- 结对编程四则运算
- Tell me the area(计算几何--求两圆相交面积)
- 大话设计模式读书笔记(四) 装饰模式
- ZOJ
- cocos2d-x 提升篇 (17) 简单的桌上足球游戏