【问题标题】:How to solve this algorithmic problem - Gopher 2如何解决这个算法问题 - Gopher 2
【发布时间】:2020-03-27 12:23:53
【问题描述】:

我正在努力解决这个问题https://open.kattis.com/problems/gopher2:

摆脱了犬类威胁的地鼠家族必须面对一个新的 捕食者。

是 ????地鼠和????地鼠洞,每个洞都有不同的 (????,????) 坐标。一只鹰来了,如果一只地鼠没有到达一个洞 ???秒它很容易被吃掉。一个洞最多能救 一只地鼠。所有的地鼠都以相同的速度运行????。地鼠 家庭需要一种逃生策略,以尽量减少易受伤害的 > > 地鼠的数量。

t 最大限度地减少易受攻击的 gopher 的数量。

蛮力方法是找到每个地鼠可到达的所有可能的洞,然后找到所有不同的(地鼠,洞)对。

有更快的算法吗?

【问题讨论】:

  • 这可以表述为最小权重二分匹配问题。有关如何解决它的一些想法,请参阅this answer
  • @jrook 您如何将其表述为加权图问题?目标是最大限度地节省地鼠的数量,而不是用最少的步行时间来拯救它们。

标签: algorithm greedy


【解决方案1】:

这可以表述为二分图上maximum cardinality matching problem 的一个实例。

A 是一组地鼠,B 是一组孔。从地鼠a ∈ A到洞b ∈ B有一条边,如果它们之间的距离最大为s*v,即地鼠在可用时间内可以跑的最大距离。

解决方案由该图中边的最大尺寸子集组成,这样 (1) 每个a ∈ A 最多有一条边,(2) 每个b ∈ B 最多有一条边。约束表示每个地鼠只能去一个洞,每个洞只能适应一个地鼠的规则。 “易受攻击”的 gophers 的数量就是 gophers 的数量减去匹配中的边数。

该图需要 O(mn) 时间来构建,并且使用标准算法可以在 O(mn) 时间或更短的时间内找到最大基数匹配,例如Ford–Fulkerson,其中 m 是地鼠的数量,n 是孔的数量。

如果在线判断不够高效,您可以使用a more efficient algorithm 来查找匹配项,以及更有效的方法来查找图中的边,例如使用quadtree 在 O(n) 时间内查询哪些孔位于地鼠的距离 s*v 内。

【讨论】:

    猜你喜欢
    • 2011-03-20
    • 2011-02-15
    • 2021-06-19
    • 1970-01-01
    • 1970-01-01
    • 2019-07-05
    • 2014-10-07
    • 1970-01-01
    相关资源
    最近更新 更多