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() 函数返回数组中所有值的和。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值