PHP 求一段时间内指标值的平均数

如题

我们的程序运行过程中每分钟会采集一个整数的数据指标。
持续采集n分钟就得到一个有n个元素的整数数组a[n]。
现在我们需要一个简单的算法,检测采集到的数据指标中,是否有异常。
异常的检测标准是:如果在连续m分钟内的指标的平均值大于w,则说明有异常。
输入:数组a[n], 正整数m, 整数w
返回:有异常返回 1,没有异常返回 0
例如:对于a={1, 5, 1, 3, 2}, m=2, w=2, 返回:1

附加说明:不同的实现方式执行效率不一样,如果能找到一个很高效的算法就更好了。

$a = [ 1 , 1 , 1 , 1 , 2 , 2 , 3 ]; //一段指标
$m = 3;
$w = 2;
/*
 * 根据要求假设我们的m是3,w是2,也就是连续3分钟内的指标数平均值不超过2.
 * 所以我们要计算的指标数应该是(1,1,1)(1,1,1) (1,1,2) (1,2,2) (2,2,3) 5段
 */

echo arr($a,$m,$w);

function arr($a=[],$m,$w){

	for($i=0; $i<(count($a)-$m+1); $i++){

		$b = array_sum(array_slice($a,$i,$m));

		if(($b/$m) >$w){
			return 1;
		}
	}
	return 0;	
}

//array_slice() 函数在数组中根据条件取出一段值,并返回。
//array_sum() 函数返回数组中所有值的和。

猜你喜欢

转载自blog.csdn.net/qq_24909089/article/details/80390043
今日推荐