2016-01-13 103 views
1

鑑於5周不同的時間:如何計算多個時間範圍(最佳會議時間)的交集?

10am - 6pm 
3pm - 10pm 
4pm - 7pm 
5pm - 1am 
3pm - 12am 

是否有一個算法,計算給定的那些時間之間的最佳時間?像平均時間?

我曾嘗試添加了每一側,並且通過次數爲上劃分,但問題是當我試圖來計算時間ampm,所以有時不得不進行加權不同吧?像軍事時間10pm = 22/12am = 24 /

我還沒有編碼任何東西,因爲我一直在試圖找出賭注的方式去做,但它會被編程在JavaScript中。

編輯:

6pm - 9pm 
3pm - 8pm 
4pm - 7pm 
2pm - 10pm 
5pm - 11pm 

*6 + 3 + 4 + 2 + 5 = 20/5 = 4 
*9 + 8 + 7 + 10 + 11 = 45/5 = 9 

*best time range = 4pm - 9pm 

這就是我講的一個例子,它沒有考慮到am/pm

我想找到一個最佳時間範圍,給定五個時間範圍。

+1

我不確定你的意思是「5次不同的時間」,你有什麼是時間範圍,而不是時間 –

+0

嘗試計算時間差的均值,例如上午10點 - 下午6點 - > 8小時,下午3點到10點 - > 7小時......然後按時間段數除以總時數。 –

+0

首先,您必須定義一組時間範圍之間的平均值。你可以舉一個例子(和你一樣)並告訴我們期望的結果是什麼。現在你只是有一個很不明確的問題。 –

回答

1

如果你想知道所有持續時間的平均值,最簡單的方法將首先轉換爲24小時;以佔一日側翻,你可以24小時添加到結束時間,然後通過24

var timeRanges = [ 
    [10,18], 
    [15,22], 
    [16,19], 
    [17,1], 
    [10,18] 
]; 

var durations = timeRanges.map(function(range){ 
    return ((range[1] + 24) - range[0]) % 24; 
}); 

var totalDuration = durations.reduce(function(runningTotal, current){ 
    return runningTotal + current 
}, 0); 

var meanDuration = totalDuration/durations.length; 

我不知道這是你正在尋找讓MOD的結果,但是這是我如何解釋你的問題

0

我會考慮使用moment.js和moment-range.js庫,它可以快速計算一個或多個日期範圍的交集。

https://github.com/gf3/moment-range#contains--within--overlaps--intersect--add--subtract

然而,當你正在努力尋找多個時間段的路口,會有無解的情況下,所以你可能希望找到最時可以見面的時間(不是全部)。而且,實際上,人們可能有多個可用的時間範圍。

我會建議創建一個包含日期時間對象的對象的排序數組,無論它是開始還是結束,以及它是誰。然後,您可以遍歷數組,併爲每個日期時間將可用的人員添加到數組中。如果您在所有參與者都可用的時間到達,您會發現下一個結束時間,這是一個可能的會議時間 - 您可能有多個解決方案。

datesToCheck = [ 
{ date: yourDateObj, type: 'start', who: 'Juan' }, 
{ date: yourDateObj, type: 'end', who: 'Juan' }, 
{ date: yourDateObj, type: 'start', who: 'Juan' }, 
... 
] 

僞代碼:

sort datesToCheck by date property; 

for (i=0, i<datesToCheck.length, i++) 
    date = datesToCheck[i] 
    if date.type === 'start' 
    availablePeopleSet.add(date.who) 
    else 
    availablePeopleSet.remove(date.who) 
    if availablePeopleSet.size > mostAvailableFound 
    mostAvailableFound = availablePeopleSet.size 
    mostAvailableTimeStart = date; 

我將它留給你找出如何讓結束日期在這個範圍內(提示:它可能不是在列表中的下一個日期),和如何決定選擇哪個時間範圍,如何存儲多個可行的解決方案,以及爲每個人處理多個時間範圍。

相關問題