Компьютерный форум OSzone.net  

Компьютерный форум OSzone.net (http://forum.oszone.net/index.php)
-   Программирование и базы данных (http://forum.oszone.net/forumdisplay.php?f=21)
-   -   Методы хранение данных. (http://forum.oszone.net/showthread.php?t=30054)

Vlad Drakula 06-01-2004 19:53 207030

Есть необходимость хранить несколько последних чисел.

Ест ли алгоритм быстрее циклического стека?
И как его быстрее( с точки зрения скорости работы ) его организовать?

( дополнительно е условие: операции с самими элементами достаточно медленные )

Prisoner 07-01-2004 05:56 207031

Если на ЯВУ, то реализовывать списками можно...

Vlad Drakula 07-01-2004 19:10 207032

Prisoner
ява не подходит он слишком медленна и плохо работает с объектами и мамятью, только СПП!

ivank 07-01-2004 20:15 207033

Vlad Drakula
Постановка задачи очень расплывчата. Очень.

ЯВУ - "язык высокого уровня", а не ява, которая java.

И мне очень интересно что такое "циклический стек", очень.

Vlad Drakula 08-01-2004 01:02 207034

ivank
если так то еще хуже.
дело втом что там очень много вызовов функцый, порядко 1.000.00 в секунду.

а задача четко поставлена: как самым тыстрым способом хранить последние N элементов.

идея циклической очереди была разработана очень давно.
во все компьютерах есть буфер обмена данных с клавиатуры.
это массив (вроде из 8 элементов) при нажатии на кнопку туда
записывается число, и счетцик конца увеличивается.
при чтении берется первый элемент в очереди а счетчик начала
сдвигается.
если счетчик конца доходит до начала то он обнуняется и начинает
затирать ранние элементы.
если конец упирается в начало то компьютер начинает пищать, это мы
ислушим при зависании винды :)

соодветственно я сейчас использую этот аналог, но только я начитаю не
скачала, как в очереди, а с конца, как в стеке.

ivank 08-01-2004 01:40 207035

Vlad Drakula
Что такое циклическая очередь я знаю. А вот циклический стек - твоё изобратение. Собственно очередь на базе статического массива и есть самое оптимальное решение, почкольку все операции - O(1). Это при условии, что она не может переполнится, иначе просто заводим динамический массив и когда у нас кол-во элементов хочет перевалить за доступный максимум, то увеличиваем размер не размышляя вдвое. В случае плюсов удобнее всего юзать std::vector, ибо у него есть .resize(). Кстати, есть стандартные контейнеры дека и очереди, которые и пользуются приблизительно такой стратегией. std::deque и std::queue, соответсвенно.

Добавлено:

Vlad Drakula
Цитата:

хранить последние N элементов
- задача всё же нечёткая. Ибо не сказано, что с ними делается потом. Хотя в общем случае, очередь самое подходящее решение.


Время: 11:28.

Время: 11:28.
© OSzone.net 2001-