【问题标题】:Distribute discount coupons evenly between new and old users [closed]在新老用户之间平均分配折扣券[关闭]
【发布时间】:2022-11-25 05:37:45
【问题描述】:

我最近在面试中遇到了这个问题。假设您有 3 种类型的优惠券:

  1. 免运费(分发给 10% 的用户)
  2. 一送一(分发给10%的用户)
  3. 固定 10% 折扣(分配至 80%)

    任务是找到一种分发优惠券的方法,以便在每次结帐时为用户提供优惠券,并且该优惠券应该是上述三种之一。有多个用户进入你的系统,这种分配模式应该在系统中保持。

    我无法解决问题。我认为我们需要为每个令牌分配优先级并随机选择它们。

【问题讨论】:

    标签: python math probability system-design


    【解决方案1】:

    有两种主要选择:随机方法和确定性方法。

    随机方法将使用分布函数来决定将哪个优惠券分配给给定用户。挑战在于让这个函数公平,满足 10/10/80 数。

    创建良好分布的一种简单方法是使用散列。例如,获取用户 ID(或用户的其他独特信息,如电子邮件)并使用加密强哈希函数对其进行哈希处理。结果将是一个数字,它均匀分布在哈希的范围内。现在您可以为第一张优惠券获取范围的前 10%,为第二张优惠券获取范围的第二个 10%,其余为第三张优惠券。

    一种完全不同的方法是使用确定性模型。由于您有并发用户进入系统,因此您需要以某种方式同步选择过程。

    您可以使用优惠券队列 - 将 10 张优惠券 #1、10 张优惠券 #2 和 80 张优惠券 #3 添加到列表中(或将数字乘以 10、100、1000)。打乱列表并将其放入队列中。现在,当客户结账时,从队列中读取下一张优惠券,从客户的角度来看,这将是随机的。并根据需要重新填充队列。

    根据系统规模,还有许多其他方法可以处理分布,但队列是一种简单的方法。

    顺便说一句,我会采用随机方法,因为它需要较少的基础设施。

    【讨论】:

    • 谢谢@AndrewR 的回答。我认为随机方法最适合这种情况。
    猜你喜欢
    • 1970-01-01
    • 2019-02-17
    • 2012-12-27
    • 2014-10-17
    • 1970-01-01
    • 2015-09-08
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多