2014-03-24 20 views
1

我想制定一個方程式,以確定在給定時間內用戶數量,基於每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個用戶(50%的分享率)只有1個新用戶的分享率是多少?

Week 1  Week 2  Week 3  Week 4  Week 5 
100 added  50 referred 25 referred 12.5 referred 6.25 referred 
       100 added  50 referred 25 referred 12.5 referred 
          100 added  50 referred 25 referred 
              100 added  50 referred 
                 100 added 

100 total  250 total  425 total  612.5 total 806.25 total 

任何幫助,非常感謝。

[編輯]

我發現這個公式爲1的工作:基於簡單地注意到在上表中的模式1股的比例,但我不知道如何實現佔有率入公式, 50人如何發揮作用?

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

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

這個問題似乎是題外話,因爲它不是關於節目。 – nwellnhof

+0

你用哪種語言做這個等式? – Llopis

+0

目前我正在用PHP測試方程我已經添加了一個可以解決1:1比例的編輯,但我不明白它的一部分足以適應不同的分享比例。 – dafky2000

回答

0

您最初沒有指定的語言,所以我寫了紅寶石的解決方案:

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 

的代碼似乎很清楚,因爲它說,它總結指數衰減。

有關更多的解釋看sum_of_exponential衰減功能,減少(:+)簡單地概括它所有的元素和:

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]] 
+0

這個解決方案可以工作,但是我正在尋找更多的是解決這個問題的單線數學公式。我已經能夠使用簡單的循環來解決。抱歉,由於我的聲譽,我還無法投票回答答案。 – dafky2000

+0

如果這就是你想閱讀[this](http://en.wikipedia.org/wiki/Exponential_decay)。解決方案是一個微分方程,你每增加一步就爲系統增加100個單位,每個時間步長相當於你的單位的半衰期。然而,你試圖求解一個微分方程,所以你不妨使用與這個方程中的for循環類似的積分。 –

+0

事實上,我會走得更遠,你需要解決的方程是dN/dt = -0.5 * N + 100.編輯:從頭開始,因爲在你的情況下時間是離散化的(你只在時間步長中加入100 )這個連續的方程將不起作用。 –