2

我需要从以下数据中获取平均睡眠间隔:

  • 22:00-06:00
  • 00:00-08:00
  • 02:00-10:00

=>预期:00:00-08:00

  • 22:00-06:00
  • 00:00-08:00
  • 02:00-10:00
  • 04:00-08:00

=>预计:01:00-08:00

问题是在午夜前后振荡,部分在 00:00 以下,部分在 00:00 以上。简单的意思是 22+00+02+04 不起作用。我可以计算午夜的次数(在这种情况下为 3 次),如果超过午夜之前的次数,我应该添加 25 次共同补偿。但这对于那些晚上工作并在 8 点到 14 点左右睡觉的人来说不算数

我的理论是:首先,需要找到峰值,比如最常去的区域(例如,9-10 有 5 条记录,10-11 有 3 条等),然后我可以决定共同补偿边界值通过增加 24 小时。

你怎么看?

4

3 回答 3

1

考虑到与午夜的相对差异怎么样?结果将是 (-2+0+2+4)/4 = 00:45

于 2012-04-21T13:39:00.110 回答
0

确定一个你可以说的下限

好吧,人们一天中的这个时间不会睡觉,如果我得到这个时间,那一定意味着他们整晚都在工作,现在才睡觉

如果时间低于该限制,则在开始和结束时增加 24 小时。

于 2012-04-21T13:38:08.690 回答
0

假设这个人的睡眠时间不超过 24 小时,然后做一个这样计算的方法(伪代码):

calculateSleepTime(sleepTime, wakeupTime) {
    if (sleepTime > wakeupTime) {
        return (24 - sleepTime) + wakeupTime;
    } else {
        return wakeupTime - sleepTime;
    }
}

averageSleepTime(sleepTimesArray) {
    totalSleptTime = 0;
    totalTimesSlept = 0;

    foreach (oneSleepTime in sleepTimesArray) { 
        totalTimesSlept++;
        totalSleptTime += calculateSleepTime(oneSleepTime);
    }

    return totalSleptTime / totalTimesSlept;
}

获得平均睡眠时间后,计算平均睡眠时间或平均醒来时间,然后进行加法/减法以找到您的间隔。对此的替代方法是找到平均睡眠时间和平均唤醒时间(考虑相对于午夜时间)。

于 2012-04-21T13:41:50.413 回答