基於使用者投票的排名演算法(四) 牛頓冷卻定律

2021-07-09 13:46:41 字數 1465 閱讀 4462

日期: 2023年3月16日

這個系列的前三篇,介紹了hacker news,reddit和stack overflow的排名演算法。

今天,討論乙個更一般的數學模型。

這個系列的每篇文章,都是可以分開讀的。但是,為了保證所有人都在同一頁上,我再說一下,到目前為止,我們用不同方法,企**決的都是同乙個問題:根據使用者的投票,決定最近一段時間內的"熱文排名"。

你可能會覺得,這是乙個全新的課題,伴隨著網際網路而產生,需要全新的方法來解決。但是,實際上不是。我們可以把"熱文排名"想象成乙個"自然冷卻"的過程:

(1)任一時刻,**中所有的文章,都有乙個"當前溫度",溫度最高的文章就排在第一位。

(2)如果乙個使用者對某篇文章投了贊成票,該文章的溫度就上公升一度。

(3)隨著時間流逝,所有文章的溫度都逐漸"冷卻"。

這樣假設的意義,在於我們可以照搬物理學的冷卻定律,使用現成的公式,建立"溫度"與"時間"之間的函式關係,輕鬆構建乙個"指數式衰減"(exponential decay)的過程。

"牛頓冷卻定律"非常簡單,用一句話就可以概況:

物體的冷卻速度,與其當前溫度與室溫之間的溫差成正比。

寫成數學公式就是:

其中,

- t(t)是溫度(t)的時間(t)函式。微積分知識告訴我們,溫度變化(冷卻)的速率就是溫度函式的導數t'(t)。

- h代表室溫,t(t)-h就是當前溫度與室溫之間的溫差。由於當前溫度高於室溫,所以這是乙個正值。

- 常數α(α>0)表示室溫與降溫速率之間的比例關係。前面的負號表示降溫。不同的物質有不同的α值。

這是乙個微分方程,為了計算當前溫度,需要求出t(t)的函式表示式。

第一步,改寫方程,然後等式兩邊取積分。

第二步,求出這個積分的解(c為常數項)。

第三步,假定在時刻t0,該物體的溫度是t(t0),簡寫為t0。代入上面的方程,得到

第四步,將上一步的c代入第二步的方程。

假定室溫h為0度,即所有物體最終都會"冷寂",方程就可以簡化為

上面這個方程,就是我們想要的最終結果:

本期溫度 = 上一期溫度 x exp(-(冷卻係數) x 間隔的小時數)

將這個公式用在"排名演算法",就相當於(假定本期沒有增加淨贊成票)

本期得分 = 上一期得分 x exp(-(冷卻係數) x 間隔的小時數)

其中,"冷卻係數"是乙個你自己決定的值。如果假定一篇新文章的初始分數是100分,24小時之後"冷卻"為1分,那麼可以計算得到"冷卻係數"約等於0.192。如果你想放慢"熱文排名"的更新率,"冷卻係數"就取乙個較小的值,否則就取乙個較大的值。

[參考文獻]

* rank hotness with newton's law of cooling

(完)

基於使用者投票的排名演算法(四) 牛頓冷卻定律

日期 2012年3月16日 這個系列的前三篇,介紹了hacker news,reddit和stack overflow的排名演算法。今天,討論乙個更一般的數學模型。這個系列的每篇文章,都是可以分開讀的。但是,為了保證所有人都在同一頁上,我再說一下,到目前為止,我們用不同方法,企 決的都是同乙個問題 ...

基於使用者投票的排名演算法(四) 牛頓冷卻定律

這個系列的前三篇,介紹了hacker news,reddit和stack overflow的排名演算法。今天,討論乙個更一般的數學模型。這個系列的每篇文章,都是可以分開讀的。但是,為了保證所有人都在同一頁上,我再說一下,到目前為止,我們用不同方法,企 決的都是同乙個問題 根據使用者的投票,決定最近一...

基於使用者投票的排名演算法(二) Reddit

日期 2012年3月 7日 不好意思,這個系列中斷了近兩周,我會盡快在這幾天,把後面幾篇寫完。上一次,我介紹了hacker news的排名演算法。它的特點是使用者只能投贊成票,但是很多 還允許使用者投反對票。就是說,除了好評以外,你還可以給某篇文章差評。怎樣才能將贊成票和反對票結合起來,計算出一段時...