Closed. This question needs details or clarity. It is not currently accepting answers. Learn more
想改进这个问题吗?添加细节并通过editing this post澄清问题。
我想知道是否有一个解决公里重分配问题的算法,比如说出租车的路径:
一开始我带巴特
在2公里处我要荷马
在5公里处我带着莱尼和卡尔
在7公里处我乘巴尼
在10公里处我们到达了目的地

    Bart   |----------| 10km
    Homer    |--------| 8km
    Lenny       |-----| 5Km
    Carl        |-----| 5Km
    Barney        |---| 3Km

结果应该是这样的:
编辑:
正确的结果是Nico Schertler'sanswer
巴尼:3公里/5=0.6公里
卡尔:3公里/5+5公里/4=1.4公里
伦尼:3km/5+5km/4=1.4km
荷马:3公里/5+5公里/4+3公里/2=2.2公里
Bart:3km/5+5km/4+3km/2+2km=4.2km
0.6公里+1.4公里+1.4公里+2.2公里+4.2公里=10公里
如果我得到一个完整的结果,会更好,比如:
1 km + 1 km + 1 km + 2 km + 5 km + = 10 km
知道吗?
STE公司

最佳答案

你的计算不正确
0.6公里+1.4公里+1.4公里+2.2公里+4.2公里=9.8公里;不是10公里!
你可能想要这样的东西:

     km |  0-2  |  2-5  |  5-7  |  7-10 | Sum
----------------------------------------------
Bart    | 2 / 1 | 3 / 2 | 2 / 4 | 3 / 5 | 4,6
Omer    |       | 3 / 2 | 2 / 4 | 3 / 5 | 2,6
Lenny   |       |       | 2 / 4 | 3 / 5 | 1,1
Carl    |       |       | 2 / 4 | 3 / 5 | 1,1
Barney  |       |       |       | 3 / 5 | 0,6
                                         -----
                                         10,0

所以我们可以从头开始解决问题。
我假设您的数据结构如下:
Person { name, startsAt, partialDistance = 0 }

第一步是按startsAt对人员列表进行排序。然后累积距离:
lastCheckPoint = totalDistance
participatingPersons = persons.length
for i from persons.length - 1 to 0
    currentPosition = persons[i].startsAt
    currentDistance = lastCheckPoint - currentPosition
    for j from 0 to i
        persons[j].partialDistance += currentDistance / participatingPersons
    next
    participatingPersons -= 1
    while i >= 1 && persons[i - 1].startsAt == currentPosition
        participatingPersons -= 1
        i -= 1
    loop
    lastCheckpoint = currentPosition
 next

这是基本的想法将部分距离按列分布在人员之间。

10-06 04:53