![]() |
|
|
![]()
|
|
| LSD |
|
|||
![]() Leprechaun Software Developer ![]() ![]() ![]() ![]() Профиль Группа: Модератор Сообщений: 15718 Регистрация: 24.3.2004 Где: Dublin Репутация: нет Всего: 538 |
Есть некая очередь конечной, фиксированной длинны. В нее постоянно добавляются данные и соответственно старые выкидываются. Есть цель получить максимальное и минимальное значение в очереди, не за весь период работы, а именно текущие. Вопрос в том как это сделать без просмотра все очереди.
Единственный вариант который я смог придумть это:
Еще есть один вариант, связанный с тем, что очередть переодически просматривается и в эти моменты можно провести поиск максимума и минимума обычным способом. Проблема в том, что значения максимума и минимума нужны до того как будет произведен просмотр очереди, и частота просмотров не совпадает с частотой добавления данных (она меньше, иногда просмотр вообще не производится длительное время). -------------------- Disclaimer: this post contains explicit depictions of personal opinion. So, if it sounds sarcastic, don't take it seriously. If it sounds dangerous, do not try this at home or at all. And if it offends you, just don't read it. |
|||
|
||||
| 3,14 |
|
|||
![]() Эксперт ![]() ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 1614 Регистрация: 18.6.2004 Где: Н. Новгород Репутация: нет Всего: 24 |
В общем случае придумать ничего лучше прохода по очереди не получится. Оптимизация возможно только для специфических задач, например, очередей большого размера, удаление в к-ых практически не происходит.
-------------------- Может быть, это только мой бред, Может быть, жизнь не так хороша, Может быть, я не выйду на свет, Но я летал, когда пела душа... |
|||
|
||||
| Sardar |
|
|||
![]() Бегун ![]() ![]() ![]() ![]() Профиль Группа: Модератор Сообщений: 6986 Регистрация: 19.4.2002 Где: Нидерланды, Groni ngen Репутация: 1 Всего: 317 |
Если известны все значения(принадлежат к, в фиксированному пределах разумного пречиляемому множеству), допустим их N, то можно сделать массив с длинной N, по некоторому признаку вычисляем индекс, в ячейках счетчик. С ограничениями, но за то самый быстрый/простой вариант.
Если значения это строки(бесконечное множество значений), то можно сделать B+ дерево(или что то подобное), и держать ссылки на первый и последний лист, тогда операции: min, max имеют константную скорость(первый/последний лист), добавление логарифмическую + балансировка дерева. Хешь таблица с красно-чёрным деревом в ковше, название говорит само за себя, реализация посложнее, но скорость при этом "самая-самая". А вообще что-то мы(я -------------------- Опыт - сын ошибок трудных © А. С. Пушкин Процесс написания своего велосипеда повышает профессиональный уровень программиста. © Opik Оценить мои качества можно тут. |
|||
|
||||
| Akina |
|
|||
|
Советчик ![]() ![]() ![]() ![]() Профиль Группа: Модератор Сообщений: 20581 Регистрация: 8.4.2004 Где: Зеленоград Репутация: 20 Всего: 454 |
В общем если параллельно с очередью хранить ее копию в отсортиренном массиве
-------------------- О(б)суждение моих действий - в соответствующей теме, пожалуйста. Или в РМ. И высшая инстанция - Администрация форума. |
|||
|
||||
| Mad |
|
|||
|
Опытный ![]() ![]() Профиль Группа: Эксперт Сообщений: 656 Регистрация: 18.10.2004 Где: Одесса Репутация: нет Всего: 19 |
LSD
При добавлении нового элемента, проверять его значение с текущим максимумом и минимумом. При удалении мфксимального или минимального элемента, пробегатся по по очереди в поисках новых. |
|||
|
||||
| podval |
|
|||
![]() Где я? Кто я? ![]() ![]() ![]() ![]() Профиль Группа: Экс. модератор Сообщений: 3094 Регистрация: 25.3.2002 Где: СПб Репутация: 18 Всего: 62 |
При обновлении очереди надо смотреть на выкидываемый элемент: если он равен текущему максимуму/минимуму, то после выкидыша запускать поиск максимума/минимума заново.
Если нет, то смотреть на входящий: превосходит ли он текущий максимум (меньше ли он текущего минимума). Если да, то присвоить это значение максимуму(минимуму). |
|||
|
||||
| 3,14 |
|
|||
![]() Эксперт ![]() ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 1614 Регистрация: 18.6.2004 Где: Н. Новгород Репутация: нет Всего: 24 |
А смысл? Чем это лучше простого однократного прохода при поиске? -------------------- Может быть, это только мой бред, Может быть, жизнь не так хороша, Может быть, я не выйду на свет, Но я летал, когда пела душа... |
|||
|
||||
| podval |
|
|||
![]() Где я? Кто я? ![]() ![]() ![]() ![]() Профиль Группа: Экс. модератор Сообщений: 3094 Регистрация: 25.3.2002 Где: СПб Репутация: 18 Всего: 62 |
3,14
Тем, что не каждый раз поиск нужен. Вместо просмотра очереди просто сравнили и попрыгали дальше. Тем более так устроены условия задачи:
|
|||
|
||||
| LSD |
|
||||
![]() Leprechaun Software Developer ![]() ![]() ![]() ![]() Профиль Группа: Модератор Сообщений: 15718 Регистрация: 24.3.2004 Где: Dublin Репутация: нет Всего: 538 |
Множество конечное, но ОЧЕНЬ большое: восмибайтовое целое.
Время сортировки массива сопоставимо с временем его просмотра, вот только если использовать список. Mad, podval Как я понял ваши предложения, они по сути одинаковы, наверно так и попробую сделать. Спасибо всем отвечавшим -------------------- Disclaimer: this post contains explicit depictions of personal opinion. So, if it sounds sarcastic, don't take it seriously. If it sounds dangerous, do not try this at home or at all. And if it offends you, just don't read it. |
||||
|
|||||
| Akina |
|
|||
|
Советчик ![]() ![]() ![]() ![]() Профиль Группа: Модератор Сообщений: 20581 Регистрация: 8.4.2004 Где: Зеленоград Репутация: 20 Всего: 454 |
LSD
-------------------- О(б)суждение моих действий - в соответствующей теме, пожалуйста. Или в РМ. И высшая инстанция - Администрация форума. |
|||
|
||||
| LSD |
|
|||
![]() Leprechaun Software Developer ![]() ![]() ![]() ![]() Профиль Группа: Модератор Сообщений: 15718 Регистрация: 24.3.2004 Где: Dublin Репутация: нет Всего: 538 |
Вставка элемента в массив задача тоже весьма трудоемкая, а списки довольно медленная штука. -------------------- Disclaimer: this post contains explicit depictions of personal opinion. So, if it sounds sarcastic, don't take it seriously. If it sounds dangerous, do not try this at home or at all. And if it offends you, just don't read it. |
|||
|
||||
| Sardar |
|
|||
![]() Бегун ![]() ![]() ![]() ![]() Профиль Группа: Модератор Сообщений: 6986 Регистрация: 19.4.2002 Где: Нидерланды, Groni ngen Репутация: 1 Всего: 317 |
Теоритически деревья будут самыми оптимальными по быстроте. Но узлы раскиданны по памяти, возможно процессором почти не будет использоватся кеш. Впрочем с современным железом, наверное, это уже не актуально. -------------------- Опыт - сын ошибок трудных © А. С. Пушкин Процесс написания своего велосипеда повышает профессиональный уровень программиста. © Opik Оценить мои качества можно тут. |
|||
|
||||
| LSD |
|
|||
![]() Leprechaun Software Developer ![]() ![]() ![]() ![]() Профиль Группа: Модератор Сообщений: 15718 Регистрация: 24.3.2004 Где: Dublin Репутация: нет Всего: 538 |
В общем я надеялся, что есть некий простой способ, которого я не заметил, но похоже что нет.
Задача состоит в отображении диаграммы некого процесса. Я предполагаю делать так: есть две переменные которые хранят максимум и минимум очереди. Они будут обновляться следующим образом:
-------------------- Disclaimer: this post contains explicit depictions of personal opinion. So, if it sounds sarcastic, don't take it seriously. If it sounds dangerous, do not try this at home or at all. And if it offends you, just don't read it. |
|||
|
||||
| Sardar |
|
|||
![]() Бегун ![]() ![]() ![]() ![]() Профиль Группа: Модератор Сообщений: 6986 Регистрация: 19.4.2002 Где: Нидерланды, Groni ngen Репутация: 1 Всего: 317 |
А почему так страшно пробежатся по очереди? Мониторим входные элементы, обновляем минимум. Мониторим выходные элементы, если минимум/максимум выпал, то пробегаемся по очереди. Для минимумов/максимумов держим отдельную очередь в N елементов, при изменении максимумов/минимумов обновлям эту буферную очередь, если она опустеет то пробегаесмся по очерди с данными. Как видим чем больше буферная очередь, тем реже ты будешь бегать по очереди с данными.
-------------------- Опыт - сын ошибок трудных © А. С. Пушкин Процесс написания своего велосипеда повышает профессиональный уровень программиста. © Opik Оценить мои качества можно тут. |
|||
|
||||
![]()
|
| Правила форума "Алгоритмы" | |
|
|
Форум "Алгоритмы" предназначен для обсуждения вопросов, связанных только с алгоритмами и структурами данных, без привязки к конкретному языку программирования и/или программному продукту.
Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, maxim1000. |
| 0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей) | |
| 0 Пользователей: | |
| « Предыдущая тема | Алгоритмы | Следующая тема » |
|
|
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности Powered by Invision Power Board(R) 1.3 © 2003 IPS, Inc. |