我想知道是否有解决公里重新分配问题的算法,例如出租车的路径:
一开始我带巴特
在km 2,我带着荷马
在5公里处,我带Lenny和Carl
在公里7,我带Barney
在10公里处,我们到达了目的地
Bart |----------| 10km
Homer |--------| 8km
Lenny |-----| 5Km
Carl |-----| 5Km
Barney |---| 3Km
结果应如下所示:
编辑: 正确的结果是Nico Schertler的answer。
Barney: 3km / 5 = 0.6 km
Carl: 3km / 5 + 5km / 4 = 1.4 km
Lenny: 3km / 5 + 5km / 4 = 1.4 km
荷马: 3km / 5 + 5km / 4 + 3 km / 2 = 2.2 km
Bart: 3km / 5 + 5km / 4 + 3 km / 2 + 2km = 4.2 km
0.6 km + 1.4 km + 1.4 km + 2.2 km + 4.2 km = 10 km
1 km + 1 km + 1 km + 2 km + 5 km + = 10 km
有什么想法吗?
步骤
答案 0 :(得分:1)
您的计算不正确
0.6 km + 1.4 km + 1.4 km + 2.2 km + 4.2 km = 9.8 km;不是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
这是基本的想法。在人员之间逐列分配部分距离。