我目前正在寻找一种方法来解决大型稀疏图上的 k - 中心问题。数据来自openstreetmap,我想在城市中放置 k 披萨传递分支,这样就可以最大限度地减少从分支到图表中任何节点的距离。
示例:我应该在哪里放置3个披萨派送分支以覆盖最好的城市?
问题:该图表包含大约50,000到250,000个节点(来自openstreetmap的数据)。
简化:解决方案不一定非常完美。近似就足够了。 k 将小于20.几个小时的运行时间正常。
我迫不及待地想知道如何在如此大的真实世界图(道路网络)上解决问题。
答案 0 :(得分:2)
以下贪婪算法是2近似值,用于每条道路的行驶时间在两个方向上相同的情况。 (忽视单行道不应该过多地扭曲旅行时间。)
任意选择第一个中心。对于每个后续中心,选择距离现有中心最远的顶点。使用Dijkstra算法的多源扩展(初始化优先级队列以包含距离为0的所有现有中心),在参数n = 250,000和k = 20的当代硬件上运行的良好实现我估计最多需要一秒钟或两个。