挑战程序设计竞赛: Minimum Scalar Product

题目大意

在这里插入图片描述

解题思路

一个向量 v 1 v_1 从小到大排序,另一个向量 v 2 v_2 从大到小排序,点积最小。证明如下:

  • (1): 由于两个向量的元素位置是任意变换的,不妨令第一个向量元素从小到大排序。
  • (2): 在两个元素的情况下, ( x 1 , x 2 ) (x_1, x_2) , ( y 1 , y 2 ) (y_1, y_2) 。假定 y 1 < = y 2 y_1 <= y_2 ,此时有两种结果 x 1 y 1 + x 2 y 2 x_1y_1+x_2y_2 .与 x 1 y 2 + x 2 y 1 x_1y_2+x_2y_1 则:
    x 1 y 1 + x 2 y 2 x 1 y 2 x 2 y 1 = x 1 ( y 1 y 2 ) x 2 ( y 1 y 2 ) = ( x 1 x 2 ) ( y 1 y 2 ) > = 0 x_1y_1+x_2y_2 - x_1y_2-x_2y_1 = x_1(y_1-y_2)-x_2(y_1-y_2) = (x_1-x_2)(y_1-y_2)>=0
    由上式可知,当 y 1 < y 2 y_1<y_2 则: x 1 y 1 + x 2 y 2 > = x 1 y 2 + x 2 y 1 x_1y_1+x_2y_2 >= x_1y_2+x_2y_1
  • (3): 若多个元素,并且 v 2 v_2 不按降序, 则交换任意一对不满足降序的元素,最后得到的点积都更小。一直交换,最终得到降序的 v 2 v_2

代码

猜你喜欢

转载自blog.csdn.net/Wangpeiyi9979/article/details/93745155