首先,我进行了 StackOverflow 搜索,所以我知道这是新的。请继续阅读:
所以我有一个包含 9 个位置的字符串数组,需要找到它们之间的距离才能输入到算法中。我使用了谷歌的距离矩阵 API,并将这些地方作为起点和终点传递,它返回一个响应,我制作了一个这样的 nxn 方阵:
0 3201 4584 4821 1628 1218 1786 4738 4897
3122 0 1400 1638 1797 2756 3323 5310 5472
4523 1400 0 237 3198 4156 4723 6711 6872
4760 1638 237 0 3435 4394 4961 6948 7110
1324 1846 3247 3485 0 958 1525 3931 4093
932 2854 4273 4510 1002 0 567 4873 5034
1499 3422 4840 5078 1569 567 0 5440 5602
5061 5359 6760 6998 4019 4959 5526 0 161
5233 5531 6931 7169 4190 5130 5697 171 0
在这种情况下,按行和按列都是地名,即按相同顺序排列的相同地点数组,这就是为什么对角线元素为零(尽管实际上由于某种原因谷歌的响应并不总是 0)从自身到某个地方应该是 0。
现在的问题是,Google 距离矩阵 API 每个请求限制为 25 个元素,其中起点和终点的计数总和不应超过 25。因此,由于我使用相同的起点和终点,因此将其分解最多 12 个元素。但是我正在构建的应用程序需要计算超过 12 个位置,所以我正在考虑一种解决方法。
一个想法是使用这种逻辑(它不是真正的代码,我写它只是为了展示算法/伪代码):
if(count(places) > 12) {
distanceMatrix = []
for(place in placesArray) {
distanceMatrix[] = apiCall->(place, placesArray); // apiCall(origin, dest)
}
} else {
response = apiCall->(placesArray, placesArray); // apiCall(origin, dest)
distancesMatrix = convertResponseToDistancesMatrix(response)
}
所以基本上在这种情况下,如果地点数超过 12 个地点,它会改为有趣的 for 循环,它将一个地点作为起点,将所有地点作为目的地。这样我就可以将限制从 12 -> 25 移动,因为它计算 1 个起点和 24 个目的地。问题是仍然超过 24 岁,它无法工作。那么有没有其他方法可以克服这个问题?我知道必须有某种方法可以发出多个请求并填充矩阵,我想知道如何,因为我无法想到算法。