当前位置: 首页 > news >正文

双阈值最大最小值筛选

问题:

如下图所示的问题,给定最小阈值、最大阈值以及一段数据队列,对数据队列中超过阈值部分的极值进行保存,即从队列中得到P1-P6
在这里插入图片描述

计算规则

规则类似状态机
首先定义last_type标志位:
{ 上一时刻大于 m a x _ t h : l a s t t y p e = 1 上一时刻在 m a x _ t h 和 m i n _ t h 之间 : l a s t t y p e = 0 上一时刻小于 m i n _ t h : l a s t t y p e = − 1 \left\{ \begin{array}{l} 上一时刻大于max\_th : last_type = 1 \\ 上一时刻在max\_th和min\_th之间 : last_type = 0 \\ 上一时刻小于min\_th : last_type = -1 \\ \end{array} \right. 上一时刻大于max_th:lasttype=1上一时刻在max_thmin_th之间:lasttype=0上一时刻小于min_th:lasttype=1
定义存储数据为最终返回的数据data
规则
{ 不符合阈值直接 l 略过 如果当前为 d a t a 是空 − 直接放入 d a t a 如果 d a t a 最后数据 l a s t _ t y p e 为 − 1 并且当前大于阈值直接放入 d a t a 如果 d a t a 最后数据 l a s t _ t y p e 为 1 并且当前大于阈值 d a t a b a c k = m a x ( d a t a b a c k , 当前值 ) 如果 d a t a 最后数据 l a s t _ t y p e 为 − 1 并且当前小于阈值 d a t a b a c k = m i n ( d a t a b a c k , 当前值 ) 直接放入 d a t a 如果 d a t a 最后数据 l a s t _ t y p e 为 1 并且当前小于阈值直接放入 d a t a \left\{\begin{array}{l} 不符合阈值直接l略过 \\ 如果当前为data是空-直接放入data \\ 如果data最后数据last\_type为-1并且当前大于阈值直接放入data \\ 如果data最后数据last\_type为1并且当前大于阈值data_back = max(data_back,当前值) \\ 如果data最后数据last\_type为-1并且当前小于阈值data_back = min(data_back,当前值)直接放入data \\ 如果data最后数据last\_type为1并且当前小于阈值直接放入data \end{array} \right. 不符合阈值直接l略过如果当前为data是空直接放入data如果data最后数据last_type1并且当前大于阈值直接放入data如果data最后数据last_type1并且当前大于阈值databack=max(databack,当前值)如果data最后数据last_type1并且当前小于阈值databack=min(databack,当前值)直接放入data如果data最后数据last_type1并且当前小于阈值直接放入data

代码

#include "iostream"
#include "deque"
#include "vector"
#include "math.h"
// 搜索最值using namespace std;// 寻找周期的最大值最小值
class FindMM
{
private:double max_th;double min_th;deque<double> mDataQue;public:FindMM(double _max_th, double _min_th){max_th = _max_th;min_th = _min_th;}~FindMM(){}int last_type = 0;int type(double _data){if(_data < min_th) return -1;if(_data >= min_th && _data <= max_th) return 0;return 1;}void push_back(double _data){if(_data >= min_th && _data <= max_th){return;}if(last_type == 0){mDataQue.push_back(_data);last_type = type(_data);return;}// 大于情况if(_data > max_th && (last_type == -1)){mDataQue.push_back(_data);last_type = type(_data);return;}if(_data > max_th && (last_type == 1)){if(_data > mDataQue.back()){mDataQue.back() = _data;}return;}// 小于情况if(_data < min_th && (last_type == 1)){mDataQue.push_back(_data);last_type = type(_data);return;}if(_data < min_th && (last_type == -1)){if(_data < mDataQue.back()){mDataQue.back() = _data;}return;}}void print(){for(int i = 0; i < mDataQue.size(); ++i){std::cout << mDataQue[i] << " ";}std::cout << std::endl;}
};int main(void){int max_th = 1;int min_th = -1;FindMM finder(max_th, min_th);vector<double> fuction;for(double i = 0; i < 10; i += 0.2){fuction.push_back(sin(i)*2);std::cout << fuction.back() << " ";}std::cout << std::endl;for(int i = 0; i < fuction.size(); ++i){finder.push_back(fuction[i]);}finder.print();return 0;
}

相关文章:

  • 北京网站建设多少钱?
  • 辽宁网页制作哪家好_网站建设
  • 高端品牌网站建设_汉中网站制作
  • 锂离子电池健康状态预测(Part1,Python)
  • Unity Shader unity文档学习笔记(十八):unity雾效原理
  • 算法板子:树形DP、树的DFS——树的重心
  • 除湿机的标准
  • 深入探究CSRF与SSRF漏洞复现:从原理到实践
  • 智能驾驶学习笔记,第一天
  • opencascade AIS_ViewCube源码学习小方块
  • Linux中栈的大小的修改
  • vue3+element-plus实现table表格整列的拖拽
  • 函数对象/仿函数
  • 【机器学习】逻辑回归的梯度下降以及在一变量数据集、两变量数据集下探索优化的梯度下降算法
  • 26.9 Django书籍管理练习
  • vue实现简易的全局加载动画效果
  • 2.回文数
  • Python使用内置logging模块打印日志
  • 9月CHINA-PUB-OPENDAY技术沙龙——IPHONE
  • IE9 : DOM Exception: INVALID_CHARACTER_ERR (5)
  • [ JavaScript ] 数据结构与算法 —— 链表
  • 【347天】每日项目总结系列085(2018.01.18)
  • C++类的相互关联
  • css属性的继承、初识值、计算值、当前值、应用值
  • httpie使用详解
  • Java小白进阶笔记(3)-初级面向对象
  • OSS Web直传 (文件图片)
  • Python学习之路16-使用API
  • react 代码优化(一) ——事件处理
  • windows下使用nginx调试简介
  • 湖南卫视:中国白领因网络偷菜成当代最寂寞的人?
  • 今年的LC3大会没了?
  • 开源中国专访:Chameleon原理首发,其它跨多端统一框架都是假的?
  • 前言-如何学习区块链
  • 世界编程语言排行榜2008年06月(ActionScript 挺进20强)
  • 小试R空间处理新库sf
  • 学习ES6 变量的解构赋值
  • 从如何停掉 Promise 链说起
  • 新年再起“裁员潮”,“钢铁侠”马斯克要一举裁掉SpaceX 600余名员工 ...
  • 组复制官方翻译九、Group Replication Technical Details
  • ​二进制运算符:(与运算)、|(或运算)、~(取反运算)、^(异或运算)、位移运算符​
  • # 利刃出鞘_Tomcat 核心原理解析(二)
  • #### golang中【堆】的使用及底层 ####
  • #Linux(帮助手册)
  • #Linux(权限管理)
  • #调用传感器数据_Flink使用函数之监控传感器温度上升提醒
  • $ is not function   和JQUERY 命名 冲突的解说 Jquer问题 (
  • (1)Nginx简介和安装教程
  • (javascript)再说document.body.scrollTop的使用问题
  • (NSDate) 时间 (time )比较
  • (二十一)devops持续集成开发——使用jenkins的Docker Pipeline插件完成docker项目的pipeline流水线发布
  • (附源码)ssm户外用品商城 毕业设计 112346
  • (贪心 + 双指针) LeetCode 455. 分发饼干
  • (已更新)关于Visual Studio 2019安装时VS installer无法下载文件,进度条为0,显示网络有问题的解决办法
  • (原創) 如何解决make kernel时『clock skew detected』的warning? (OS) (Linux)
  • (转)fock函数详解
  • (转)平衡树
  • .NET CORE 2.0发布后没有 VIEWS视图页面文件