程序里面,对于数据串处理,会因为某些偶发干扰,导致数据串无效,那么有效识别出数据串波动,则是我们一个经常可能碰到的需求了。
这里先起一个头,最直接想到的肯定是,数据串排序,然后直接首尾相减,就可以获得,当然我们也会知道,当数据串长度比较长,而哪种排序方法,都经过多次迭代,运算量比较大,内存占用比较高,所以肯定不是最佳方法。
这里我先说一个我对于此类问题采用的方法(16位为例):
1、开2个寄存器,一个初值0,一个初值满位1。
2、0的寄存器和数据串元素比较大,大的则赋值给该寄存器。
3、FFFF的寄存器和数据串元素比较小,小的则赋值给该寄存器。
4、遍历数据串
5、2寄存器减法,结果就是数据波动值
这个方法,每元素做2次比较并可能执行赋值,动作可以在每个数据采集后即时完成。所以代码少,运行效率高。
这里发这个帖子,我当然不是认为我这个方法已经最优了,是想着大家能七嘴八舌的闲聊一下,是不是有更少的计算,更有效的获取该目标。
顺便这里提一个思考题,典型的我们另外一种是数据串需要去掉一个最大值,去掉一个最小值,是不是通过上面方法,扩展一下实现,代码效率如何?或者还是排序更有效?
|