【问题标题】:k-center in a large graph (road-network)大图中的 k 中心(道路网络)
【发布时间】:2013-08-18 11:22:05
【问题描述】:

我目前正在寻找一种方法来解决大型稀疏图上的 k-center 问题。数据来自openstreetmap,我想在城市中放置k个pizza-delivery-branches,以使从一个分支到图中任何节点的距离最小化。


示例:我应该在哪里放置 3 个披萨外卖分店才能最好地覆盖整个城市?


问题:该图包含大约 50,000 到 250,000 个节点(数据来自 openstreetmap)。

简化:解决方案不一定是完美的。一个近似值就足够了。 k 会小于 20。几个小时的运行时间是可以的。

我迫不及待想听听您的想法如何解决如此大的真实世界图(道路网络)上的问题。

【问题讨论】:

  • k 将小于 20。

标签: algorithm graph graph-algorithm approximation


【解决方案1】:

以下贪心算法是 2 近似值,适用于每条道路在两个方向上的行驶时间都相同的情况。 (忽略单向街道不应过多地扭曲旅行时间。)

任意选择第一个中心。对于每个后续中心,选择离现有中心最远的顶点。使用 Dijkstra 算法的多源扩展(初始化优先级队列以包含距离为 0 的所有现有中心),在现代硬件上运行的良好实现,参数 n=250,000 和 k=20 我认为最多需要一秒钟或两个。

【讨论】:

  • 我想我会试试的。但我担心人们对单向街道的无知,因为高速公路是非常快速且非常长的单向街道,会极大地扭曲旅行时间。
  • @user2033412 没有很好的最坏情况算法来处理单向街道。现实世界的道路网络当然不是那么具有对抗性,假设没有单向街道是解决理论问题的最简单的理论假设。您不必让您的实现忽略单向街道。
  • 所以我将实现它以了解单向街道并查看它的性能。我认为直观上 k 接近 20 的结果会很好,但 k 接近 1 的结果会变差。
  • 我期望以下性能:我的 Dijkstra 算法 的实现对于 100,000 个节点大约需要 30 毫秒。由于该算法只需要运行 20 次 Dijkstra,因此预计该算法将在不到一秒的时间内完成。
  • @user2033412 啊,我好像忘记了 Dijkstra 的正确号码。我会更新答案。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-02-15
  • 2020-04-15
  • 1970-01-01
相关资源
最近更新 更多