在 O(nlogn+mlogm) 中获得折扣的最大人数

maximum number of people that get a discount in O(nlogn+mlogm)

问题:

假设我们有 n 个人站在 x = 0 线上(none 站在同一个地方)并且我们在 x = 1 线上有 m 家商店。(none 位于同一地点)。每家商店都会给先到那家商店的人打折。例如,如果三个人同时先于其他人到达一家商店,那么他们三个都可以获得折扣。但是如果其中一个先到,另外两个后到,只有一个可以打折。

每个人选择最近的商店去,每个人的速度都一样。问题是找到一种贪心算法,即 returns 获得折扣的最大人数以及每个人必须去的商店,以获得 O(nlogn+mlogm).

中的结果

我的做法:

如果商店与人的距离相等并且此算法有效,事情就会变得复杂。唯一的问题是顺序是 O(nlogn+mlogm+nlogm)。我不知道如何改进它,或者是否有更好的算法可用于此问题,因此不胜感激。

在数学上,你可以很容易地证明:

O(n * log(n) + m * log(m)) = O(n * log(n) + m * log(m) + n * log(m))

因为对于任何 n ∈ N*,任何 m ∈ N* 下面的不等式成立:

n * log(n) + m * log(m) + n * log(m) < 2 *(n * log(n) + m * log(m))

这使您的解决方案符合预期的复杂性。