В настоящее время я работаю над алгоритмом реализации скользящего медианного фильтра (аналогичного среднему фильтру качения) в C. Из моего поиска литературы есть два достаточно эффективных способа сделать это. Первый - сортировать начальное окно значений, затем выполнять двоичный поиск для вставки нового значения и удаления существующего на каждой итерации.
Второй (от Hardle and Steiger, 1995, JRSS-C, Алгоритм 296) строит структуру с двойным концом, с максимальным переходом на одном конце, минером на другом, а срединным - посередине. Это дает алгоритм с линейным временем, а не один, который равен O (n log n).
Вот моя проблема: реализация первого выполнима, но мне нужно запускать это на миллионы временных рядов, поэтому эффективность имеет большое значение. Последнее очень сложно реализовать. Я нашел код в файле Trunmed.c кода для пакета статистики R, но он довольно неразборчив.
Кто-нибудь знает о хорошо написанной реализации C для линейного математического алгоритма, скользящего по времени?
Изменить: Ссылка на код Trunmed.c http://google.com/codesearch/p?hl=en&sa=N&cd=1&ct=rc#mYw3h_Lb_e0/R-2.2.0/src/library/stats/src/Trunmed.c