数组取平均压缩
2015-03-19 21:46
127 查看
后台蓝牙采集到的数据量很大,比如有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; }
相关文章推荐
- 数组取平均压缩
- poj 2441 状态压缩+滚动数组+剪枝DP
- 字符串压缩程序,即整型数存入字符数组
- 将n进制的数组压缩成字符串(0-9 a-z)同一时候解压
- java 压缩文件 传入文件数组,压缩文件,在指定路径下生成指定文件名的压缩文件
- 求解两个数组中总体平均的差的绝对值和最小
- 文章标题android自制多媒体视频播放器和图片压缩技术(字节数组转成Bitmap)
- hihocoder offer收割19th 数组重排3 八进制位操作 状态压缩
- PHP 对数组进行压缩编码, 哪种最好?(php几种压缩方式的对比)
- C/C++ 数组排序(平均时间复杂度 O(nlogn))归并、快速、堆、希尔之希尔排序
- 每次选中数组中的N条数据, 如果让每条数据被选中的次数做到平均??
- c#实现linux中gzip压缩解压缩算法:byte[]字节数组,文件,字符串,数据流的压缩解压缩
- 3个学生,各学4门课,计算总平均分数以及第n个学生的成绩(用指向数组的指针作函数参数)
- UVA - 12235(压缩dp + 滚动数组)
- 【数组项目2-1 - 对称矩阵压缩存储的实现与应用——第九周】
- Java对象与byte[]数组之间的相互转化,压缩解压缩操作
- HDU1081 最大字段和 压缩数组(单调队列优化)
- 多维数组与特殊矩阵的压缩存储
- 第九周 数据结构实现项目--数组和广义表【项目2.2 - 压缩存储的对称矩阵的运算】
- LINQ操作数组(交集,并集,差集,最值,平均,去重复)