【发布时间】:2014-09-03 05:23:57
【问题描述】:
在我的情况下,我必须处理由日期和每个日期对应的数字组成的大量数据。这些日期之间的间隔不是静态的,这意味着一些日期相隔几秒钟,而另一些则相隔几天。此数据具有以下格式:(以 PHP 数组转储格式给出)
Array[2000] {
Array[2] {
Date: 2014-7-7 7:07:07
Data: 29.2934
}
Array[2] {
Date: 2014-7-7 7:08:13
Data: 30.10203
}
Array[2] {
Date: 2014-7-9 3:24:43
Data: 30.10203
}
...
}
我需要找到在某个时间限制内的两个日期之间的最大数据增量,例如一天、一周等。我一直在使用这个 PHP 代码来实现这一点:
for ($i=0; $i<$numrows-1; $i++) {
for($o=1; $o<($numrows-1)-$i; $o++) {
if((strtotime($dataArray[$i+$o]['Date'])-strtotime($dataArray[$i]['Date']))<86400) { //86400 for constraint of one day
$diffs[$i]['date'] = strtotime($dataArray[$i+$o]['Date']);
$diffs[$i]['data'] = $dataArray[$i+$o]['data']-$dataArray[$i]['Data'];
}
}
}
这将返回一个数组,其中包含数据数组每个元素的边界内的最大结束日期以及它们之间的数量差异。然后,我可以搜索 diffs 数组的最大数据元素,以确定哪一天数据增加最多。这工作正常,但不幸的是,它涉及将我的服务器的 CPU 设置为 100% 超过 20 秒以处理某些数据集,并导致它在此期间对其他请求无响应。
我想弄清楚的是如何以更有效的方式做到这一点;我做了一些研究,我认为这是在 O(n^2) 时间内,但是我似乎找不到使用更有效算法的方法。有什么方法可以使用更少的处理时间和系统资源来实现同样的目标?
【问题讨论】: