12
C语言的滚动中值算法
我目前正在研究一种算法,以在C语言中实现滚动中值过滤器(类似于滚动均值过滤器)。从我对文献的搜索来看,似乎有两种相当有效的方法来实现。首先是对值的初始窗口进行排序,然后执行二进制搜索以插入新值,并在每次迭代时都删除现有值。 第二种方法(来自Hardle和Steiger,1995年,JRSS-C,算法296)构建了一个双端堆结构,一端为maxheap,另一端为minheap,中间为中值。这产生了线性时间算法,而不是O(n log n)。 这是我的问题:实施前者是可行的,但是我需要在数百万个时间序列上运行它,因此效率非常重要。事实证明,后者非常难以实施。我在R的stats软件包的代码的Trunmed.c文件中找到了代码,但这是相当难以理解的。 有人知道线性时间滚动中值算法的编写良好的C实现吗? 编辑:链接到Trunmed.c代码http://google.com/codesearch/p?hl=zh-CN&sa=N&cd=1&ct=rc#mYw3h_Lb_e0/R-2.2.0/src/library/stats/src/Trunmed.c
114
c
algorithm
r
statistics
median