2009-06-29 112 views
0

我在工作中有一個非常有趣的任務 - 我需要找出用戶花了多少時間來做某件事,我所擁有的只是他儲蓄的時間戳。我知道用戶在每一小部分作品後都會保存,所以他們相隔不遠。如何從時間戳計算時間跨度?

顯而易見的解決方案是找出一個小物件可能需要多少時間,然後纔會經過排序的時間戳,並且如果當前一個與前一個之間的差異超過了這個時間,則意味着用戶有茶歇如果它更少,我們可以將這個差值加到總和中。簡單的示例代碼來說明:

var prev_timestamp = null; 
var total_time = 0; 
foreach (timestamp in timestamps) { 
    if (prev_timestamp != null) { 
     var diff = timestamp - prev_timestamp; 
     if (diff < threshold) { 
       total_time += diff; 
     } 
    } 
    prev_timestamp = timestamp; 
} 

問題是,雖然我知道在一小部分上花了多少時間,但我不想依賴它。如果一些用戶比我的預測慢得多,我不希望他沒有薪水。所以我在想,這個問題能否有一些聰明的數學解決方案,可以在不知道什麼時間間隔可以接受的情況下工作?

PS。不好意思誤解,當然沒有人會根據這個數字付錢給人,即使他們願意,他們也明白這只是一個近似值。但我想找到一個解決方案,儘可能接近現實生活。

+1

「沒有工資」?你說你的算法會決定人們的付款嗎?我不喜歡這樣的工作... – balpha 2009-06-29 12:59:20

+0

我在這裏有點誇張:)但是這些數字將顯示給各種各樣的人,所以誰知道... – vava 2009-06-29 13:04:25

回答

5

您可以得到中位數TimeSpan,然後丟棄那些超過50%的TimeSpans。

但是,這種算法應恕我直言,只用於得到估計每個項目花費的小時,薪資。

1

抓住所有時期,看看平均水平?如果有些遠遠超出平均範圍,則可以丟棄它們或在平均值中爲它們使用調整後的值。

我同意Groo使用僅基於'save'時間戳的東西不是你應該做的 - 它永遠不會爲你提供在任務上花費的實際時間。

1

你尋求的聰明數學叫做「標準差」。