[color=#FF00FF]有如下数据:点        距离
A         3
B         2
C         5
.
.
.
Z         4 
 
点A到B之间的距离为:|3-2|=1,B到C的距离为:|2-5|=3...现在的问题是:希望 通过交换各个点的距离的值,想让A到Z之间的 距离值的 总和值 达到最大 
 
即:A到B的距离为1,B到C为3,如何使A...Z他们两两之间的距离 总和 达到最大值 ?
原则是:A...Z各点不动,通过交换 距离的值 来达到目的,只是交换距离3、2、5...4来达到目的 
 
假定如果只有以上A、B、C三个点,那么这3个点要达到 距离最大值 ,交换距离值后的情况应该如下:
A   2
B   5
C   3因为:|2-5|=3,|5-3|=2,则距离总和值为5,比之前的(之前总和值为4)大,实际上这3个点只能按这种组合可以达到最大值5。求一个算法,在这个点很多的时候,如何通过计算,得到这些点的 距离值总和 达到最大!最好有例程,谢谢大家!
[/color]

解决方案 »

  1.   

    楼主,我理解了下,这样看行不行:就相当于一个排序,假设楼主要算的点的数量为奇数,就是比如A-C;3个点就有了3个点数,为了达到最大差值那么肯定是要最大值和最小值相邻,就比如A  3   B   2   C  5  就是  3  2  5排序;先取点中最大点数的点放中间,然后两边放其余剩下的点中最小的2个点数的点,然后再取剩余最大的2个点数的点分别放旁边,这时考虑将最小的放最大的旁边,以此交替类推;如果要算的点的数量为偶数则则先选取最大点数的点和最小点数的点排列在中间,然后再取剩余最大和最小的点分别放刚才最小和最大的点数的点旁边(最大和最小的匹配)
    A  3   B   2   C  5  D  1 E 7         3   2   5  1  7---3  2  7  5  1----3   2  7  1  5就是这种过程。
    A  3   B   2   C  5  D  1 E 7 F  5    3   2   5   1  7   5---3  2  1  7  5  5 ---  3  5  1  7  2  5没有验证过,不知道是否正确
      

  2.   

    4楼的老兄说得有些道理,可是这个算法如何用SQL去实现啊?