【问题标题】:Progressive non-linear algorithm for increasing discount增加折扣的渐进非线性算法
【发布时间】:2011-11-08 10:38:29
【问题描述】:

一个系统要支持100个用户,支持的价格是3

一个系统必须支持 10 000 个用户,支持的价格是 1

我必须设计一种算法来给我介于两者之间的价格,以便它会随着用户数量的增加而逐渐上涨。

我尝试将用户数乘以 0.0002 以获得折扣值,我得到了

300 位用户 * 0.0002 = 0.06 折扣,因此支持价格 = 2.94 总收入 = 300 * 2.94 = 882

5000 个用户 * 0.0002 = 1 个折扣,因此支持价格 = 2 总收入 = 5000 * 2 = 10 000

8000 位用户 * 0.0002 = 1.6 折扣,因此支持价格 = 1.4 总收入 = 8000 * 1.4 = 11 200

10 000 个用户 * 0.0002 = 2 折扣,因此支持价格 = 1 总收入 = 8000 * 1.4 = 10 000

所以你看到在给定点之后我实际上拥有更多用户但收到的付款更少。

我不是数学家,我现在这不是一个真正的编程问题,但我不知道在哪里可以问这个问题。如果有人可以帮助我提供任何信息,我将不胜感激。谢谢!

【问题讨论】:

  • 有人能把它移到 MathOverflow 吗?
  • @El 它看起来像一个研究级问题吗? Mathematics 或许

标签: algorithm math


【解决方案1】:

price = n * (5 - log10(n)) 将适用于 100 < n < 10000

请确保您使用的是 base-10 日志而不是自然 (base-e) 日志。如果您的语言通常没有以 10 为底的日志,您可以这样计算:
function log10(x) { return log(x)/log(10); }

对于 100 个用户,这是 100 * (5 - log10(100)),它给出了 100 * (5 - 2),即 300。

对于 1000 个用户,这是 1000 * (5 - log10(1000)),它给出了 1000 * (5 - 3),即 2000。

对于 10000 个用户,这是 10000 * (5 - log10(10000)),它给出了 10000 * (5 - 4),即 10000。

让我们选择一些更随机的数字。
2500 个用户:2500 * (5 - log10(2500)) 给我们2500 * (5 - 3.39794),即 4005。
6500 位用户:6500 * (5 - log10(6500)) 给了我们6500 * (5 - 3.81291),即 7716。
8000 个用户:8000 * (5 - log10(8000)) 给我们8000 * (5 - 3.90309),即 8775。

应该为你正在建模的东西制定正确的方法。

【讨论】:

  • 这是每个用户的价格图。请注意,100 = 3、1000 = 2、10000 = 1。这是链接:www3.wolframalpha.com/input/…
  • 请记住,n -> 100000, price -> 0。您可能希望在代码中将价格限制为至少 1。
  • 感谢多项式!我喜欢看到知道他们的东西的人。这将完美地工作!
【解决方案2】:

线性调整每位用户的价格并没有像您展示的那样工作,但您可以尝试线性调整总收入。

  • 100 个用户的总收入 = 300
  • 10000 个用户的总收入 = 10000
  • n 个用户的总收入 = (n-100) / (10000-100) * (10000-300) + 300

你知道n个用户的总收入是每个用户的支持价格乘以用户数,也就是说,现在你必须找到函数f(n em>) 使得 f(n) * n = (n-100) / (10000-100 ) * (10000-300) + 300。

如果你必须证明随着总收入总是增加,支持的价格总是降低,只要证明 f'(n) ≤ 0 当 100 ≤ n ≤ 10000。

【讨论】:

    猜你喜欢
    • 2010-11-23
    • 2012-08-07
    • 1970-01-01
    • 1970-01-01
    • 2022-11-14
    • 1970-01-01
    • 1970-01-01
    • 2020-03-13
    • 1970-01-01
    相关资源
    最近更新 更多