我正在处理大量的时间序列.这些时间序列基本上是每10分钟一次的网络测量,其中一些是周期性的(即带宽),而另一些则不是(即路由流量).
我想要一个简单的算法来进行在线"异常值检测".基本上,我想在内存(或在磁盘上)保存每个时间序列的整个历史数据,并且我想要检测实时场景中的任何异常值(每次捕获新样本时).实现这些结果的最佳方法是什么?
我目前正在使用移动平均线来消除一些噪音,但接下来是什么?简单的事情,如标准偏差,疯狂,...对整个数据集不能很好地工作(我不能假设时间序列是静止的),我想要一些更"准确"的东西,理想情况下是一个黑盒子,如:
double outlier_detection(double* vector, double value);
Run Code Online (Sandbox Code Playgroud)
其中vector是包含历史数据的double数组,返回值是新样本"value"的异常分数.
我正在编写一个快速的多线程程序,我想避免同步(需要同步的函数必须被称为每秒5,000,000次,所以即使互斥量太大也是如此).
场景是:我有一个类的全局实例,每个线程都可以访问它.为了避免同步,类中的所有数据都是只读的,除了一堆类成员,然后在TLS中声明(使用__thread或__declspec(thread)).
不幸的是,为了使用编译器提供的__thread接口,类成员必须是静态的,没有构造函数/解构函数.我使用的类当然有自定义构造函数,所以我作为类成员声明指向这些类的指针(类似于静态__thread MyClass*_object).
然后,第一次线程从全局实例调用方法时,我会执行类似"(如果_object == NULL)object = new MyClass(...)"的操作.
我最大的问题是:是否有一种智能的方式来释放这个分配的内存?这个全局类来自一个库,并且它被程序中的许多线程使用,并且每个线程以不同的方式创建(即每个线程执行不同的函数),并且每次我都不能放置代码的snipplet线程将要终止.感谢你们.