微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

最大化乘积的算法

如何解决最大化乘积的算法

| 给定两个整数数组B和A,我们如何重新排列它们的元素,以使所有i的∏ A [i] B [i]最大化?     

解决方法

如果数组包含非负数,则只需按降序对A和B进行排序。要查看最大乘积,请考虑一旦按此顺序对A和B进行排序,则可以尝试交换A的两项,例如A [i]和A [j]s.t。一世
              B[j]      B[i]
          A[i]      A[j]
          ------------------
              B[i]      B[j]
          A[i]      A[j]
即A [i] B [j] -B [i] A [j] B [i] -B [j],等于(A [i] / A [j])(B [j] -B [i ]),其中指数为零或负,因为B [i]≥ B [j]。根据假设A [i]≥ A [j]所以A [i] / A [j]≥ 1.因此,该比率等于或小于1,因为指数等于0或等于负。这表明新产品的价值比旧产品小。注意:这仅是一个说明,不是正式的证明,因为它仅考虑两个元素的交换。     ,假设非负数,似乎您应该按升序或降序(但相同)对它们进行排序。 由于所有内容都相乘,因此您将得到A [0] * A [0] * ... * A [0] * A [1] * .. * A [1] * ...等 因此,如果B [0]的数目为A [0] \,而B [1]的数目为A [1] \,那么,如果您假设A [0]是最大的数目,则需要最多的数目,因此,您应该在B [0]中具有最大值B,然后在B [1]中具有第二最大值,依此类推。 如果A中可以有负数,而B中不能有负数,那么它仍然可以为您提供最大的绝对值,但符号可能为负。     ,假设数组有正整数, 如果您获取产品日志: 变成
Sum B[i]* log A[i]
现在,如果由于重排不等式(请参阅此处:http://en.wikipedia.org/wiki/Rearrangement_inequality)而将两个都以升序排列,则可以使最大化,并且log是一个递增函数。 因此,按升序排列A,按升序排列B,您就完成了。     

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。