最小向量积

调整数组元素的位置使得两数组向量积最小

问题描述:

有长度为n的数组a,b,问如何调整数组内元素的位置使得 a ⋅ b a\cdot b ab 最小?

解的通俗描述:

对应小的乘大的,大的乘小的,得到的向量积最小。

证明:

  1. 重定义a的逆序
    依据数组b来定义数组a的逆序,假设有a,b对应位置上的两对数 a i , a j a_{i},a_{j} ai,aj b i , b j b_{i},b_{j} bi,bj,如果有 b i &lt; b j b_{i}&lt;b_{j} bi<bj a i &gt; a j a_{i}&gt;a_{j} ai>aj,或者 b i &gt; b j b_{i}&gt;b_{j} bi>bj a i &lt; a j a_{i}&lt;a_{j} ai<aj,则称 a i , a j a_{i},a_{j} ai,aj为一对逆序,否则不为逆序。
  2. 证明单调
    假设现在有 b i &lt; b j b_{i}&lt;b_{j} bi<bj a i &lt; a j a_{i}&lt;a_{j} ai<aj i = 0 , 1 , ⋯ &ThinSpace; , n − 1 i=0,1,\cdots,n-1 i=0,1,,n1 j = 0 , 1 , ⋯ &ThinSpace; , n − 1 j=0,1,\cdots,n-1 j=0,1,,n1 i ≠ j i\ne j i̸=j
    则向量积 S 1 = ∑ k = 0 , k ≠ i , k ≠ j n − 1 a k ⋅ b k + a i ⋅ b i + a j ⋅ b j S_{1}=\sum_{k=0,k\ne i,k\ne j}^{n-1}a_{k}\cdot b_{k}+a_{i}\cdot b_{i}+a_{j}\cdot b_{j} S1=k=0,k̸=i,k̸=jn1akbk+aibi+ajbj
    若现在交换 a i , a j a_{i},a_{j} ai,aj的位置,即数组a增加了一对逆序。
    向量积变为 S 2 = ∑ k = 0 , k ≠ i , k ≠ j n − 1 a k ⋅ b k + a i ⋅ b j + a j ⋅ b i S_{2}=\sum_{k=0,k\ne i,k\ne j}^{n-1}a_{k}\cdot b_{k}+a_{i}\cdot b_{j}+a_{j}\cdot b_{i} S2=k=0,k̸=i,k̸=jn1akbk+aibj+ajbi
    可以证得 a i ⋅ b i + a j ⋅ b j &gt; a i ⋅ b j + a j ⋅ b i a_{i}\cdot b_{i}+a_{j}\cdot b_{j}&gt;a_{i}\cdot b_{j}+a_{j}\cdot b_{i} aibi+ajbj>aibj+ajbi(这个简单证明放在第3点)
    S 1 &gt; S 2 S_{1}&gt;S_{2} S1>S2
    所以结论是:保持b不变,a每增加一对逆序,a,b的向量积就一定会变小,两者呈反比。

所以当a是相对于b的全逆序时,a,b的向量积最小。相反的,当a是相对于b的全顺序时,a,b的向量积最大。

  1. 下面证明 a i ⋅ b i + a j ⋅ b j &gt; a i ⋅ b j + a j ⋅ b i a_{i}\cdot b_{i}+a_{j}\cdot b_{j}&gt;a_{i}\cdot b_{j}+a_{j}\cdot b_{i} aibi+ajbj>aibj+ajbi
    因为 b i &lt; b j b_{i}&lt;b_{j} bi<bj a i &lt; a j a_{i}&lt;a_{j} ai<aj,所以 b i − b j &lt; 0 b_{i}-b_{j}&lt;0 bibj<0 a i − a j &lt; 0 a_{i}-a_{j}&lt;0 aiaj<0
    ( a i − a j ) ⋅ ( b i − b j ) &gt; 0 (a_{i}-a_{j})\cdot(b_{i}-b_{j})&gt;0 (aiaj)(bibj)>0
    对上式展开移项即可得到要证明的结论。
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 2
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值