Algorithm 特定时间用户总数的用户推荐算法/等式

Algorithm 特定时间用户总数的用户推荐算法/等式,algorithm,equation,Algorithm,Equation,我试图建立一个方程式,根据每XX个时间段新用户的输入和他们的参考用户来确定给定时间的用户数量 基本上,我们希望每周手动向系统添加100个用户。我们假设每一个新用户在接下来的一周里会推荐一个以上的用户。这些新用户中的每一个都将在下一周推荐一个用户,以此类推。我们想要一个简单的等式,我们可以输入一周,然后返回该周结束时的总用户数。我已经使用for循环完成了这一点,但是如果可能的话,我希望它可以用一个简单的等式来表示 以下是前几周的一些示例数据和预期结果(总数) Week 1 Week

我试图建立一个方程式,根据每XX个时间段新用户的输入和他们的参考用户来确定给定时间的用户数量

基本上,我们希望每周手动向系统添加100个用户。我们假设每一个新用户在接下来的一周里会推荐一个以上的用户。这些新用户中的每一个都将在下一周推荐一个用户,以此类推。我们想要一个简单的等式,我们可以输入一周,然后返回该周结束时的总用户数。我已经使用for循环完成了这一点,但是如果可能的话,我希望它可以用一个简单的等式来表示

以下是前几周的一些示例数据和预期结果(总数)

Week 1        Week 2        Week 3        Week 4        Week 5
100 added     100 referred  100 referred  100 referred  100 referred
              100 added     100 referred  100 referred  100 referred
                            100 added     100 referred  100 referred
                                          100 added     100 referred
                                                        100 added

100 total     300 total     600 total     1000 total    1500 total
另外,如果共享率是每2个用户中只有1个新用户(50%的共享率),该怎么办

非常感谢您的帮助

[编辑]

我发现这个方程式适用于1:1的股份比率,仅仅是基于注意上表中的模式,但我不确定如何将股份比率应用到方程式中,50的实际作用是什么

$rate = 1;
$increase = 100;
$week = 5;

$balance = ($increase*$week) + (50 * ($week-1) * $week);

您最初没有指定语言,因此我用ruby编写了一个解决方案:

sum_of_exponential_decays = -> n { (0..n).map {|n| 100 * 0.5**n}.reduce(:+)}
sum_of_n = -> n {(1..n).inject(0) { |acc,x| acc += sum_of_exponential_decays[x-1]}}
sum_of_n[5]
# => 806.25
代码看起来很清楚,它是指数衰减的总和

要获得更多解释,请查看指数衰减函数的和,reduce(:+)简单地对其中的所有元素求和,并:

exponential_decays = -> n { (0..n).map {|n| 100 * 0.5**n}}
(1..5).map {|x| exponential_decays[x] }
# => [[100.0, 50.0],
 [100.0, 50.0, 25.0],
 [100.0, 50.0, 25.0, 12.5],
 [100.0, 50.0, 25.0, 12.5, 6.25],
 [100.0, 50.0, 25.0, 12.5, 6.25, 3.125]]

这个问题似乎是离题的,因为它不是关于编程的。你用哪种语言来做这个等式?目前我正在用PHP测试这个等式,我添加了一个解决1:1比率的编辑,但我对其中的一部分理解不够,无法适应不同的份额比率。第三周应该是425(250+100+50+25). 表的其余部分也需要更新。谢谢迈克,杜普时刻在那里-编辑和修复。这个解决方案确实有效,但我要寻找的是一个单线数学方程来解决这个问题。我已经能够用一个简单的循环来求解。对不起,由于我的声誉,我还不能投票赞成这个答案。如果你想读的话。这个解是一个微分方程,你在每个时间步向系统添加100个单位,每个时间步相当于你单位的半衰期。然而,你试图解一个微分方程,所以你可以使用积分,这对于这个方程中的for循环是非常有用的。事实上,我会更进一步,你需要解的方程是dN/dt=-0.5*N+100。编辑:划掉它,因为在你的例子中时间是离散的(你只在时间步长上加100),这个连续方程不起作用。嗯,是的,我用这个方程做了一些不成功的测试,我想真正的障碍是在每个间隔上加100?我上面编辑的方程是不是很走运?嗯,我添加的方程是一个微分方程,需要解出来才能得到一个可用的方程,如果你只想得到一个最上面的方程,它只是整数的和,所以n*(n+1)/2(*100)
exponential_decays = -> n { (0..n).map {|n| 100 * 0.5**n}}
(1..5).map {|x| exponential_decays[x] }
# => [[100.0, 50.0],
 [100.0, 50.0, 25.0],
 [100.0, 50.0, 25.0, 12.5],
 [100.0, 50.0, 25.0, 12.5, 6.25],
 [100.0, 50.0, 25.0, 12.5, 6.25, 3.125]]