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