zoukankan      html  css  js  c++  java
  • 数组取平均压缩

    后台蓝牙采集到的数据量很大,比如有1389条数据,但是在界面上只能显示30个数据点,多了的话这回影响界面美观。那么这样我们后台向前台提供数据时需要将数据压缩成30个点。1389/30=46.3。如果简单将每46个数据取平均或者没47个取平均都会影响精度。所以基本想法是将0.3作为修正因子,每隔46加0.3。直到修正因子达到1 或者1以上时,就将47个数据取平均,再将小数部分作为修正因子。由于只需要循环一次即可,因此时间复杂度为o(n)。算法代码如下:

    -(NSArray *)mergeArray:(NSArray*)array toArrayLength:(NSUInteger) length
    {
        NSMutableArray *resultArray=[[NSMutableArray alloc] init];
        
        if (array==nil || length<=0 || length>array.count)
        {
            return nil;
        }
        
        /*
         x: 平均个数的整数部分  如 average=2.6  则x=2
         y: 平均个数的小数部分  如 average=2.6  则y=0.6
         z: 用于累加
         */
        CGFloat average=(float)array.count/length;
        int  x=(int)average;
        CGFloat y=average-x;
        int count=0;
        CGFloat sum=0;
        CGFloat z=0;
        
        for (int i=0;i<array.count; i++)
        {
            sum+=[array[i] intValue];
            if (count==x-1)
            {
                z=z+y;
            }
            
            count++;
            
            if (count==(int)(x+z) || count==array.count-1)
            {
                [resultArray addObject:[NSNumber numberWithFloat:sum*1.0/count]];
                sum=0;
                count=0;
                if (z>1)
                {
                    z=z-1;
                    
                }
            }
        }
        return  resultArray;
    }
    


  • 相关阅读:
    spring的9个地方调用了5次后置处理器的详细情况
    spring容器启动
    什么是好的代码
    随机文件读写
    mysql 写锁
    mysql 高效率查询背景
    spring中的重点
    spring bean生命周期和上下文初始化
    雷电模拟器 v3.71绿色版
    免费申请 QQ 免费靓号
  • 原文地址:https://www.cnblogs.com/dengzhuli/p/4415559.html
Copyright © 2011-2022 走看看