[an error occurred while processing this directive]
Можно мин/макс в скользящем окне за линейное время находить
(«Телесистемы»: Конференция «Цифровые сигнальные процессоры (DSP) и их применение»)

миниатюрный аудио-видеорекордер mAVR

Отправлено KPAH 08 февраля 2006 г. 19:32
В ответ на: Можно ли каким-нибудь способом вычислить медиану пачки данных без сортировки? отправлено subver 08 февраля 2006 г. 10:33

Не совсем в тему, но может быть эта идея поможет вами придумать как за линейное время и медиану найти:

Дано: найти максимально быстро максимум в скользящем окне по некоторой последовательности чисел (для каждого положения окна, окно сдвигается на 1 элемент в одну и ту же сторону на каждом шаге)

Вот алгоритм, сложность которого О(n).

Пусть у нас имеется стек, в котором помимо операций с ВЕРХНИМ элементом, добавлены операции доступа (просмотра и удаления) к НИЖНЕМУ элементу стека. Реализовать такую структуру несложно.

Каждый элемент стека имеет НОМЕР и ВЕС.

В начальный момент времени стек пуст.

Будем считать, что в первый момент времени в окне пусто. Затем в течение m "сдвигов" в окно добавляется по одному числу, а в дальнейшем при каждом сдвиге одно число добавляется, а одно исчезает.

Тогда при каждом сдвиге окна

1. Если НОМЕР нижнего элемента стека равен номеру числа, которое исчезло из окна, удалить этот элемент из стека
2. Создать новый элемент X, номер которого равен порядковому номеру числа, появившегося в окне, а вес - это значение числа, которое появилось в окне
3.
WHILE (стек не пуст и ВЕС верхнего элемента стека меньше ВЕСА элемента X) {
удалить верхний элемент стека
}
4. Поместить элемент Х на верх стека
5. Искомый максимум - это вес нижнего элемента стека

Итого, для последовательности длины n будет сделано n вставок в стек, n удалений из стека и не более 2n сравнений.

PS. Идея любезно предоставлена Sergey_ на форумах сайта algolist.manual.ru

Составить ответ  |||  Конференция  |||  Архив

Ответы


Отправка ответа

Имя (обязательно): 
Пароль: 
E-mail: 
NoIX ключ Запомнить

Тема (обязательно):
Сообщение:

Ссылка на URL: 
Название ссылки: 

URL изображения: 


Rambler's Top100 Рейтинг@Mail.ru
Перейти к списку ответов  |||  Конференция  |||  Архив  |||  Главная страница  |||  Содержание

E-mail: info@telesys.ru